Delphi oracle подключение firedac

Обновлено: 07.07.2024

Я могу успешно подключиться к Oracle через встроенные драйверы, но не могу заставить работать соединение ODBC. Клиентское программное обеспечение Oracle 11g установлено на моей 64-разрядной машине Windows 7, а также 32-разрядные драйверы ODBC, загруженные из Instant Client Downloads для 32-разрядной версии Microsoft Windows.

Позвольте мне сначала описать успешные связи:

TNSNames.ORA содержит данные для установки Oracle 10:

Я настроил свой TFDConnection с

Как вариант, я могу обойти TNSNAMES.ORA указав непосредственно:

(Как видите, это еще один сервер Oracle, не TNSNAMES.ORA )

Теперь неудачные попытки через ODBC

Установлены два 32-битных драйвера Oracle ODBC:

  • Microsoft ODBC для Oracle версии 6.01.7601.19135 - я думаю, что это пришло с ОС Win7
  • Oracle в instantclient_11_2 версии 11.02.00.04 - я установил это вручную из источника, упомянутого вверху (работает от имени администратора, как указано в примечаниях к выпуску ODBC для Oracle Instant Client).

Я установил два системных DSN через эти драйверы, но ни один из них не работает.

Драйвер ODBC версии 6 с присвоением ему имени записи TSNAMES.ORA для "Сервер":


и драйвер Oracle версии 11:


Для этого второго я добавил еще одну запись в TNSNAMES.ORA , так как этот диалог, очевидно, предполагал, что мне нужно просмотреть этот файл:

Я настроил свой TFDConnection с

И этот код, и кнопка проверки в де-32-битном ODBC-администраторе завершаются с ошибкой:


В этой папке установлено мое клиентское программное обеспечение Oracle, оно содержит SQORA32.DLL (и другие) и находится в моем системном пути.

Я пробовал все виды вариаций, включая / исключая доменное имя, имя базы данных и т. Д., Но безуспешно.

Как правильно настроить соединение ODBC для подключения к Oracle, которое будет использоваться в 32-разрядном приложении Delphi-Tokyo через FireDAC?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Известно, что большинство производителей баз данных выпускают к ним драйвера, которые и помогают нашим приложениям работать быстро и правильно. Я, например, работаю с базой MySQL, и для 32 разрядных приложений существует драйвер libmysql.dll О том как его подключить, используя компоненты доступа к БД FireDAC мы и поговорим в данное статье.

За основу статьи, я взял официальную документацию

Старая версия мне нравится больше тем, что там удобное, раскрывающееся дерево с левой стороны, а новая версия хороша тем, что там практически весь код корректен. В старой версии использованы аббревиатуры AD, что означает AnyDAC, а в новой версии использованы аббревиатуры FD, что означает FireDAC.

Как подключить драйвер к нашему приложению?

Существует 2 способа

В данной статье мы рассмотрим оба способа.

Как подключить драйвер через FDDrivers.ini ?

Для начала посмотрим, где находится этот самый файл. По умолчанию, при установке Delphi он находится в директории

C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDDrivers.ini

Когда я его открыл, он был у меня практически пустым и состоял всего из 2 строк

[FDDrivers.ini]
Encoding=UTF8

Теперь узнаем что позволяет сделать FDDrivers.ini?

-настроить параметры базового драйвера (для всех описаний драйверов обязательна секция BaseDriverID, например BaseDriverID=MySQL)

-настроить так называемые виртуальные драйвера для того, чтобы, например, в одном и том же приложении использовать возможность подключаться к разным версиям сервера БД, для того, чтобы дать понять FireDAC, что у нас виртуальный драйвер, нам надо саму секцию назвать с какой-нибудь добавкой, например, таким образом

; MySQL327 virtual driver will use specified LIBMYSQL . DLL

Обратите внимание, мы подписали секцию [MySQL_Virtual], если бы мы оставили [MySQL], то FireDAC не стал бы регистрировать новое описание драйверов.

Базовые и виртуальные драйвера

11

; MySQL327 virtual driver will use specified LIBMYSQL . DLL

