Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX под Linux / 25 сообщений из 38, страница 1 из 2
02.04.2021, 12:35
    #40059068
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Столкнулся с проблемой. Надо портировать прогу, работающую с FB, под Linux.

Компоненты IBX из XE2, немного допиленные в части совместимости. D10.3, ОС Debian 10, FB 3

Подключение проходит, но при выполнении любого запроса вылетает "EIBClientError: Unknown SQL Data type (0)". Протрейсив, понимаю, что ошибка кидается в TIBXSQLDA.Initialize, когда SqlDef неожиданный (0).
Код простейший

Код: 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.
// Загрузить клиентскую библиотеку Firebird
function LoadFBLib(const Path: string): Boolean;
const
  LibString = 'IBServer';
var
  iLib: IGDSLibrary;
  tmpLibString: String;
begin
  tmpLibString := LibString;
  iLib := GetGDSLibrary(tmpLibString);
  iLib.SetLibraryPath(Path + FB_DLL);
  Result := iLib.TryIBLoad;
end;

procedure TestDB;
const
  TransParamsRO = 'wait;read;read_committed;rec_version';
var
  db: TIBDatabase;
  q: TIBSQL; 
begin
  if not LoadFBLib('') then
    raise Err('Load fail %s %s', [FBLibPath, LastErrMsg]);
  try
    db:= TIBDatabase.Create(nil);
    db.LoginPrompt := False;
    db.ServerType := 'IBServer';
    db.Params.Values[DPBConstantNames[isc_dpb_lc_ctype]] := 'UTF8';
    db.DatabaseName := 'localhost:someDB';
    db.Params.Values[DPBConstantNames[isc_dpb_user_name]] := 'SYSDBA';
    db.Params.Values[DPBConstantNames[isc_dpb_password]] := 'masterkey';
    db.Connected := True;

    q := TIBSQL.Create(nil);
    q.Database := DB;
    q.Transaction := TIBTransaction.Create(q);
    q.Transaction.Params.Delimiter := ';';
    q.Transaction.DefaultAction := TARollback; // Для всех транзакций - откат в случае неполадок
    q.Transaction.DefaultDatabase := q.Database;
    q.SQL.Text := 'select CURRENT_USER from Rdb$Database;';
    q.Transaction.Params.DelimitedText := TransParamsRO;
    q.Transaction.StartTransaction;
    q.ExecQuery; // ! BOOM
    q.Transaction.Commit;
  finally
    if (q <> nil) and q.Transaction.InTransaction then
      q.Transaction.Rollback;
    FreeAndNil(q);
    FreeAndNil(db);
  end;
end;



Может, кто-нибудь сталкивался с такой проблемой и решал ее?
...
Рейтинг: 0 / 0
02.04.2021, 12:40
    #40059072
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
02.04.2021 12:35, Fr0sT-Brutal пишет:
>
> Компоненты IBX из XE2,

возьми лучше из Лазаря.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.04.2021, 13:18
    #40059090
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Мимопроходящий

02.04.2021 12:35, Fr0sT-Brutal пишет:
>
> Компоненты IBX из XE2,

возьми лучше из Лазаря.

Попробую, спс. Надеюсь, не сильно заточены под Лазарь.
Еще вариант взять из RTL 10.3.
...
Рейтинг: 0 / 0
02.04.2021, 13:26
    #40059095
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
фиг его знает что лучше.
кроссплатформенность в Delphi весьма условна -
если (утрируя) кнопочки и формочки ещё можно "туда-сюда",
то всё остальное обычно фигушки...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.04.2021, 13:29
    #40059098
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Fr0sT-Brutal,

Есть знакомые люди, которые переводили с Win на Linux проект. Но всё делали через Wine. И работает нормально. Это не вариант?
...
Рейтинг: 0 / 0
02.04.2021, 13:31
    #40059100
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Romka-Fes
Fr0sT-Brutal,
Есть знакомые люди, которые переводили с Win на Linux проект. Но всё делали через Wine. И работает нормально. Это не вариант?

Примерно как поставить в Запорожец двигатель от BMW. Наверно можно. Но зачем?
...
Рейтинг: 0 / 0
02.04.2021, 13:35
    #40059104
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
makhaon
Примерно как поставить в Запорожец двигатель от BMW.
а кто из них who?
...
Рейтинг: 0 / 0
02.04.2021, 13:35
    #40059105
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Romka-FesЕсть знакомые люди, которые переводили с Win на Linux проект. Но всё делали через Wine.

