Delphi FireDac + Oracle без установки клиента Oracle - PullRequest
0 голосов
/ 03 июня 2019

Можно ли каким-либо образом подключить мое приложение Delphi (FireDac) к базе данных Oracle напрямую?

В настоящее время я могу установить соединение, но мне нужно установить Oracle Client

на сайте embarcadero (http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Oracle_Server_(FireDAC)) показывает только, как подключиться к установленному клиенту.

Я создал демо, которое подключается с использованием имени хоста, порта и экземпляра.

на машине, на которой установленный клиент работает отлично. Уже в машине, которая не имеет клиента, даже со всеми DLL, не подключается, представляя следующую ошибку:

[FireDAC] [Физ] [Ора] -1309. OCI неправильно установлен на этом аппарате (NOE1 / INIT).

даже если dll oci.dll находится в том же каталоге, что и приложение,

следует коду для подключения:

procedure TForm1.btnConectarClick(Sender: TObject);
begin
   conDados.Close;
   conDados.Params.DriverID := 'Ora';
   conDados.Params.Database := '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.xxx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SMARTSRV)))';
   conDados.Params.UserName := 'xxxxx';
   conDados.Params.Password := 'xxxxx';
   conDados.Open();
end;

Еще один параметр, который тоже не работал

   conDados.Close;
   // conDados.Params.DriverID := 'Ora';
   // conDados.Params.Database := '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.xxx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xxx)))';
   // conDados.Params.UserName := 'xxx';
   // conDados.Params.Password := 'xxx';
   conDados.Params.DriverID := 'Ora';
   conDados.Params.Database := '192.168.0.xxx:1521/xxx';
   conDados.Params.Values['OSAuthent'] := 'No';
   conDados.Params.UserName := 'xxx';
   conDados.Params.Password := 'xxx';
   conDados.Params.Values['CharacterSet'] := 'UTF8';
   odlDados.DriverID := 'Ora';
   odlDados.NLSLang := 'AMERICAN_AMERICA.WE8ISO8859P1';
   odlDados.VendorHome := ExtractFileDir(Application.ExeName);
   odlDados.VendorLib := ExtractFilePath(Application.ExeName) + 'oci.dll';
   conDados.Open();

Можно ли как-нибудь напрямую подключить свое приложение Delphi (FireDac) к базе данных Oracle?

Спасибо

Ответы [ 5 ]

3 голосов
/ 04 июня 2019

Полный клиент Oracle действительно занимает очень много места (около 100 МБ) и ожидает установки до приложения.

Вы можете использовать альтернативу Oracle Instant Client .Это урезанная версия, предоставляющая доступ только к библиотеке OCI / dll (для Basic Light edition), которая не требует установки: просто скопируйте dll с вашим exe-файлом.Он поддерживается Oracle, дает высокую производительность и лучшую стабильность.Мы не полностью доверяем клиентам «прямого TCP-соединения», написанным на паскале, которые экономят несколько МБ, но не сертифицированы Oracle - если за использование Oracle много денег, вы можете позволить себе несколько МБ дискового пространства дляимеет 100% цепочку соединений Oracle.

Это то, что мы используем с нашей библиотекой SynDBOracle с открытым исходным кодом , но FireDAC также официально поддерживает ее .

Если вы хотите еще больше уменьшить площадь клиента, подумайте о переходе с RAD на архитектуру REST и оставьте соединение Oracle на стороне службы приложений.Обычный HTTPS + JSON не потребует никакой библиотеки на стороне клиента, легко масштабируется до тысяч одновременных подключений (с надлежащей структурой) и допускает даже клиенты JavaScript.Стоит посмотреть направление.

1 голос
/ 04 июня 2019

Для этого вам потребуется использовать соответствующий драйвер базы данных, который не требует использования Oracle Client.

К счастью, dbExpress предоставляет подходящий драйвер для доступа к базам данных Oracle напрямую через TCP / IP без Oracle Client

https://www.devart.com/dbx/oracle/

Но dbExpress не бесплатен и, следовательно, увеличит стоимость разработки вашего приложения.

0 голосов
/ 03 июля 2019

после других попыток мы обнаруживаем, что ошибка генерируется dll msvcr120.dll, но она не описана в ошибке.

мы установили следующее программное обеспечение Microsoft и все работало правильно.

Распространяемые пакеты Visual C ++ для Visual Studio 2013

0 голосов
/ 06 июня 2019

пожалуйста, скажите мне, что вы устанавливаете oracle-клиент 32-битный или 64-битный. Какой вариант вы устанавливаете oracle-клиент (администратор, среда выполнения, мгновенный клиент, пользовательский)

я использую win 7 64-битную базу данных oracle 18c,Rad Studio Delphi 10.3 на том же компьютере.

Я просто устанавливаю oracle client win 64 bit. Но все равно получаю эту ошибку [FireDAC] [Phys] [Ora] -1309.OCI неправильно установлен на этом аппарате (NOE1 / INIT).

0 голосов
/ 04 июня 2019

Вы пробовали корпоративные соединители (на основе FireDAC)?https://www.embarcadero.com/products/enterprise-connectors/enterprise-connectors

Вот дополнительная информация о соединителе Oracle: https://www.cdata.com/drivers/oracledb/firedac/

...