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 не стал бы регистрировать новое описание драйверов.
Базовые и виртуальные драйвера
Далее, чтобы воспользоваться услугами этого драйвера, нам нужно в компоненте 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
Изменено 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.
Всем привет!
Пишу проект на основе 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?
Читайте также: