powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEScript.dll + UTF8
6 сообщений из 6, страница 1 из 1
IBEScript.dll + UTF8
    #39847491
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В кодировке Вин1251 все давно и нормально работает, но на новом проекте решил взять все новое и современное ))
Итак: FB4 beta1, CharSet UTF8

сделал тестовый скриптик в UTF-8 с кривым SQL, вначале добавил "SET NAMES UTF8;" (но это роли не играет). Пытаюсь выполнить по примеру:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
class function TfmDBUpdate.DLLConnect(hLib: THandle): Boolean;
var pConn: TConnectDBProc;
    b: TStringBuilder;
begin
     Result := false;
     pConn := GetProcAddress(hLib, 'Connect');
     if Assigned(pConn) then
     begin
       b := TStringBuilder.Create;
       try
         b.Append('db_name="').Append(dmData.dbMain.DBName).Append('"').Append(';')
          .Append('user_name=').Append(dmData.dbMain.ConnectParams.UserName).Append(';')
          .Append('password=').Append(dmData.dbMain.ConnectParams.Password).Append(';')
          .Append('clientlib="').Append(dmData.dbMain.LibraryName).Append('"').Append(';')
          .Append('lc_ctype=').Append(dmData.dbMain.ConnectParams.CharSet).Append(';')
          .Append('sql_dialect=3');
         if pConn(PChar(b.ToString), nil) > 0 then
          Result := true;
       finally
         b.Free;
       end;
     end;
end;

function HandleError(AStmtText, AErrMessage : PChar) : integer; stdcall;
begin
     Result := 0;
     Inc(ErrCount);
     ShowAppMessage(AErrMessage, AStmtText, mtError);
end;

class function TfmDBUpdate.ExecScriptFile(const AFilename: string): Boolean;
var Hndl : THandle;
    ESP : TExecuteScriptProc;
begin
  Result := false;
  ErrCount := 0;
  StmtCount := 0;
  Hndl := LoadLibrary(PChar('IBEScript.dll'));
  try
    if (Hndl > HINSTANCE_ERROR) then
    begin
      if not DLLConnect(Hndl) then
       exit;
      ESP := GetProcAddress(Hndl, 'ExecScriptFile');
      if @ESP <> nil then
      begin
       ESP(PChar(AFilename), @HandleError, @BeforeExec, @AfterExec);
       if ErrCount = 0 then
        Result := true;
      end;
    end;
  finally
    DLLDisconnect(Hndl);
    if Hndl > HINSTANCE_ERROR then
      FreeLibrary(Hndl);
  end;



Проблема: в HandleError вылазит текст кракозябрами.
...
Рейтинг: 0 / 0
IBEScript.dll + UTF8
    #39847545
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скрипт простенький:
Код: sql
1.
2.
3.
4.
5.
SET NAMES UTF8;

insert into SYS$LOG (OBJECT_TYPE_ID, ACTION_ID, OBJECT_ID, INFO)
values (1, 1, 1, 'Загрузка скрипта UTF');
commit;
...
Рейтинг: 0 / 0
IBEScript.dll + UTF8
    #39847580
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvb,

а Эксперт причём здесь?
...
Рейтинг: 0 / 0
IBEScript.dll + UTF8
    #39847701
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

через IBExpert и IBEScript.exe все выполняется, через IBEScript.dll вот такая бяка. Судя по тому, что PAnsiChar заменен на PChar, либа умеет UTF, но где-чего докрутить не пойму..
...
Рейтинг: 0 / 0
IBEScript.dll + UTF8
    #39850116
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже не понял, при чем тут эксперт? Сообщение об ошибке в UTF8, перекодировка перед скармливанием его кому-ты-там-его-скармливаешь - полностью на твоей совести. Судя по скриншоту, ты скармливаешь его редактору, который UTF8 не умеет, а умеет UTF16. В интерфейсе IBEScript.dll PChar - это PAnsiChar.
...
Рейтинг: 0 / 0
IBEScript.dll + UTF8
    #39850650
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВ интерфейсе IBEScript.dll PChar - это PAnsiChar.
Вот этой гаечки и не хватало, сделал через UTF8ToString(PAnsiChar(AStmtText)) и все поехало. А вы говорите, при чем тут эксперт ))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / IBEScript.dll + UTF8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]