Показать сообщение отдельно
  #12  
Старый 16.10.2013, 07:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от lmikle
Для начала:
Код:
sql:= '"SELECT * FROM power WHERE [Модель] =' + Form1.DBLookupComboBox1.Text + '"';
Это действительно неверная конструкция. Правильно, синтаксически, будет как-то так:
Код:
sql:= 'SELECT * FROM power WHERE [Модель] =''' + Form1.DBLookupComboBox1.Text + '''';
Все кавычки одинарные.

Теперь надо выверять логику.
Скорее всего, из справочника выбирается 2 поля: Код и Модель. Модель показывается как текст, а внутри сидит еще и Код. Вот с кодом, скорее всего, и надо будет связывать вторую таблицу.

Кстати, если данные в этом списке не влияют ни на что, кроме фильтрации другого списка, то можно обойтись обычным ComboBox. Т.е. при открытии формы (или программы, если справочник в процессе ее работы не меняется, да и если меняется, то всегда можно работать через тот же запрос или просто его обновить) делаем так:
Код:
..
ADOQuery1 : TADOQuery; // Наш запрос на выборку справочника. Там внутри SELECT * FROM...
..
procedure TForm1.FormCreate(Sender : TObject);
begin
  ComboBox1.Items.Clear;
  ADOQuery1.First;
  While Not ADOQuery1.Eof Do
    Begin
       ComboBox1.Items.AddObject(ADOQuery1.FieldByName('Модель').AsString,TObject(ADOQuery1.FieldByName('Код').AsInteger));
       ADOQuery1.Next;
    End;
end;

Кстати, ComboBox1 надо сделать DropDownList (вроде так).
Теперь запрос на обновление другого списка будет собираться так:
Код:
sql:= 'SELECT * FROM power WHERE [Модель] =' + IntToStr(Integer(Form1.ComboBox1.Items.Object[ComboBox1.ItemIndex]));
ЗЫ. Вроде нигде со скобками не ошибся.
ЗЗЫ. Да, и в таблице Speaker надо вместо Модель сделать целочисленное поле КодМодели с связывать таблицы по нему. Читаем про нормальные формы в реляционных СУБД.