powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX под Linux
38 сообщений из 38, показаны все 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
IBX под Linux
    #40059604
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Т.е. для создания стейтмента нужна и транзакция (prepare, execute) и соединение (alloc). И соединение из транзакции не извлекается.
и ? В любом случае схема связей древовидная:
Соединение->Транзакции->Запросы
Запрос работает в какой-то транзакции какого-то соединения.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВ любом случае схема связей древовидная:
Соединение->Транзакции->Запросы

Авотфиг. Двухфазные транзакции по прежнему поддерживаются, так что это треугольник: запрос
привязан к соединению, но для выполнения ему нужна транзакция, к которой привязано в том
числе и это соединение. Можно даже попытаться выполнить его в транзакции, которая совсем с
левого соединения. Будет весело.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX под Linux
    #40059647
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Fr0sT-Brutalq := TIBSQL.Create(nil);
q.Database := DB;
q.Transaction := TIBTransaction.Create(q);

вроде как не ошибка, но нафиг такое надо - вообще-то должно быть наоборот - запрос должен принадлежать транзакции.
то есть, в коннекте есть транзакциИ, в транзакции есть запросЫ.
*исправлено - утро, понедельник, не проснулся еще*
Хм, тут неоднозначно - запрос выполнится и останется, а транзакция закроется. АПИ-подход не очень ложится на ООП, т.к. хэндлы создаются и закрываются, а объекты остаются
...
Рейтинг: 0 / 0
IBX под Linux
    #40059660
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalтут неоднозначно - запрос выполнится и останется, а транзакция закроется.
да, запрос может оставаться в prepared-состоянии не будучи привязанным ни к какой транзакции.
Ничего страшного. Его можно выполнить в другой транзакции
авторАПИ-подход не очень ложится на ООП, т.к. хэндлы создаются и закрываются, а объекты остаются
А вот тут мысль неправильная. Если завершается транзакция, то как "экземпляр объекта" она должна кончиться, потому что ее уже не существует. Но ведь никто в здравом уме не уничтожает IBTransaction (например) по ее закрытии.
Ну или IBDatabase - в закрытом коннекте ничего не существует, коннекта нет. Так что я тут никакого конфликта не вижу.
Поэтому в состоянии Closed хэндла нет, а в Open - хэндл есть.

p.s. насчет двухфазных транзакций - это скорее исключение, связанное с "фишкой C", когда в функцию можно передать произвольное количество параметров (хэндлов транзакций).
...
Рейтинг: 0 / 0
IBX под Linux
    #40059695
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
А вот тут мысль неправильная. Если завершается транзакция, то как "экземпляр объекта" она должна кончиться, потому что ее уже не существует. Но ведь никто в здравом уме не уничтожает IBTransaction (например) по ее закрытии.
Ну или IBDatabase - в закрытом коннекте ничего не существует, коннекта нет. Так что я тут никакого конфликта не вижу.
Поэтому в состоянии Closed хэндла нет, а в Open - хэндл есть.

Ну, тут сама либа диктует структуру. Из sql есть ссылка на транзакцию, а не наоборот. Или ты про то, чтобы отдельно создать транзакцию, ее где-то хранить и присваивать sql-ям? Это ведь надо организовывать хранение. В моей структуре sql:транзакция 1:1, т.ч. иерархия не нарушена, зато кода меньше
...
Рейтинг: 0 / 0
IBX под Linux
    #40059732
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvв функцию можно передать произвольное количество параметров (хэндлов транзакций).

Хэндлов коннектов. Ибо это коннекты добавляются в транзакцию, а не наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX под Linux
    #40059769
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

ну что за ... А как еще узнать, к какой транзакции прилеплен запрос? В каком коннекте работает транзакция?
Потому у sql ссылка на ОДНУ транзакцию, а у транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций, а не одна, как в тех серверах, которые такое не умеют).
Ну посмотри хоть в mon$, там что, запросы первоочередные? Нет
mon$attachments->mon$transactions->mon$statements.
всё точно так же, как я рассказываю.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059770
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvу транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций

Не совсем. У транзакции - список курсоров, а не запросов. И список коннектов. Связь
коннекты-транзакции это многие-ко-многим.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBX под Linux
    #40059819
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный спор какой-то.
Есть соединение, к нему привязаны стейтменты.
Чтобы создать (препарировать) стейтмент, нужна транзакция, и чтобы выполнить его - тоже нужна транзакция (не обязательно та, что использовалась при создании).
Довольно удобно, когда к объектам типа TIBSQL привязан объект TIBTransaction. Когда транзакция закроется - привязка не уйдет, и когда она снова откроется (на самом деле, внутри TIBTransaction создастся новая транзакция) - не надо ничего снова привязывать, стейтмент автоматически может выполниться уже с новым хэндлом транзакции.
Но можно и менять транзакцию стэйтменту, просто переприсвоением объекта TIBTransaction, если это удобно.
Не вижу тут никакой особой разницы с принципом работы API. Наоборот, только упрощение и удобство.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059849
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Fr0sT-Brutal,

ну что за ... А как еще узнать, к какой транзакции прилеплен запрос? В каком коннекте работает транзакция?
Потому у sql ссылка на ОДНУ транзакцию, а у транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций, а не одна, как в тех серверах, которые такое не умеют).
Ну посмотри хоть в mon$, там что, запросы первоочередные? Нет
mon$attachments->mon$transactions->mon$statements.
всё точно так же, как я рассказываю.

А можешь накидать хотя бы примерно кодом свой идеальный вариант? А то что-то я не вкурю, как ты предлагаешь делать...
...
Рейтинг: 0 / 0
IBX под Linux
    #40059853
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

я предложил в том куске кода поменять направленность логики. Не от запроса к транзакции, а наоборот.
По связям объектов - чем IBX не устраивает?
...
Рейтинг: 0 / 0
IBX под Linux
    #40059927
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Fr0sT-Brutal,

я предложил в том куске кода поменять направленность логики. Не от запроса к транзакции, а наоборот.
По связям объектов - чем IBX не устраивает?

Хм. То есть предлагаешь создать тр-ю, создать sql, присвоить тр-ю sql-ю? Можно, конечно... список тр-ий, как я посмотрел, все равно сидит у database внутре.
...
Рейтинг: 0 / 0
IBX под Linux
    #40059931
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё это спор ниобчём.
какая разница что и как там на клиенте?
да пофигу!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IBX под Linux
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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