Далее, чтобы воспользоваться услугами этого драйвера, нам нужно в компоненте FDManager прописать свойство DriverDefFileName и поставить DriverDefFileAutoLoad в True. После этого, например, при создании ConnectionDefinition, мы можем, например указать, в свойстве DriverID свойство MySQL_Virtual

procedure TForm1 . AddConnectionDef ( Sender : TObject ) ; for i : = 0 to FDManager1 . ConnectionDefs . Count - 1 do if FDManager1 . ConnectionDefs [ i ] . Name = 'MySQL_Persistent_def' //Далее, добавляем, если ConnDef c именем MySQL_Persistent_def отсутствует myDef := FDManager1 . ConnectionDefs . AddConnectionDef ; myDef . Params . DriverID : = 'MySQL_Virtual' ; // <<< Здесь указали на использование виртуального драйвера // Отмечаем myDef как Persistent, без этого был бы Private

А само подключение обработать таким образом

FDConnection1 . ConnectionDefName : = 'MySQL_Persistent_def' ; if FDConnection1 . Connected then showmessage ( 'Connected' )

Зачем нужны виртуальные драйвера?

-работать с различными версиями DBMS (DataBase Management System) в разных соединениях (FDConnections), думаю, можно работать одновременно даже с разными БД в разных соединениях

-настраивать параметры драйверов, например параметры MySQL Embedded

Как подключить драйвер через TFDPhysXxxDriverLink ?

Здесь все достаточно просто, нужно добавить компонент TFDPhysXxxDriverLink на форму и настроить следующие свойства

Если прописать VendorHome, то FireDac будет сначала искать libmysql.dll в этой директории.

Обратите внимание!

У меня, например 64 разрядная версия MySQL, и драйвер, соответственно там тоже 64 разрядный, если его использовать, будет выскакивать ошибка. Поэтому я свойство VendorHome не прописывал, а только свойство Vendorlib, здесь я прописал путь к 32 разрядной версии драйверов, так как в Delphi компилировал 32 разрядное приложение.

Вопрос на засыпку - помогите пожалуйста, чего мне не хватает для успешного запуска?

Список dll файликов прикрепляю внизу письма, Oracle 12.2 клиент стоит, PL/SQL Developer 12 использую каждый день

Из хорошего - FireDAC Explorer успешно видит все нужные мне БД - и таблицы, и пакеты и т.д.

В Delphi XE7 приложение работало успешно. Delphi 10.2.3 подчёркивает два модуля. Если эти два модуля закомментарить, то - компилирует успешно, но не может подцепиться ни к одной БД Oracle

Создал пустое приложение, в него положил TFDConnection, драйвер Oracle он не видит

Что уже пробовал:

Вчера поставил все dll. Сегодня поставил Delphi 10.3.1 Architect Trial (на месяц), в нём проблема воспроизводится. Ещё раз переустановил драйвер Oracle.

Что ещё можно сделать?

Обещанный список dll:

oci.dll
ocijdbc12.dll
ocijdbc12.sym
ociw32.dll
ociw32.sym
ojdbc8.jar
oramysql12.dll
oramysql12.sym
orannzsbb12.dll
orannzsbb12.sym
oraocci12.dll
oraocci12.sym
oraocci12d.dll
oraocci12d.sym
oraociei12.dll
oraociei12.sym
oraons.dll
orasql12.dll
orasql12.sym


errors2.thumb.jpg.5a5ab13830a1be84f639a499964ead7e.jpg

Изменено 31 мая, 2019 пользователем sulion

Ссылка на комментарий

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Похожий контент

FDQuery1.SQL.Text := 'select !x from dual'; FDQuery1.Macros.Clear; with FDQuery1.Macros.Add do begin Name := 'X'; Value := 'DUMMY'; end; FDQuery1.Prepare; Как получить результат prepare (запрос вида 'select DUMMY from dual')?

Привет всем форумчанам!
Нужна Ваша помощь. Есть пакет в ORACLE с глобальными переменными, типа:
CREATE OR REPLACE PACKAGE GLOBALS IS
BranchId NUMBER;
--
END GLOBALS;
Вопрос: как получить значение переменных из пакета?

