Код: Выделить всё
DM.MyConnection.StartTransaction;
try
with DM.MyCommand do
begin
Params.Clear;
SQL.Text := 'UPDATE contragents_ SET name=:to WHERE id=:id';
ParamByName('to').AsString := Trim(lbledtToText.Text);
Prepare;
for i := 0 to High(ArrID) do begin // ArrID: array of integer;
ParamByName('id').AsInteger := ArrID[i]; // id
Execute;
end;
UnPrepare;
end;
DM.MyConnection.Commit;
except
on E: Exception do
begin
DM.MyConnection.Rollback;
Application.MessageBox(PChar('Ошибка записи!'+#13+'Exception class name = '+E.ClassName+#13+'Exception message = '+E.Message),
DLG_ERROR, MB_OK + MB_ICONERROR);
end;
end;
myqryRef.Refresh;
Если в режиме отладки при возникновении сообщения об AV нажать Break, то оказываемся в модуле MemUtils в---------------------------
Debugger Exception Notification
---------------------------
Project Debtors.exe raised exception class $C0000005 with message 'access violation at 0x00862ef2: read of address 0x043a044e'.
---------------------------
Код: Выделить всё
procedure StrLCopyW(Dest: PWChar; const Source: PWChar; MaxLen{WideChars}: Integer);
var
pwc: PWideChar;
begin
pwc := Source;
while (pwc^ <> #0) and (pwc < PWideChar(Source) + MaxLen) do begin
PWideChar(Dest)^ := pwc^;
Inc(PWideChar(Dest));
Inc(pwc);
end;
PWideChar(Dest)^ := #0;
end;
Сам коммит проходит и изменения записываются в БД. И даже в гриде (DBGridEh) рефреш отражает изменения, несмотря на ошибку.
DM.MyCommand и myqryRef имеют одно и то же свойство Connection.
Код: Выделить всё
myqryRef.SQL.Text := 'SELECT id,deleted,account,name_short,fio_head,address_obj,inn FROM contragents_';
myqryRef.SQLRefresh.Text := 'SELECT id,account,name_short,fio_head,address_obj,inn FROM contragents_ WHERE id=:id';
В revision_history 9.3.9 написано "Bug with AV failure in the Refresh method in RAD Studio 10.2 Tokyo on Linux is fixed" - пофиксили в Линуксе, может и в Windows та же проблема?
Можно это пофиксить?