FB3 как правильно использовать embedded? [сообщение #1327] |
Fri, 13 January 2023 18:16 |
svd
Сообщений: 49 Зарегистрирован: November 2022
|
Member |
|
|
Всем привет.
немогу подключиться по embedded и создать файл базы данных. Использую библиотеку на 32 бита.
Комп под Win10 x64.
Установил FB3.0.7 Win64.
Из консоли набираю
C:\Omnicell_UpdateRDS\Update_working\Programme>Mach4Script.exe -l C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql MACH4 IBEScript Version 2022.5.24.1 Copyright (c) 2002-2021 IBExpert Ltd (www.ibexpert.com)
Executing script: C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql
(Line: 13) : Creating database 'C:\Mach4\Database_Empty\MEDIMAT.FDB'... using C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll... FAILED!
Error in script: C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql
Error occurred while executing following statement (line 13):
-------- STATEMENT ----------
CREATE DATABASE 'C:\Mach4\Database_Empty\MEDIMAT.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET ISO8859_1 COLLATION ISO8859_1
-------- ERROR ----------
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Error occurred during login, please check server firebird.log for details.
-------------------------------------------------------------------------------------------------------------
SQLCODE: -902
SQLSTATE: 08006
GDSCODE: 335545106
Script executed with errors. Total execution time: 31ms
скрип небольшой только на создание файла
SET SQL DIALECT 3;
SET CLIENTLIB "C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll";
SET NAMES ISO8859_1;
CREATE DATABASE 'C:\Mach4\Database_Empty\MEDIMAT.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET ISO8859_1 COLLATION ISO8859_1;
В чем неправ?
выкинул из скрипта строчку с set clientlib и получаю ошибку типа
C:\Omnicell_UpdateRDS\Update_working\Programme>Mach4Script.exe -l C:\Program Files\Firebird\Firebird_3_0\WOW64\fbclient.dll C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql MACH4 IBEScript Version 2022.5.24.1 Copyright (c) 2002-2021 IBExpert Ltd (www.ibexpert.com)
Executing script: C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql
(Line: 13) : Creating database 'C:\Mach4\Database_Empty\MEDIMAT.FDB'... using gds32.dll... FAILED!
Error in script: C:\RD\azTFS\Technik\MACH4\DataBase\test_Create.sql
Error occurred while executing following statement (line 13):
-------- STATEMENT ----------
CREATE DATABASE 'C:\Mach4\Database_Empty\MEDIMAT.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET ISO8859_1 COLLATION ISO8859_1
-------- ERROR ----------
Firebird error.
unknown ISC error 335545106.
----------------------------
SQLCODE: -999
SQLSTATE: HY000
GDSCODE: 335545106
Script executed with errors. Total execution time: 94ms
[Обновления: Fri, 13 January 2023 18:20] Известить модератора
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: FB3 как правильно использовать embedded? [сообщение #1441 является ответом на сообщение #1440] |
Sun, 22 January 2023 19:52 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
Да, эмбедедд в первую очередь.
У меня настройки клиента вообще не отличаются дла вариантов эмбедедд/сетевой.
Не хочу зависеть от уже остановленньіх чужих программ.
У меня все вариантьі установки "портабельньіе".
fbclient\
project.exe
project.conf
В .conf-файле есть 2 главные настройки: путь к fbclient.dll и путь к БД
Но если не установить переменньіе окружения возникают проблемы с поиском firebird.msg
upd. Переменньіе окружения устанавливаются не для системьі целиком, а только внутри конкретного приложения. И не влияют ни на что прочее
upd2. Если серверов несколько (или версий серверов), то ставим в качестве клиента максимальную версию и подключаемся через него ко всем прочим серверам
[Обновления: Sun, 22 January 2023 19:57] Известить модератора
|
|
|
Re: FB3 как правильно использовать embedded? [сообщение #1442 является ответом на сообщение #1441] |
Sun, 22 January 2023 21:48 |
kdv
Сообщений: 98 Зарегистрирован: June 2022
|
Member |
|
|
чтобы "не зависеть от настроек чужих программ", не надо распихивать свою приладу и embedded по разным папкам. Это для чего? Чтобы при двух разных приложениях использовать один embedded? Экономия ни о чем.
А несчастный пользователь, скопировав только папку с вашим приложением на другой комп, получит неработающее.
(поправлюсь - если embedded в "подпапке", то всё будет ок, кроме упомянутых "переменных окружения. В итоге ваше приложение "непортабельное"),
p.s. чужим приложениям ваш embedded до лампочки, будь он хоть в отдельной папке.
[Обновления: Sun, 22 January 2023 21:50] Известить модератора
|
|
|
|
|
Re: FB3 как правильно использовать embedded? [сообщение #1449 является ответом на сообщение #1448] |
Mon, 23 January 2023 12:12 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
fb_lib := MainIniFile.ReadString('SYSTEM', 'firebird', '');
if fb_lib <> '' then
begin
fb_lib := ExpandFileName(fb_lib);
SetGlobalEnvironment('FIREBIRD', fb_lib);
end else
fb_lib := GetFirebirdPath;
if not DirExists(fb_lib) then
fb_lib := ''
else
AddDllDirectory(fb_lib);
SetGlobalEnvironment('FIREBIRD_MSG', GetGlobalEnvironment('FIREBIRD'));
[Обновления: Mon, 23 January 2023 12:13] Известить модератора
|
|
|
|
Re: FB3 как правильно использовать embedded? [сообщение #1457 является ответом на сообщение #1456] |
Mon, 23 January 2023 22:34 |
shavluk
Сообщений: 82 Зарегистрирован: June 2022 Географическое положение: Одеса
|
Member |
|
|
Да, название процедуры немного неудачное. По умолчанию вызывается SetEnvironmentVariable (только текущий процесс)
Цитата:. The SetEnvironmentVariable function sets the value of an environment variable for the current process. автоматическая буквица в цитате выбешивает
function SetGlobalEnvironment(const Name, Value: string; const Local: Boolean = True;
const User: Boolean = True): Boolean;
resourcestring
REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
REG_USER_LOCATION = 'Environment';
begin
Result := Local;
SetEnvironmentVariable(PChar(Name), PChar(Value));
if not Result then
with TRegistry.Create do
try
if User then { User Environment Variable }
Result := OpenKey(REG_USER_LOCATION, True)
else { System Environment Variable }
begin
RootKey := HKEY_LOCAL_MACHINE;
Result := OpenKey(REG_MACHINE_LOCATION, True);
end;
if Result then
begin
WriteString(Name, Value); { Write Registry for Global Environment }
{ Update Current Process Environment Variable }
SetEnvironmentVariable(PChar(Name), PChar(Value));
{ Send Message To All Top Window for Refresh }
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
end;
finally
Free;
end;
end;
[Обновления: Mon, 23 January 2023 22:37] Известить модератора
|
|
|