Как получить доступ к базам данных в Delphi XE Professional IDE? - PullRequest
4 голосов
/ 23 апреля 2011

Я не могу получить доступ к ЛЮБОЙ базе данных ЛЮБЫМИ средствами из Delphi XE Professional.Под доступом к базе данных я имею в виду следующее:

  1. отображение активной базы данных через компоненты в Инспекторе объектов, когда для подключенного свойства установлено значение true
  2. с использованием Проводника данных длясоздавать и исследовать соединения с базой данных

РЕДАКТИРОВАТЬ:
SORTED !!

Основная проблема заключается в том, что связь с базой данных, в том числе, в частности, связь, генерируемаяIDE и любой код, созданный с использованием драйверов, были проблематичными.

Были затронуты следующие проблемы:

  1. Отсутствующие или неуместные библиотеки DLL.
  2. Проводник данных делаетне полностью поддерживает драйверы dbExpress.
  3. В коде IDE 2009 обнаружена ошибка, обнаруженная Chee-Yang Chau при записи драйвера dbxFirebird, которая ограничивает статическое связывание драйверов с Delphi.Неизвестно, распространяется ли эта ошибка на 2010 или XE.
  4. При использовании Инспектора объектов легко заставить IDE вернуть измененные параметры соединения к их значениям по умолчанию.
  5. Некоторые драйверыимели неверные значения по умолчанию (например, предполагая, что клиентская DLL всегда была gdb32.dll независимо от того, была ли база данных Interbase или Firebird).
  6. Установка двух версий Interbase привела к некоторым конфликтам в связи базы данных - имена серверов, сгенерированныеинструменты были странными;и вид баз данных зависел от того, какая установка инструментов Interbase использовалась.
  7. Доступна документация на разные даты;относится к разным версиям;и в результате часто кажется противоречивым.

КОНЕЦ РЕДАКТИРОВАНИЯ:

Испытанные подходы:

  1. Несколько баз данных
  2. Несколько различных драйверов / компонентов
  3. Доступ к базе данных с помощью других внешних инструментов, таких как IBSQL и Flame Robin.
  4. Возникающие вопросы ( здесь и здесь ) на SO.
  5. Возникновение вопросов на форумах поддержки Firebird, Embarcardo и Flame Robin.

Среда:

  1. ОС: Windows7 Ultimate 64bit:
  2. Delphi Embarcadero® RAD Studio XE Professional Версия 15.0.3953.35171
  3. База данных: W1-V2.5.0.26074 Firebird 2.5 (64 бит)
  4. Технология подключения: dbExpress

Ответы [ 4 ]

3 голосов
/ 26 апреля 2011

Delphi Professional не поддерживает Firebird с собственными драйверами dbExpress, которые поставляются с Delphi.Для работы родного драйвера firebird dbExpress вам нужна версия Delphi для предприятий или архитекторов.

У меня Delphi 2010 Professional.Я не хотел тратить лишние деньги на версию E или A, и мне не удалось прочитать матрицу функций, чтобы увидеть, что драйвер Firebird dbExpress недоступен в версии Pro.

Я нашел несколько действительно хороших видео, которые показывают, как подключиться к Firebird с помощью Delphi.Однако, когда я попытался следовать моей версии Professonal, ничего не получалось.

Позор мне и еще большему позору Embarcadero за то, что он сказал, что Delphi поддерживает Firebird крупным жирным шрифтом, но не упомянул, что вам нужна версия Enterprise или Architect, за исключением мелкого мелкого шрифта.

2 голосов
/ 29 апреля 2011

Теперь я могу написать код для доступа к Firebird в IDE.У меня есть (ограниченный, но достаточный) доступ к драйверам в среде IDE.В частности, драйверы отображаются в проводнике данных, который можно использовать для генерации значений по умолчанию для SQLConnection (компонент dbExpress).Они могут быть доступны и использованы в Инспекторе объектов.Приведенный ниже обходной путь к ошибке IDE необходим для обеспечения правильности параметров связи.При написании кода базы данных необходимо скомпилировать в исходном коде драйвер dbExpress.

Следующий код является минимальным с минимальным набором параметров, необходимым для установления и тестирования соединения с базой данных:

unit Unit2;
interface
uses Classes, SqlExpr, Dialogs, dbxDevartInterbase;
var SQLConnection1 : TSQLConnection;
implementation
{$R *.dfm}
  begin
    SQLConnection1 := TSQLConnection.Create(nil);
    with SQLConnection1 do
    begin
      ConnectionName := 'TestConnection';
      DriverName := 'DevartInterBase';
      LibraryName := 'dbexpida40.dll';
      VendorLib := 'fbclient.dll';
      GetDriverFunc := 'getSQLDriverInterBase';
      Params.Clear;
      Params.Add('User_Name=SYSDBA');
      Params.Add('Password=masterkey');
      Params.Add('Database=localhost:C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\employee.fdb');
      Open;
      If Connected then ShowMessage('Connection is active');
      Free;
    end;
  end.

Обходной путь, любезно предоставленный Бобом Свартом на одном из форумов Codegear:

Хитрость заключается в выборе значения ConnectionName, которое затем назначит значение длясвойство Driver и все другие свойства, такие как LibraryName, VendorLib и GetDriverFunc.

Затем внесите изменения - при необходимости - в подвойства свойства Driver и, наконец, очистите имя драйверасвойство.

Это оставит все ваши изменения в списке параметров (который вы также можете редактировать вручную, если хотите).

Примечание: оставьте набор ConnectionName - если вы его очистите,параметры будут очищены снова.

Теперь вы можете скомпилировать приложение и развернуть его без необходимости использования dbxdrivers.exe или dbxconnections.ini (но вам, конечно, необходимо развернуть библиотеки DLL, указанные в LibraryName и VendorLib).

