Topic: Данные в combobox из запроса

Добрый вечер!
Обновил программу до версии 6.4 и проявилась проблема с комбобоксом.
procedure frmScore_ComboBox1_OnDropDown (Sender: TObject);
begin
    frmScore.ComboBox1.dbSQLExecute('SELECT DISTINCT name FROM Specification WHERE id_Dogovor='+frmScore.dogovor.sqlValue)
end;
При выборе записи согласно процедуре, запись в комбо показывается и исчезает.
Не могу понять почему она не фиксируется, в версии 6.2 все работало
Заранее спасибо.

2 (edited by builov.maikl 2021-02-22 17:13:23)

Re: Данные в combobox из запроса

glkonst79 wrote:

Добрый вечер!
Обновил программу до версии 6.4 и проявилась проблема с комбобоксом.
procedure frmScore_ComboBox1_OnDropDown (Sender: TObject);
begin
    frmScore.ComboBox1.dbSQLExecute('SELECT DISTINCT name FROM Specification WHERE id_Dogovor='+frmScore.dogovor.sqlValue)
end;
При выборе записи согласно процедуре, запись в комбо показывается и исчезает.
Не могу понять почему она не фиксируется, в версии 6.2 все работало
Заранее спасибо.

мне кажется у Вас не совсем корректно написано, попробуйте

..................WHERE Dogovor.id='+frmScore.dogovor.sqlValue

Но в целом поддерживаю, сегодня столкнулся с похожей проблемой - невозможно выбрать запись в комбо боксе.
В таблице Dogovor несколько внешних ссылок на DictPloshadki. (Dogovor.DictPloshadki,  Dogovor.DictPloshadki1, Dogovor.DictPloshadki2 и т.д. до 9 сделано потому что площадки в разных договорах повторяются.)
запрос вида:

procedure frmWork_CB_Dogovor_OnCloseUp (Sender: TObject);
begin
  frmWork.CB_Ploshadka.dbSQLExecute('SELECT Ploshadki from DictPloshadki left Join Dogovor on DictPloshadki.id = Dogovor.id_DictPloshadki or DictPloshadki.id = Dogovor.id_DictPloshadki1 WHERE dogovor.id = ' + FrmWork.CB_Dogovor.sqlValue);

end;

Работает как надо, при выборе договора в CB_Dogovor выпадающий список CB_Ploshadka заполняется корректно, но при выборе значения в CB_Ploshadka бокс закрывается и остаётся пустым!

Re: Данные в combobox из запроса

почитав форум наткнулся на пост где было предложено включить id (в моём случае DictPloshadki.id) для идентификации записи... и всё заработало.

procedure frmWork_CB_Dogovor_OnCloseUp (Sender: TObject);
begin
  frmWork.CB_Ploshadka.dbSQLExecute('SELECT Ploshadki, DictPloshadki.id from DictPloshadki left Join Dogovor on DictPloshadki.id = Dogovor.id_DictPloshadki or DictPloshadki.id = Dogovor.id_DictPloshadki1 or DictPloshadki.id = Dogovor.id_DictPloshadki2 or DictPloshadki.id = Dogovor.id_DictPloshadki3 or DictPloshadki.id = Dogovor.id_DictPloshadki4 or DictPloshadki.id = Dogovor.id_DictPloshadki5 or DictPloshadki.id = Dogovor.id_DictPloshadki6 or DictPloshadki.id = Dogovor.id_DictPloshadki7 or DictPloshadki.id = Dogovor.id_DictPloshadki8 or DictPloshadki.id = Dogovor.id_DictPloshadki9 WHERE dogovor.id = ' + FrmWork.CB_Dogovor.sqlValue);
  frmWork.CB_Ploshadka.dbUpdate;
end;

возможно Вам поможет...