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

LabutinPA
Ср 25 май 2016 05:22
Форум: Universal Data Access Components
Тема: MySql: битый текст исключения при отсутствии соединения
Ответы: 1
Просмотры: 2875

MySql: битый текст исключения при отсутствии соединения

При потере соединения MySQL выбрасывается исключение с крякозябрами - результатом ошибочного преобразования системного Unicode-текста ошибки из UTF-8.
Для воспроизведения нужно:
UniConnection.SpecificOptions.Values['UseUnicode'] := 'True';
UniConnection.SpecificOptions.Values['Direct'] := 'True';
Соединение разрывать не обязательно, можно сэмулировать ошибку исправлением TCRVioTcp.ReadNoWait - закомментировать проверку результата и указать код ошибки, например, 10060:

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

  function InernalReceive(Loop: integer): integer;
  begin
    Result := recv(FSd, buffer[offset], count, 0);
//    if Result = SOCKET_ERROR then begin
//    {$IFDEF UNIX}
//      if (GetSocketError = ESysEINTR) and (Loop > 0) then begin
//        sleep(50);
//        Result := InernalReceive(Loop - 1);
//      end
//      else
//    {$ENDIF}
      begin
//        FLastErrorCode := GetSocketError;
        FLastErrorCode := 10060;
        FLastError := Format(SErrorOnDataReading, [SysErrorMessage(FLastErrorCode), FLastErrorCode, FLastErrorCode]);
        Result := 0; // silent error handling
      end;
//    end;
  end;
В результате будет получена строка ошибки, которая в конце концов передается в метод TMySQLConnection.MySQLError, где и происходит ошибочное преобразование из UTF8

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

if FUseUnicode then
    Msg := string(CRFunctions.UTF8Decode(MsgBuf))
, но этого не нужно, т.к. текст ошибки был получен с помощью метода SysErrorMessage.
LabutinPA
Ср 27 апр 2016 23:36
Форум: Universal Data Access Components
Тема: Assertion failure при Execute Procedure в MySQL
Ответы: 1
Просмотры: 2698

Assertion failure при Execute Procedure в MySQL

UniDAC 6.3.11
При попытке выполнить хранимую процедуру MySQL возникает
Assertion failure MyClassesUni.pas, line 2884
Причина - у текущего пользователя нет прав на просмотр тела процедуры с помощью 'show create procedure'. Из документации к MySQL:
"To use either statement, you must be the user named in the routine DEFINER clause or have SELECT access to the mysql.proc table. If you do not have privileges for the routine itself, the value displayed for the Create Procedure or Create Function field will be NULL."
Соответственно, в методе GetCreateSQL при выполнении 'show create procedure' в колонке 'create procedure' возвращается null, а так как данный случай не был предусмотрен, выполнение валится на assert().
Также получение тела SP для приведения параметров - это накладные расходы. В случае с физически удаленным сервером это увеличивает время выполнения SP в два раза.
Я не нашел документированного способа отключить проверку параметров SP или функции.
Уважаемые разработчики, могли бы вы сделать эту "фичу" опциональной?
LabutinPA
Чт 03 сен 2015 00:54
Форум: SQLite Data Access Components
Тема: нативная поддержка 3.8.11
Ответы: 1
Просмотры: 10157

нативная поддержка 3.8.11

Здравствуйте!
Когда планируете релиз компонент с нативной поддержкой SQLite 3.8.11.x?