| 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
						 Сообщений: 88 Зарегистрирован: 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
						 Сообщений: 105 Зарегистрирован: June 2022 
						
					 | 
					Senior 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
						 Сообщений: 88 Зарегистрирован: 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
						 Сообщений: 88 Зарегистрирован: 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] Известить модератора  
 |  
	| 
		
	 | 
 
 
 |