Конференция "Базы" » DBLookUpComboBox конфликт
 
  • well © (07.02.11 14:47) [0]
    Не буду приводить весь текст программы, но суть в следующем.
    Есть две таблицы. 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=какое то поле

    И тут при запуске программы выдаётся сообщение о переполнении стека.

    Что за конфликт? И как его обойти?
    Пожалуйста подскажите!
  • И. Павел © (07.02.11 15:20) [1]
    > Делаю обратобчик события 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 и т.д. пока не истратится весь стек.
  • И. Павел © (07.02.11 15:26) [2]
    > И как его обойти?


    Отключением этого события на время:

    DataSource1.OnDataChange = NULL;
    try
     Table1->Open;
    finally
     DataSource1.OnDataChange = TDataSource1DataChange;  //тут не помню, нужен ли "&" в C++Builder
    end;

  • well © (07.02.11 15:27) [3]
    А если я убираю BDLookUpComboBox почему он не тратится?
  • И. Павел © (07.02.11 15:33) [4]
    > А если я убираю 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;

  • Плохиш © (07.02.11 15:53) [5]

    > И как его обойти?

    Не сувать всякую дерьмообработку куда не попадя. Не преднозначено событие onDataChange для закрытий/открытий связанного набора данных.
  • well © (07.02.11 16:39) [6]
    Ладно, тут ты прав. Хотел попроще сделать, а получилось как всегда :)
 
Конференция "Базы" » DBLookUpComboBox конфликт
Есть новые Нет новых   [134431   +15][b:0][p:0.001]