Цитата:
Сообщение от Alegun
Добавление записей в таблицу у вас происходит штатно, а с Disable/EnableControls вообще прям по всем канонам выполняется код - вывод: в поздней версии проекта есть что-то ещё, здесь не показанное, и к приведённому блоку имеющее прямое отношение, вопрос: что творите ещё в момент выполнения Append
|
Больше ничегошеньки не делается c Append.
В целом есть класс, через объект которого вызывается процедура:
Код:
Temp.Method(k1,k2, k3, k4, alpha, betha, X1, X2, dX, E, calcnum, CType);
Эта процедура есть просто "заглушка", которая заполняет БД через IBTable:
Код:
procedure TOptimization.Method(k1: integer; k2: integer; k3: integer; k4: integer; alpha: real; betha: real; X1: real; X2: real; dX: real; E: real;
calcnum: Integer; CType: integer);
var itcount, i : integer;
BEGIN
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
END;