| imho.ws |
![]() |
|
|
|
# 1 |
|
Junior Member
Регистрация: 27.01.2005
Адрес: Пенза-City
Сообщения: 68
![]() |
БД и Delphi
Люди знающие подскажите!
Опыта работы с БД - вапще никакого.. (((( Ситуация такая: Есть три таблицы: 1) Комплектующие(kompl.db) - ID, Тип(число), ПРоизводитель(число), Модель(строка), Цена($) 2) Тип комплектующей(types.db) - ID, Название (Процессор, Мать, винт и т.д.) 3) ПРоизводитель(manuf.db) - ID, Название (ASUS, MSI и т.д.) На форме в TreeView я выбираю типа комплектующей (Проц, мать и пр.) Далее должен делаться запрос к базе данных, чтоб он по ТИПУ комплектующей (проц и пр.) взял её ID из базы. Этот ID присваевается переменной: Код:
Procedure TypeSel2;
BEGIN
With Form1 do
With Query4 do
begin
Close;
SQL.Clear;
SQl.Add('SELECT id FROM types.db WHERE KName='+ktype);
Open;
DevID:=Query4.FieldValues['id'];
end;
END;
Код:
With Query1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT mname FROM manuf.db WHERE id IN'+
'(SELECT DISTINCT manuf FROM kompl.db WHERE type='+IntToStr(DevID)+')');
Open;
end;
While not Query1.EOF do
begin
// DBComboBox1.Items.Add(Query1.FieldByName('mname').AsString);
ComboBox1.Items.Add(Query1.FieldByName('mname').AsString);
Query1.Next;
end;
end;
После этого я должен выбрать в этом списке желаемого производителя.. Наприм это будет ASUS Я его выбираю. То что я выбрал присваивается переменной mnf. Делается запрос к БД и выбираются уже модели комплектующих этого производителя (этот кусок проги я еще не написал..) И после того как я выбиру модель, он мне должен выдать цену в Edit. ПОтом я выбираю несколько устройств, добавляя каждое из них в таблицу. И у меня по идее должно подсчитываться стоимость компа... вот.. Я решил не использовать компоненты DBCOmboBox, т.к. после выбора в нем чеголибо и щелчке вне его, то что выбрано - исчезает.. у меня лично так. Вопщем я повис вот тут: Код:
Procedure TypeSel2;
BEGIN
With Form1 do
With Query4 do
begin
Close;
SQL.Clear;
SQl.Add('SELECT id FROM types.db WHERE KName='+ktype);
Open;
DevID:=Query4.FieldValues['id'];
end;
END;
|
|
|
|
|
# 2 |
|
Newbie
Регистрация: 04.08.2005
Адрес: Дзержинск
Сообщения: 27
![]() |
Просто не присваивается или ошибку какую-то выдает ?
К сожалению не работаю с базами 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; Все работает нормально. |
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 27.01.2005
Адрес: Пенза-City
Сообщения: 68
![]() |
Все. Сделал я эту "прогу"..
По крайней мере работает и делает то что нужно.. Но реализовал я все там не самым лучшим образом ))МОжно было бы сделать код намного более компактным. Ну да и ладно.. Главное сдал ![]() |
|
|
|
|
# 5 |
|
Member
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329
![]() ![]() ![]() ![]() ![]() ![]() |
Народ!
У меня тоже проблем с БД. У меня есть 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; |
|
|
|
|
# 9 |
|
Member
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329
![]() ![]() ![]() ![]() ![]() ![]() |
ЕЖ, не не все поля заполнены. Единственное на Username стоит KEy, но этот никак влиять не должно. Если
Form1.Table1Времяприсоединения.Value:=Time; и Form1.Table1времяотсоединения.Value:=Time; написать в одной процедуре, то вся информация идёт в назначенные поля(делал для отладки). |
|
|
|
|
# 10 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Я не пойму, тебе надо при каждом новом соединении добавлять новую запись с временем начала и конца? Или ты при каждом новом соединении хочешь фиксировать эту информацию в одной и той же записи?
И еще - ты говоришь что Username у тебя ключевое поле - оно у тебя первичный ключ или внешний? Кстати, какая БД? |
|
|
|
|
# 11 |
|
Member
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329
![]() ![]() ![]() ![]() ![]() ![]() |
ЕЖ,у меня зарегено несколько аля пользователей и мне надо при каждом новом соединении добавлять новую запись с временем начала и конца сессии этого юзера. К примеру у меня юзера: 1,2,3 и соответственные пароли. Как заходит 1,2,3 - то в поле Время Начало записывается соответственная запись. А в поле ...конец - информация заносится только последнего сеанса в первое поле.
На скрине третье поле-время присоединения, на четвёртом - проблемное поле со времен отсоединения. БД Paradox, если честно какой ключ стоит не знаю - в database Desktop я его убрал - ноль на массу ;( Последний раз редактировалось Yurij; 07.10.2006 в 10:59. |
|
|
|
|
# 12 |
|
Member
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329
![]() ![]() ![]() ![]() ![]() ![]() |
Ещё работая заметил такую оплошность:
У меня стоит AutoRefresh - True, чтобы показывались обновлённые данные БД. Всё бы ничего, но только при запуске программы - DbGRID показывает пустую БД. Все данные будут показаны только после первой авторизации через форму login/pass/. Есть соображения в чём дело? P.S. сорри, этот глюк исправил Последний раз редактировалось Yurij; 08.10.2006 в 20:58. |
|
|