![]() |
БД и Delphi
Люди знающие подскажите!
Опыта работы с БД - вапще никакого.. (((( Ситуация такая: Есть три таблицы: 1) Комплектующие(kompl.db) - ID, Тип(число), ПРоизводитель(число), Модель(строка), Цена($) 2) Тип комплектующей(types.db) - ID, Название (Процессор, Мать, винт и т.д.) 3) ПРоизводитель(manuf.db) - ID, Название (ASUS, MSI и т.д.) На форме в TreeView я выбираю типа комплектующей (Проц, мать и пр.) Далее должен делаться запрос к базе данных, чтоб он по ТИПУ комплектующей (проц и пр.) взял её ID из базы. Этот ID присваевается переменной: Код:
Procedure TypeSel2;Код:
With Query1 doПосле этого я должен выбрать в этом списке желаемого производителя.. Наприм это будет ASUS Я его выбираю. То что я выбрал присваивается переменной mnf. Делается запрос к БД и выбираются уже модели комплектующих этого производителя (этот кусок проги я еще не написал..) И после того как я выбиру модель, он мне должен выдать цену в Edit. ПОтом я выбираю несколько устройств, добавляя каждое из них в таблицу. И у меня по идее должно подсчитываться стоимость компа... вот.. Я решил не использовать компоненты DBCOmboBox, т.к. после выбора в нем чеголибо и щелчке вне его, то что выбрано - исчезает.. у меня лично так. Вопщем я повис вот тут: Код:
Procedure TypeSel2; |
Просто не присваивается или ошибку какую-то выдает ?
К сожалению не работаю с базами DB, а вот с DBF я попробовал вот такой вариант procedure TForm1.Button1Click(Sender: TObject); var PName: String; begin PName:=Trim(Edit1.Text); with Form1 do With Query1 do begin Close; SQL.Clear; SQL.Add('select id from baza where name='''+PName+''''); Open; Edit2.Text:=Query1.FieldValues['ID']; end; end; Все работает нормально. |
при отладке используйте обработчик try ... except, при возникновении исключения смотрите on E:Exception строку E.Message , в ней и будет искомая причина.
|
Все. Сделал я эту "прогу"..
По крайней мере работает и делает то что нужно.. Но реализовал я все там не самым лучшим образом :))) МОжно было бы сделать код намного более компактным. Ну да и ладно.. Главное сдал ;) :biggrin: :yees: |
Народ!
У меня тоже проблем с БД. У меня есть 4 поля. Username, Password, Время присоединения и время отсоединения. Во 'Время присоединения' время записывается вот так: procedure TForm4.FormActivate(Sender: TObject); var DateTime : TDateTime; str : string; begin DateTime := Time; str := TimeToStr(DateTime); Label2.Caption:=str; Form1.Table1.Edit; Form1.Table1Время присоединения.Value:=Time; А 'время отсоединения' не хочет корректно записываться. Т.е. для любой первой записи всё работает корректно, но когда происходит второе или н-ное присоединение,то 'время отсоединения' записывается в первое поле (первого присоединения). Никак не пойму в чём дело. Как понимаю - курсор стоит только на первом поле.Помогите плиз. procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.Table1.Edit; Form1.Table1времяотсоединения.Value:=Time; Form1.Table1.Post; end; |
Yurij
Ну так надо не Edit, а Append делать для добавления записи. |
ЕЖ, если в этих процедурах я заменяю Edit на append, то прога ломается с ошибкой:*.exe raised exception class EDBEEngineError with message 'key violation' :idontnow:
|
А в таблице кроме твоих четырех полей нету какого-нибудь обязательного ключевого поля? Может ты его просто не заполняешь?
|
ЕЖ, не не все поля заполнены. Единственное на Username стоит KEy, но этот никак влиять не должно. Если
Form1.Table1Времяприсоединения.Value:=Time; и Form1.Table1времяотсоединения.Value:=Time; написать в одной процедуре, то вся информация идёт в назначенные поля(делал для отладки). |
Я не пойму, тебе надо при каждом новом соединении добавлять новую запись с временем начала и конца? Или ты при каждом новом соединении хочешь фиксировать эту информацию в одной и той же записи?
И еще - ты говоришь что Username у тебя ключевое поле - оно у тебя первичный ключ или внешний? Кстати, какая БД? |
Вложений: 1
ЕЖ,у меня зарегено несколько аля пользователей и мне надо при каждом новом соединении добавлять новую запись с временем начала и конца сессии этого юзера. К примеру у меня юзера: 1,2,3 и соответственные пароли. Как заходит 1,2,3 - то в поле Время Начало записывается соответственная запись. А в поле ...конец - информация заносится только последнего сеанса в первое поле.
На скрине третье поле-время присоединения, на четвёртом - проблемное поле со времен отсоединения. БД Paradox, если честно какой ключ стоит не знаю - в database Desktop я его убрал - ноль на массу ;( |
Ещё работая заметил такую оплошность:
У меня стоит AutoRefresh - True, чтобы показывались обновлённые данные БД. Всё бы ничего, но только при запуске программы - DbGRID показывает пустую БД. Все данные будут показаны только после первой авторизации через форму login/pass/. Есть соображения в чём дело? P.S. сорри, этот глюк исправил |
| Часовой пояс GMT +4, время: 14:28. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.