powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX под Linux
25 сообщений из 38, страница 1 из 2
IBX под Linux
    #40059068
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой. Надо портировать прогу, работающую с 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
IBX под Linux
    #40059072
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
02.04.2021 12:35, Fr0sT-Brutal пишет:
>
> Компоненты IBX из XE2,

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

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

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

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

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

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

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

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

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

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

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

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

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

у них всё так.
сделай форк и не парься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX под Linux
    #40059159
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
IBX под Linux
    #40059161
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

фиг его знает что лучше.
кроссплатформенность в Delphi весьма условна -
если (утрируя) кнопочки и формочки ещё можно "туда-сюда",
то всё остальное обычно фигушки...
обоснуй.
Делфи позволяет не только десктопные приложения собирать под Linux, но еще и системные демоны (по аналогии с виндовскими сервисами). Также работает доступ к железу, например к COM-портам и USB.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059162
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_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
IBX под Linux
    #40059238
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalq := TIBSQL.Create(nil);
q.Database := DB;
q.Transaction := TIBTransaction.Create(q);
вроде как не ошибка, но нафиг такое надо - вообще-то должно быть наоборот - запрос должен принадлежать транзакции.
то есть, в коннекте есть транзакциИ, в транзакции есть запросЫ.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059285
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
нафиг такое надо
Но isc_dsql_alloc_statement2 принимает параметром хендл соединения, а не базы
...
Рейтинг: 0 / 0
IBX под Linux
    #40059293
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Но isc_dsql_alloc_statement2 принимает параметром хендл соединения, а не базы
што??? у клиента хэндл соединения и есть "хэндл базы". У клиента вообще нет никакого "хэндла базы" и не может быть, ни в обычном клиент-сервере, ни в embedded.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059296
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

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

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

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

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


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