AV failure in the Refresh method in RAD Studio 10.2

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Ответить
Jane
Сообщения: 10
Зарегистрирован: Пт 12 сен 2014 05:57

AV failure in the Refresh method in RAD Studio 10.2

Сообщение Jane » Ср 23 янв 2019 07:07

Здравствуйте! Обновили сервер MySQL c версии 5.7.18.1 на 8.0.13, затем обновили компонент MyDAC c версии 9.2.7 на последнюю 9.3.9. В итоге, ранее работающий код:

Код: Выделить всё

        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 при выполнении myqryRef.Refresh:
---------------------------
Debugger Exception Notification
---------------------------
Project Debtors.exe raised exception class $C0000005 with message 'access violation at 0x00862ef2: read of address 0x043a044e'.
---------------------------
Если в режиме отладки при возникновении сообщения об AV нажать Break, то оказываемся в модуле MemUtils в

Код: Выделить всё

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;
на строке while (pwc^ <> #0) and (pwc < PWideChar(Source) + MaxLen) do begin.
Сам коммит проходит и изменения записываются в БД. И даже в гриде (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';
Window 7 SP1 x64, Delphi 10.2.3, всё лицензионное.

В revision_history 9.3.9 написано "Bug with AV failure in the Refresh method in RAD Studio 10.2 Tokyo on Linux is fixed" - пофиксили в Линуксе, может и в Windows та же проблема?
Можно это пофиксить?

ViktorV
Devart Team
Сообщения: 199
Зарегистрирован: Чт 31 июл 2014 09:52

Re: AV failure in the Refresh method in RAD Studio 10.2

Сообщение ViktorV » Ср 23 янв 2019 11:32

Чтобы дать вам быстрый и полный ответ на ваш вопрос, пожалуйста, составьте и вышлите нам, с помощью контактной формы https://www.devart.com/company/contactform.html, полный пример, демонстрирующий указанное вами поведение, включающий скрипты для создания и заполнения объектов БД. Также укажите точную версию MySQl которую вы используете.

Jane
Сообщения: 10
Зарегистрирован: Пт 12 сен 2014 05:57

Re: AV failure in the Refresh method in RAD Studio 10.2

Сообщение Jane » Ср 23 янв 2019 14:00

ViktorV - отправлено!

ViktorV
Devart Team
Сообщения: 199
Зарегистрирован: Чт 31 июл 2014 09:52

Re: AV failure in the Refresh method in RAD Studio 10.2

Сообщение ViktorV » Чт 24 янв 2019 13:00

Спасибо за информацию. Мы исследуем данное поведение MyDAC и сообщим Вам результат.

ViktorV
Devart Team
Сообщения: 199
Зарегистрирован: Чт 31 июл 2014 09:52

Re: AV failure in the Refresh method in RAD Studio 10.2

Сообщение ViktorV » Вт 12 фев 2019 09:59

Мы исправили указанную ошибку. Данное исправление войдет в следующий релиз MyDAC.

Ответить