DBComboBox при вставке нового значения, не отображает данные

Konstantin-78
Дата: 12.07.2019 01:33:04
Доброе время суток форумчане,
Какой-то глюк произошел, в одной программе работает, в другой – нет.

В IBDataSet.AfterInsert заполняю DBComboBox

ExecQuery(C_sel_full_ComboBoxEquipment, 0, Select_rec, nil);//заполнение IBQuery (DM.ibqEmpty)
                FMain.dbcbNameTest.Clear;
                DM.ibqEmpty.First;
                while not DM.ibqEmpty.Eof do
                begin
                   if DM.ibqEmpty.FieldByName('FILED_NAME').AsString = 'NAME_TEST' then
                    FMain.dbcbNameTest.Items.Add(DM.ibqEmpty.FieldByName('PRODUCER').AsString);
                 DM.ibqEmpty.Next;
                end;


все нормально.
Но при вставке нового значения в DBComboBox, оно в нем перестает отображаться, хотя в БД это значение есть и DBGrid его отображает.
При нажатии Refresh на навигаторе, также это значение появляется в DBComboBox, но при переходе с записи на запись, оно опять пропадает только из DBComboBox.
Конечно если закоментировать, заполнение элементов DBComboBox, все нормально отрабатыват.

Где может быть ошибка?
Заранее спасибо за ответ.
Kast2K
Дата: 12.07.2019 07:49:17
Konstantin-78,

Может вместо DBCombobox вам лучше TCombobox использовать судя по данной записи?
FMain.dbcbNameTest.Items.Add(DM.ibqEmpty.FieldByName('PRODUCER').AsString);
Konstantin-78
Дата: 12.07.2019 10:04:19
Kast2K,

Не хотелось бы использовать TCombobox, т.к. всетаки привязка к полю в БД

запрос:
C_sel_full_ComboBoxEquipment = 'select distinct PRODUCER, trim(''PRODUCER'') FILED_NAME from EQUIPMENT where PRODUCER <> ''null'' '
                                 +' union all select distinct NAME_TEST, ''NAME_TEST'' from EQUIPMENT where NAME_TEST<>''null'' '
                                 +' union all select distinct YEAR_BEGIN, ''YEAR_BEGIN'' from EQUIPMENT where YEAR_BEGIN is not null ';

да небольшая поправка, тогда:


ExecQuery(C_sel_full_ComboBoxEquipment, 0, Select_rec, nil);
                FMain.dbcbCountryCL.Clear;
                FMain.dbcbNameTest.Clear;
                FMain.dbcbYearBegin.Clear;
                DM.ibqEmpty.First;
                while not DM.ibqEmpty.Eof do
                begin
                  if DM.ibqEmpty.FieldByName('FILED_NAME').AsString = 'PRODUCER' then
                    FMain.dbcbCountryCreate.Items.Add(DM.ibqEmpty.FieldByName('PRODUCER').AsString);


                  if DM.ibqEmpty.FieldByName('FILED_NAME').AsString = 'NAME_TEST' then
                    FMain.dbcbNameTest.Items.Add(DM.ibqEmpty.FieldByName('PRODUCER').AsString);


                  if DM.ibqEmpty.FieldByName('FILED_NAME').AsString = 'YEAR_BEGIN' then
                    FMain.dbcbYearBegin.Items.Add(DM.ibqEmpty.FieldByName('PRODUCER').AsString);

                  DM.ibqEmpty.Next;
                end;


я заполняю 3 DBComboBox
_Vasilisk_
Дата: 12.07.2019 16:25:31
Konstantin-78,

Разные транзакции?
Konstantin-78
Дата: 12.07.2019 22:10:25
_Vasilisk_,
не а, одна
Konstantin-78
Дата: 13.07.2019 01:17:15
без переоткрытия dataset, все работает, просто в "dataset.AfterPost", делать CommitRetaining транзакции.
Во...

А если нужно с переоткрыванием:
тогда в "dataset.AfterPost", и CommitRetaining с последующим переоткрытием, в список DBCombobox добавлять текущее значение значение. и тогда в нем будет отображение.
Konstantin-78
Дата: 13.07.2019 01:25:28
Да и после этого незабыть Refresh записи сделать