То есть процесс "перевода" свёлся к "установить WINE, запустить готовый экзешник".
РосНаноРаспил.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.04.2021, 13:35
    #40059106
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Romka-Fes
Fr0sT-Brutal,

Есть знакомые люди, которые переводили с Win на Linux проект. Но всё делали через Wine. И работает нормально. Это не вариант?

У меня либа, которую тягают другие проекты... и в целом Wine не особо стабилен и быстр для прода.

Попробовал с IBX из RTL - есть контакт! Хотя эти динозавры до сих пор "не знают" о существовании Firebird :(
...
Рейтинг: 0 / 0
02.04.2021, 13:36
    #40059107
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Fr0sT-Brutal
Попробовал с IBX из RTL - есть контакт! Хотя эти динозавры до сих пор "не знают" о существовании Firebird :(
дык, питарасы, сэр! ©
...
Рейтинг: 0 / 0
02.04.2021, 13:55
    #40059108
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Dimitry Sibiryakov,

Была задача - запустить проект на Linux. Самый простой способо - Wine. Никто код не менял вообще. Никаких распилов. As is.
...
Рейтинг: 0 / 0
02.04.2021, 13:57
    #40059109
Romka-Fes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Dimitry Sibiryakov,

Но потом таки делали переход с VCL на FireMonkey. И там вроде бы было веселей с доступом к FB. Но не менее чем 3.0 кажись.
Тут вопрос - нужен только IBX - или другие компоненты доступа к БД приемлемы?
...
Рейтинг: 0 / 0
02.04.2021, 14:15
    #40059112
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Fr0sT-Brutal
Хотя эти динозавры до сих пор "не знают" о существовании Firebird :(
Добавить кастомный ServerType - пол часа работы
...
Рейтинг: 0 / 0
02.04.2021, 14:34
    #40059116
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Поковырял IBX от Лазаря - там много всяких веселостей предвидится. Уже наткнулся на TRTLCriticalSection и модуль Registry (в линуксе-то он накой??).
...
Рейтинг: 0 / 0
02.04.2021, 14:37
    #40059118
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
_Vasilisk_
Fr0sT-Brutal
Хотя эти динозавры до сих пор "не знают" о существовании Firebird :(
Добавить кастомный ServerType - пол часа работы

Сделал за две минуты, добавив метод SetLibraryPath в исходники IBX. Знаешь метод без модификации либо копирования исходников IBX? Поделись, как. Эти собаки спрятали класс TIBServerLibrary внутрь юнита, и от него не наследуешься.
...
Рейтинг: 0 / 0
02.04.2021, 14:42
    #40059119
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
02.04.2021 14:37, Fr0sT-Brutal пишет:
> Сделал за две минуты, добавив метод SetLibraryPath в исходники IBX.
> Знаешь метод без модификации либо копирования исходников IBX? Поделись, как.
> Эти собаки спрятали класс TIBServerLibrary внутрь юнита, и от него не наследуешься.

у них всё так.
сделай форк и не парься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.04.2021, 16:56
    #40059159
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Fr0sT-Brutal
Поделись, как
1. Копируешь класс TIBServerLibrary в TFBServerLibrary
2. Изменяешь метод LibraryName
3. В конце модуля пишешь
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure AddLib;
var
  LLib: IGDSLibrary;
begin
  LLib := TFBServerLibrary.Create;
  AddIBInterface(CFBServerType, LLib);
  LLib := TFBEmbeddedLibrary.Create;
  AddIBInterface(CFBEmpeddedServerType, LLib);
end;

initialization
  AddLib;

finalization
  IBClientInterface.Remove(CFBServerType);
  IBClientInterface.Remove(CFBEmpeddedServerType);

end.

3. Модуль загоняешь в пакет, пакет инсталлируешь в среду

Можно еще добавить в пакет такой класс
Код: 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.
type
  TIBDatabaseSelectionEditor = class(TSelectionEditor)
  public
    procedure RequiresUnits(AProc: TGetStrProc); override;
  end;

{ TIBDatabaseSelectionEditor }

procedure TIBDatabaseSelectionEditor.RequiresUnits(AProc: TGetStrProc);
var
  Li: Integer;
  LDB: TIBDatabase;
begin
  for Li := 0 to Designer.Root.ComponentCount - 1 do begin
    if Designer.Root.Components[Li] is TIBDatabase then begin
      LDB := TIBDatabase(Designer.Root.Components[Li]);
      if (LDB.ServerType = CFBServerType) or (LDB.ServerType = CFBEmpeddedServerType) then begin
        AProc('UFBIntfImpl');
        Exit;
      end;
    end;
  end;
end;

procedure Register;
begin
  RegisterSelectionEditor(TIBDatabase, TIBDatabaseSelectionEditor);
end;
...
Рейтинг: 0 / 0
02.04.2021, 17:45
    #40059161
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Мимопроходящий

фиг его знает что лучше.
кроссплатформенность в Delphi весьма условна -
если (утрируя) кнопочки и формочки ещё можно "туда-сюда",
то всё остальное обычно фигушки...
обоснуй.
Делфи позволяет не только десктопные приложения собирать под Linux, но еще и системные демоны (по аналогии с виндовскими сервисами). Также работает доступ к железу, например к COM-портам и USB.
...
Рейтинг: 0 / 0
02.04.2021, 17:49
    #40059162
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
_Vasilisk_
1. Копируешь класс TIBServerLibrary в TFBServerLibrary
2. Изменяешь метод LibraryName

Вариант, спасибо. Не нравится, что нужно дублировать, хотя возможность применения совместно со стоковой либой - это плюс.
Пока сделал через форк и добавление
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TIBServerLibrary.SetLibraryPath(const Path: string);
begin
  FLibPath := Path;
end;

function TIBServerLibrary.LibraryName: String;
begin
  // empty custom path - use default filename
  if FLibPath = '' then
    Result := IBASE_DLL
  // custom path is directory - add default filename
  else if DirectoryExists(FLibPath) then
    Result := IncludeTrailingPathDelimiter(FLibPath) + IBASE_DLL
  // full custom path - use it
  else
    Result := FLibPath;
end;
...
Рейтинг: 0 / 0
03.04.2021, 01:08
    #40059238
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
Fr0sT-Brutalq := TIBSQL.Create(nil);
q.Database := DB;
q.Transaction := TIBTransaction.Create(q);
вроде как не ошибка, но нафиг такое надо - вообще-то должно быть наоборот - запрос должен принадлежать транзакции.
то есть, в коннекте есть транзакциИ, в транзакции есть запросЫ.
...
Рейтинг: 0 / 0
03.04.2021, 12:28
    #40059285
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
kdv
нафиг такое надо
Но isc_dsql_alloc_statement2 принимает параметром хендл соединения, а не базы
...
Рейтинг: 0 / 0
03.04.2021, 12:55
    #40059293
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
_Vasilisk_Но isc_dsql_alloc_statement2 принимает параметром хендл соединения, а не базы
што??? у клиента хэндл соединения и есть "хэндл базы". У клиента вообще нет никакого "хэндла базы" и не может быть, ни в обычном клиент-сервере, ни в embedded.
...
Рейтинг: 0 / 0
03.04.2021, 12:58
    #40059296
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
kdv,

автору клиента хэндл соединения и есть "хэндл базы".
если непонятно, то не "есть и есть", а хэндл соединения = соединение с конкретной БД. "Хэндла базы" у клиента нет как такового. Оно есть только у сервера.
...
Рейтинг: 0 / 0
03.04.2021, 13:00
    #40059297
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
_Vasilisk_isc_dsql_alloc_statement2

А за его применение к переменным в динамической памяти надо отдельно бить по голове.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.04.2021, 15:13
    #40059562
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IBX под Linux
_Vasilisk_
Но isc_dsql_alloc_statement2 принимает параметром хендл соединения, а не базы
Читать "а не транзакции"

kdv
хэндл соединения = соединение с конкретной БД. "Хэндла базы" у клиента нет как такового.
Некорректно выразился. Конечно же хендл соединения

Т.е. для создания стейтмента нужна и транзакция (prepare, execute) и соединение (alloc). И соединение из транзакции не извлекается.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX под Linux / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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