imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 18.12.2005, 23:44     # 1
SteFF
Junior Member
 
Аватар для SteFF
 
Регистрация: 27.01.2005
Адрес: Пенза-City
Сообщения: 68

SteFF Путь к славе только начался
БД и 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;
После этого я делается еще один запрос к БД, в котором по этом ID из БД выбираются производители, которые собственно и производят такой типа комплектующих:
Код:
  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;
Т.е. заполняется ComboBox
После этого я должен выбрать в этом списке желаемого производителя..
Наприм это будет 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;
Не присваивается ей то значение (ID), которе у ktype(проц, мать и пр.) в таблице types.db
SteFF вне форума  
Старый 19.12.2005, 15:22     # 2
AZBuka
Newbie
 
Аватар для AZBuka
 
Регистрация: 04.08.2005
Адрес: Дзержинск
Сообщения: 27

AZBuka Путь к славе только начался
Просто не присваивается или ошибку какую-то выдает ?

К сожалению не работаю с базами 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;

Все работает нормально.
AZBuka вне форума  
Старый 17.01.2006, 11:36     # 3
qnx
Newbie
 
Регистрация: 30.09.2002
Сообщения: 9

qnx Путь к славе только начался
при отладке используйте обработчик try ... except, при возникновении исключения смотрите on E:Exception строку E.Message , в ней и будет искомая причина.
__________________
_alex
qnx вне форума  
Старый 17.01.2006, 11:40     # 4
SteFF
Junior Member
 
Аватар для SteFF
 
Регистрация: 27.01.2005
Адрес: Пенза-City
Сообщения: 68

SteFF Путь к славе только начался
Все. Сделал я эту "прогу"..
По крайней мере работает и делает то что нужно..
Но реализовал я все там не самым лучшим образом ))
МОжно было бы сделать код намного более компактным.
Ну да и ладно.. Главное сдал
SteFF вне форума  
Старый 06.10.2006, 21:40     # 5
Yurij
Member
 
Аватар для Yurij
 
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329

Yurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царстве
Народ!
У меня тоже проблем с БД.
У меня есть 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 вне форума  
Старый 06.10.2006, 21:44     # 6
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Yurij
Ну так надо не Edit, а Append делать для добавления записи.
ЕЖ вне форума  
Старый 06.10.2006, 21:49     # 7
Yurij
Member
 
Аватар для Yurij
 
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329

Yurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царстве
ЕЖ, если в этих процедурах я заменяю Edit на append, то прога ломается с ошибкой:*.exe raised exception class EDBEEngineError with message 'key violation'
Yurij вне форума  
Старый 06.10.2006, 21:56     # 8
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
А в таблице кроме твоих четырех полей нету какого-нибудь обязательного ключевого поля? Может ты его просто не заполняешь?
ЕЖ вне форума  
Старый 06.10.2006, 22:34     # 9
Yurij
Member
 
Аватар для Yurij
 
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329

Yurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царстве
ЕЖ, не не все поля заполнены. Единственное на Username стоит KEy, но этот никак влиять не должно. Если
Form1.Table1Времяприсоединения.Value:=Time;
и
Form1.Table1времяотсоединения.Value:=Time; написать в одной процедуре, то вся информация идёт в назначенные поля(делал для отладки).
Yurij вне форума  
Старый 06.10.2006, 22:43     # 10
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Я не пойму, тебе надо при каждом новом соединении добавлять новую запись с временем начала и конца? Или ты при каждом новом соединении хочешь фиксировать эту информацию в одной и той же записи?

И еще - ты говоришь что Username у тебя ключевое поле - оно у тебя первичный ключ или внешний? Кстати, какая БД?
ЕЖ вне форума  
Старый 07.10.2006, 10:56     # 11
Yurij
Member
 
Аватар для Yurij
 
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329

Yurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царстве
ЕЖ,у меня зарегено несколько аля пользователей и мне надо при каждом новом соединении добавлять новую запись с временем начала и конца сессии этого юзера. К примеру у меня юзера: 1,2,3 и соответственные пароли. Как заходит 1,2,3 - то в поле Время Начало записывается соответственная запись. А в поле ...конец - информация заносится только последнего сеанса в первое поле.
На скрине третье поле-время присоединения, на четвёртом - проблемное поле со времен отсоединения.
БД Paradox, если честно какой ключ стоит не знаю - в database Desktop я его убрал - ноль на массу ;(
Изображения
Тип файла: jpg 1.jpg (15.9 Кбайт, 6 просмотров - Кто скачивал? )

Последний раз редактировалось Yurij; 07.10.2006 в 10:59.
Yurij вне форума  
Старый 08.10.2006, 20:46     # 12
Yurij
Member
 
Аватар для Yurij
 
Регистрация: 30.05.2003
Адрес: Литва
Пол: Male
Сообщения: 329

Yurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царствеYurij Луч света в тёмном царстве
Ещё работая заметил такую оплошность:
У меня стоит AutoRefresh - True, чтобы показывались обновлённые данные БД. Всё бы ничего, но только при запуске программы - DbGRID показывает пустую БД. Все данные будут показаны только после первой авторизации через форму login/pass/. Есть соображения в чём дело?
P.S. сорри, этот глюк исправил

Последний раз редактировалось Yurij; 08.10.2006 в 20:58.
Yurij вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 14:29.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.