19.02.2017, 07:58
|
Прохожий
|
|
Регистрация: 18.02.2017
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
|
|
Цитата:
Сообщение от lmikle
По внешним признакам скорее всего где-то падает обработчик события на визуальных компонентах, привязанных к этой IBTable3. Т.е. проблема не в компоненте доступа к данным, а где-то в визуальной части.
Для решения, например, можно временно "отключать" DataSource, делать вставку, потом обратно "подключать" (там есть методы DisableControls и EnableControls). Кстати, при подключенных визуальных компонентах это еще и работы убыстрит, т.к. не будет обновлять отображение.
|
Спасибо за ответ. Я сделала так:
Код:
Form1.DBGrid1.DataSource.DataSet.DisableControls; //попытка исправить Access Violation
//запись в таблицу ITER
i := 1;
itcount := RandomRange(1, 100);
for i := 1 to itcount-1 do
BEGIN
DM.IBTable3.Append; //БЫЛА ОШИБКА "cannot focus a disabled or invisible window"
DM.IBTable3.FieldByName('IT_ID').AsInteger := 0; //ACCESS VIOLATION ... формируется в базе триггером
DM.IBTable3.FieldByName('CALCNUM').AsInteger := CALCNUM; //для какого расчета..
DM.IBTable3.FieldByName('ITERNUM').AsInteger := 0; //ФОРМИРУЕТСЯ СЕЙЧАС В БАЗЕ триггером. но возможно придется ставить здесь
DM.IBTable3.FieldByName('X1K').AsFloat := i; //координата X
DM.IBTable3.FieldByName('X2K').AsFloat := RandomRange(1, 50) ; //координата Y
DM.IBTable3.FieldByName('FK').AsFloat := RandomRange(0, 50);
DM.IBTable3.POST;
END;
DM.IBTable3.Refresh;
Form1.DBGrid1.DataSource.DataSet.EnableControls; //попытка исправить Access Violation
НО все осталось прежним
|