Также убедитесь, что для LoginPrompt установлено значение False, а для LoadParamsOnConnect также установлено значение False.

2 голосов
/ 23 апреля 2011

BOUNTY AWARD

Я присудил награду за этот ответ, поскольку именно он уводил меня от исследования IDE, его установки и конфигурации к расследованию соединения с базой данных.

END

ДК о Firebird 64 bit - нет опыта. Но у меня всегда было много проблем с dbExpress. Никаких проблем с включенным комплектом компонентов IB. Но есть много путаницы с версиями IB ...

Но для IMO лучше всего использовать компоненты ADO ('DBGo'), а не любые проприетарные драйверы IB или Delphi. Вам нужен ADO-провайдер для IB, доступный @:

http://www.ibprovider.com/eng/ - и как уже говорили другие, избегайте использования localhost, используйте 127.0.0.1 или, что еще лучше, определите истинный IP-адрес вашей рабочей станции (ping machine-name ...) И вы уверены, что у вас нет брандмауэра или защиты от вторжений, которые могут быть задействованы?

Вам также необходимо убедиться, что ваше соединение IB настроено правильно - локально или TCP, и нет, не используйте кавычки для ваших имен, имен и т. Д. Появляется полученное сообщение об ошибке чтобы указать, что вы пытаетесь подключиться через TCP, и он не настроен должным образом. Что произошло между временем, когда оно работало, и временем, когда оно не работало? Выключить Delphi? Перезагрузить машину? Объясните пожалуйста ....

Никаких «специальных разрешений» не требуется - вам просто нужно убедиться, что ваш сервер базы данных и клиент правильно установлены и настроены. С точки зрения функциональности вы можете делать все с профессиональной версией - только драйверы и т. Д. Не включены в пакет.

Опять же, ИМО идет на ADO, и вы никогда не оглядываетесь назад.

НТН, MNG

1 голос
/ 28 апреля 2011

Пробовали ли вы Paradox с помощью Borland Database Engine (BDE) и связанных с ним компонентов: TTable TQuery TStoredProc TDatabase и TSession?

Если память мне не изменяет, по крайней мереЕще в Delphi 3 отличительным фактором между «профессиональными» и «высокоуровневыми» выпусками был тип разработки баз данных «из коробки».

  • В Delphi 1, BDEбыл единственный способ сделать готовую разработку базы данных.
  • Delphi 2 разрешил настраиваемый слой базы данных путем абстрагирования частей иерархии компонентов базы данных.
  • Delphi 3Компания Professional предоставила BDE и драйверы для файловых баз данных и Interbase.
  • На один уровень выше (Enterprise? *) Они предоставили драйверы BDE для типичного клиент-сервер доступа к базе данных: SQL Server, Sybase, Interbase, Oracle, ... (и собственные драйверы для Interbase)
  • Еще один уровень (Architect? *) Представил многоуровневую разработку с Midas.К сожалению, Borland сделал шаг назад с Midas, потому что многоуровневые компоненты были снова подключены к BDE.(Это было решено в Delphi 4.)

? * Обратите внимание, что я могу ошибаться относительно точного наименования этих выпусков.Примерно в то же время у меня сложилось мнение, что Borland просто придумывает «более грандиозные» имена, чтобы брать больше за функции, которые на самом деле не дают такой большой выгоды, как считают «ИТ-директора с большой проверкой» -оставляя разработчиков, чтобы справиться с последствиями.(Да, у меня есть боевые шрамы от Мидаса I.)

Отбрось в сторону, теория была ....

Если бы вы занялись разработкой базы данных начального уровня , вы бы купили Delphi ??Professional.Разработайте свою систему на основе файловой базы данных или Interbase через BDE .
Если вам позже понадобилось увеличить масштаб: вы бы обновили Delphi, приобрели выбранную вами СУБД SQL, переключили подключение через компонент TDatabase и применили несколько необходимых настроек.
ПРИМЕЧАНИЕ. В Delphi 3 вы можете переключиться на Native Interbase (лично не рекомендуется) илииспользовать сторонние компоненты для разработки, не относящейся к Midas.Начиная с Delphi 4, ADO и DevExpress стали получать больше внимания, и в настоящее время BDE, кажется, в значительной степени забыт.

Конечно, теория и практика редко бывают в одних и тех же пабах.Однако, с несколькими предостерегающими указателями, вы сможете разработать значительное файловое решение, которое можно безболезненно обновить.

  • Сохраните свою бизнес-логику вне базы данных.Возможно, это самая большая и наиболее часто встречающаяся ошибка.Огромные блоки систем часто записываются в триггерах и хранимых процедурах, что усложняет обслуживание или миграцию системы.
  • Избегайте методов баз данных, специфичных для платформы.Это должно быть само собой разумеющимся, но если вы не будете явно следить за ними, вы столкнетесь с проблемами.
    • Особенно актуально для файловых систем баз данных, многие поддерживают специальные механизмы блокировки - избегайте их!В любом случае они плохо масштабируются для больших многопользовательских систем.
    • Создание искусственных ключей часто зависит от платформы: генераторы, столбцы IDENTITY, способ получения нового значения.
  • Планируйте свою систему для больших объемов данных.Определите таблицы с высокими транзакциями и избегайте использования неконтролируемого извлечения всех записей.В этой ситуации я бы также избегал TTable - BDE делает много интересных фоновых вещей с TTable, и поведение может варьироваться в зависимости от драйвера и платформы.

Отказ от ответственности: Все это было очень давно, поэтому некоторые детали могут быть немного схематичными.
Отказ от ответственности2: У меня нет опыта работы с Delphi XE специально.В настоящее время я использую D5 профессионально, а D2009 - в личном качестве.

...