Добрый день!
Работаю с MySQL
Подключаюсь через FireDac.
FDQuery+FDConnecton+Bind+Grid
Запрос выполняется моментально, но как только подключаю Grid - начинает висеть. Grid заполняется очень долго - секунд 12-15.
Причем результат запроса - всего 230 строк, хоть и join присутствует.
Куда копать? Может дело быть именно в FMX?
Суть вопроса в заголовке.
Есть ли какие-то настройки у базы или FireDAC чтобы в английской системе (винда 7) русский текст отображался не вопросами, а русским текстом?
Настройки у БД UTF-8.

Собственно как это делают люди?

Речь, конечно, не про выполнение скрипта "update table set. ", а про использование Edit/Post с изменением как в Датасете, так и в БД.

Какие нужны настройки, в частности у TFDQuery.
// настройки qr.UpdateOptions = Delphi oracle подключение firedac[UpdateChangedFields = true] // при этом селект не смотрит напрямую в theTable, но id - это поле theTable qr2.UpdateOptions.UpdateTableName := 'theTable'; qr2.Edit; qr2.FieldByName('Str').Value := Format('%s-%d',[qr2.FieldByName('Str').AsString, Code]); qr2.Post; В такой форме позволяет менять датасет, но в БД данные не скидываются. БД SQLite.

Bio HaZaRD

Всем привет!
Пишу проект на основе FireDac (TFDConnection, TFDQuery) + SQLite. На ПК с IDE программа запускается, а на других - нет. На ПК, без IDE, стоят все обновы.
Помогите разобраться, где проблема или посоветуйте другой компонент, который поддерживает SQLite. Заранее спасибо!

Примечания к файлу:
Windows-Problemberichtserfassung = Windows Problem Reporting

Всем привет только начинаю работать с sqlite и возникло пару вопросов.Добавляю на форму пару компонентов

Я могу успешно подключиться к Oracle через собственные драйверы, но не могу подключиться к ODBC-соединению. Клиентское программное обеспечение Oracle 11g установлено на моем 64-разрядном компьютере под управлением Windows 7, а также 32-разрядные драйверы ODBC, загруженные из файлов Instant Client Downloads для Microsoft Windows 32-bit .

Позвольте мне сначала описать успешные связи:

TNSNames.ORA содержит данные для установки Oracle 10:

Я настроил мой TFDConnection с

В качестве альтернативы, я могу обойти TNSNAMES.ORA , указав непосредственно:

(Как вы можете видеть, это еще один сервер Oracle TNSNAMES.ORA )

Теперь неудачные попытки через ODBC

Установлены два 32-разрядных драйвера ODBC Oracle:

  • Microsoft ODBC для Oracle версии 6.01.7601.19135 - я думаю, что это произошло с ОС Win7
  • Oracle в версии instantclient_11_2 11.02.00.04 - я установил это вручную из источника, упомянутого в верхней части (работает как admin, как предложено в примечаниях к выпуску ODBC Oracle Instant Client ODBC ).

Я установил два системных DSN через эти драйверы, но не работает.

Драйвер ODBC версии 6, дающий ему имя записи TSNAMES.ORA для «Server»:

введите описание изображения здесь

и идентификатор драйвера Oracle версии 11:

введите описание изображения здесь

Для этого второго я добавил еще одну запись TNSNAMES.ORA , так как в этом диалоге явно было предложено пройти через этот файл:

Я настроил мой TFDConnection с

И этот код, и кнопка тестирования в 32-разрядном администраторе ODBC с ошибкой:

введите описание изображения здесь

В этой папке установлено мое клиентское программное обеспечение Oracle, оно содержит SQORA32.DLL (и другие) и находится в моем системном пути.

Я пробовал всевозможные варианты, включая / исключая имя домена, имя базы данных и т. Д., Без успеха.

Как правильно настроить соединение ODBC для подключения к Oracle, которое будет использоваться в 32-битном приложении Delphi-Tokyo через FireDAC?

Читайте также: