Показать сообщение отдельно
  #11  
Старый 19.02.2017, 19:47
Rimma Zlotnikov Rimma Zlotnikov вне форума
Прохожий
 
Регистрация: 18.02.2017
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

ввела блок TRY ручками и ошибки не стало. Но сам блок ничего не дал:
Код:
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 := 1;   //êîîðäèíàòà X
        DM.IBTable3.FieldByName('X2K').AsFloat  := 1; //RandomRange(1, 50) ;     //êîîðäèíàòà Y
        DM.IBTable3.FieldByName('FK').AsFloat  := 1; //RandomRange(0, 50);
        //DM.IBTable3.POST;
        try
          DM.IBTable3.POST;
        except
          on e: EdataBaseError do MessageDlg(e.Message, mtError, [mbOK], 0);
        end;
  END;
  DM.IBTable3.Refresh;
  Form1.DBGrid1.DataSource.DataSet.EnableControls;  //ïîïûòêà èñïðàâèòü Access Violation
  //äîçàïîëíåíèå ïîëåé â òàáëèöå CALC - step, criterion, x1optim, x2optim, foptim
  with DM.IBQuery2 do
  BEGIN
      Close;
      SQL.Clear;
      SQL.Add('update calc set step = :step, criterion = :criterion,');
      SQL.Add(' x1optim = :x1optim, x2optim = :x2optim, foptim = :foptim ');
      SQL.Add('where calcnum = :calcnum');
      Params.ParamByName('calcnum').Value := CALCNUM;
      Params.ParamByName('step').Value := (itcount/2.0) -1;
      Params.ParamByName('criterion').Value := 1.8;
      Params.ParamByName('x1optim').Value := 21;  //áðàòü ïîñëåäíþþ èòåðàöèþ èç áàçû..
      Params.ParamByName('x2optim').Value := 21;      //áðàòü ïîñëåäíþþ èòåðàöèþ èç áàçû..
      Params.ParamByName('foptim').Value := 0.11 ;  //áðàòü ïîñëåäíþþ èòåðàöèþ èç áàçû..
      //ExecSQL;
      try
        ExecSQL;
      except
        on e: EdataBaseError do MessageDlg(e.Message, mtError, [mbOK], 0);
      end;
  END;
  DM.IBTable1.Refresh;
END;
Ответить с цитированием