![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBLookUpComboBox конфликт
well © (2011-02-07 14:47:00)Не буду приводить весь текст программы, но суть в следующем.
Есть две таблицы. Table1 и Table2. Вторая таблица связана с первой, скажем по полю ID_Table1.
Доступ к таблицам через TADOQuery,TDataSource.
1. Делаю обратобчик события OnDataChange первой таблицы
[code]TForm1::TDataSource1DataChange(TObject *Sender, TField *Field)
{
Table1->Close();
//
//Тут выполняются некоторые действия, которые не влияют на проблему
//
Table1->Open();
}[/code]
Обработка проходит успешно, ошибок нет.
2. Добавляю элемент BDLookUpComboBox
DataSource=DataSource2
DataField=ID_Table1
ListSource=DataSource1
KeyField=ID
ListField=какое то поле
И тут при запуске программы выдаётся сообщение о переполнении стека.
Что за конфликт? И как его обойти?
Пожалуйста подскажите!
well (2011-02-07 16:39:00) [1]Ладно, тут ты прав. Хотел попроще сделать, а получилось как всегда :)
Плохиш (2011-02-07 15:53:00) [2]
> И как его обойти?
Не сувать всякую дерьмообработку куда не попадя. Не преднозначено событие onDataChange для закрытий/открытий связанного набора данных.
И. Павел (2011-02-07 15:33:00) [3]> А если я убираю BDLookUpComboBox почему он не тратится?
Трассируйте и да узрите :)
У меня вот такой код (без DBLookUpComboBox) приводит (при нажатии на кнопку Button1) к зацикливанию:
procedure TMainForm.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Table1.Close;
Table1.Open;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
Table1.Open;
end;
well (2011-02-07 15:27:00) [4]А если я убираю BDLookUpComboBox почему он не тратится?
И. Павел (2011-02-07 15:26:00) [5]> И как его обойти?
Отключением этого события на время:
DataSource1.OnDataChange = NULL;
try
Table1->Open;
finally
DataSource1.OnDataChange = TDataSource1DataChange; //тут не помню, нужен ли "&" в C++Builder
end;
И. Павел (2011-02-07 15:20:00) [6]> Делаю обратобчик события OnDataChange первой таблицы
Occurs when the data in a record has changed, either due to field edits or moving the cursor to a new record.
Когда вы открываете таблицу (Table1->Open) то вызывается TDataSource1DataChange и т.д. пока не истратится весь стек.