Найдено 10 результатов

Jane
Ср 23 янв 2019 14:00
Форум: MySQL Data Access Components
Тема: AV failure in the Refresh method in RAD Studio 10.2
Ответы: 4
Просмотры: 12028

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

ViktorV - отправлено!
Jane
Ср 23 янв 2019 07:07
Форум: MySQL Data Access Components
Тема: AV failure in the Refresh method in RAD Studio 10.2
Ответы: 4
Просмотры: 12028

AV failure in the Refresh method in RAD Studio 10.2

Здравствуйте! Обновили сервер 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 та же проблема?
Можно это пофиксить?
Jane
Вт 01 дек 2015 06:43
Форум: MySQL Data Access Components
Тема: Вопрос по SQLRefresh
Ответы: 1
Просмотры: 11288

Вопрос по SQLRefresh

Здравствуйте,
для выборки данных из двух таблиц и отображения на DBGrid используется такой запрос:

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

  MyQuery.SQL.Text := 'SELECT t1.id case_id,status,t2.account,t2.name '+
                      'FROM cases t1, contragents t2 '+
                      'WHERE (NOT t1.deleted) AND (t2.id=t1.contragent_id)';
После редактирования какой-либо записи (на отдельной форме) необходимо обновить данные выборки, а конкретно - текущую отредактированную запись, для чего используется MyQuery.RefreshRecord с таким свойством:

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

  MyQuery.SQLRefresh.Text := 'SELECT t1.id case_id,status,t2.account,t2.name '+
                             'FROM cases t1, contragents t2 '+
                             'WHERE (t1.id=:t1.id) AND (t2.id=t1.contragent_id)';
После выполнения MyQuery.RefreshRecord имеем такую ошибку:
Not found field corresponding parameter t1.
Из справки к MyDAC:
To create a SQLRefresh statement at design-time, use the query statements editor.

Example
SELECT Shipname FROM Orders
WHERE
OrderID = :OrderID
И это работает когда в запросе 1 таблица. Но как быть, если в запросе используется две таблицы с одинаковыми полями 'id'?
Как правильно записать часть 'WHERE t1.id=:t1.id' из MyQuery.SQLRefresh.Text, чтобы не было ошибки?
Jane
Чт 21 май 2015 06:01
Форум: MySQL Data Access Components
Тема: Искаженное сообщение об ошибке 10061
Ответы: 5
Просмотры: 16437

Re: Искаженное сообщение об ошибке 10061

У меня TMyConnection.UseUnicode:=True, но кракозябры все равно в тексте ошибки!
Почему молчит ТП?
Jane
Ср 20 май 2015 12:48
Форум: MySQL Data Access Components
Тема: Искаженное сообщение об ошибке 10061
Ответы: 5
Просмотры: 16437

Re: Искаженное сообщение об ошибке 10061

То же самое на версии 8.5.12!
Jane
Вт 30 дек 2014 17:30
Форум: MySQL Data Access Components
Тема: Метаданные о таблице
Ответы: 3
Просмотры: 4292

Re: Метаданные о таблице

Ок, а если не использовать TMyMetaData, как еще можно получить искомое с помощью MyDAC?
Jane
Вт 30 дек 2014 14:53
Форум: MySQL Data Access Components
Тема: Метаданные о таблице
Ответы: 3
Просмотры: 4292

Метаданные о таблице

Здравствуйте! Использую компонент TMyMetaData, чтобы получить необходимую информацию о структуре таблицы, см. скриншот ниже (на картинке данные, полученные MyMetaData выше, а ниже данные из стороннего DB manager для сравнения). Но с его помощью не смог получить некоторые метаданные, потому несколько вопросов:
1) как узнать, где PRIMARY KEY?
2) почему для некоторых типов полей поле 'DATA_LENGTH' пустое? К примеру, как узнать, что tinyint(1), а не (2)?
3) как узнать UNSIGNED?
4) как узнать UNIQUE?
5) как узнать AUTO_INCREMENT?
6) как узнать VALUE для типов ENUM, SET?
Jane
Пн 06 окт 2014 08:59
Форум: MySQL Data Access Components
Тема: TMyDump: баг или что я делаю не так?
Ответы: 3
Просмотры: 4501

Re: TMyDump: баг или что я делаю не так?

GRANT SELECT ON MySQL.Proc to vad@192.168.1.22;
Да, так заработало, спасибо!
Но остается вопрос, почему другим программам администрирования (а я их перепробовал 4 штуки) не требовались права доступа к таблице MySQL.Proc, а TMyDump они нужны?
Jane
Пн 06 окт 2014 06:11
Форум: MySQL Data Access Components
Тема: TMyDump: баг или что я делаю не так?
Ответы: 3
Просмотры: 4501

TMyDump: баг или что я делаю не так?

Здравствуйте!
Работа компонента MyDump.BackupToFile(FileName) с Options = [doTables,doData,doViews,doTriggers] проходит как следует. Однако, стоит добавить в БД хранимую процедуру и добавить в Options [doStoredProcs], как при выполнении BackupToFile появляется ошибка:

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

#42000SELECT command denied to user 'vad'@'192.168.1.22' for table 'proc'
Права на БД следующие:
Изображение

В то же время "dbForge Studio for MySQL" и "MySQL-Front" без проблем делают дамп этой БД вместе с хранимой процедурой.

Подскажите, это баг? Или как правильно использовать TMyDump?
Jane
Пт 12 сен 2014 06:20
Форум: MySQL Data Access Components
Тема: Как отследить изменение поля в таблице БД?
Ответы: 1
Просмотры: 3848

Как отследить изменение поля в таблице БД?

Добрый день!
Дано: многопользовательское приложение на Delphi + MyDAC; в БД есть таблица "data", в которой есть поле "price". В приложение есть DBGrid, который отображает набор данных MyQuery по запросу "SELECT * FROM data" (упрощенно, для примера). Также, в приложении есть кнопка Refresh, по которой происходит обновление набора данных MyQuery с сервера.
Стоит задача определить те записи, значение поля "price" которых изменилось с момента последнего обновления.
Есть какие-либо средства в MyDAC, позволяющие это сделать? Или это нужно/можно реализовать только посредством MySQL?
Буду признателен за любую помощь или совет в решение моей задачи!