【问题标题】:How to access databases from within Delphi XE Professional IDE?如何从 Delphi XE Professional IDE 中访问数据库?
【发布时间】:2011-04-23 16:30:50
【问题描述】:

我无法从 Delphi XE Professional 中以任何方式访问任何数据库。我访问数据库的意思是:

  1. 让实时数据库通过 对象检查器中的组件, 设置连接属性时 为真
  2. 使用数据资源管理器创建 并探索数据库连接

编辑:
排序!!

核心问题是与数据库的通信,特别是 IDE 生成的通信以及使用驱动程序构建的任何代码都存在问题。

混淆和掩盖子问题是:

  1. DLL 丢失或放错位置。
  2. Data Explorer 不完全支持 dbExpress 驱动程序。
  3. Chee-Yang Chau 在编写 dbxFirebird 驱动程序时发现了 2009 IDE 代码中的一个错误,该错误限制了驱动程序与 Delphi 的静态链接。不知道这个错误是否会延伸到 2010 或 XE。
  4. 使用对象检查器时,很容易导致 IDE 将更改的连接参数恢复为其默认值。
  5. 某些驱动程序的默认值不正确(例如,假设客户端 dll 始终为 gdb32.dll,无论数据库是 Interbase 还是 Firebird)。
  6. 安装两个版本的 Interbase 导致数据库通信出现一些冲突 - 工具生成的服务器名称很奇怪;数据库的视图取决于所使用的 Interbase 工具的安装。
  7. 可用的文档日期不定;指不同的版本;因此往往显得矛盾。

结束编辑:

尝试的方法:

  1. 多个数据库
  2. 多个不同的驱动程序/组件
  3. 通过其他外部工具(例如 IBSQL 和 Flame Robin)访问数据库。
  4. 就 SO 提出问题(herehere)。
  5. 在 Firebird、Embarcardo 和 Flame Robin 的支持论坛上提出问题。

环境:

  1. 操作系统:Windows 7 Ultimate 64 位:
  2. Delphi Embarcadero® RAD Studio XE 专业版 15.0.3953.35171
  3. 数据库:W1-V2.5.0.26074 Firebird 2.5(64 位)
  4. 连接技术:dbExpress

【问题讨论】:

  • 您不需要企业或架构师或其他名称吗?
  • @Chris 我已经说过了,但你为什么不购买 devart 驱动程序呢?你花在这上面的时间肯定已经超过了成本很多倍。
  • 您必须使用 32 位 fbclient.dll,因为 Delphi IDE 是 32 位的(对于 32 位应用程序,您必须使用 32 位的 fbclient.dll,即使服务器是 64 位)
  • 我知道你不想花更多的钱,但到达终点的最快途径是支付升级到 Enterprise 或 Architect 的费用。否则,有些人正在通过 DbGo (ADO) 将 Delphi XE Pro 与 Interbase 和 Firebird 一起使用。
  • @Warren - 就 Enterprise 或 Architect 版本而言,并不是我不想花更多的钱 - 我买不起,即使目前提供的升级.如果我目前的调查结果成功,我将购买 Devart 驱动程序 - 这看起来很有希望。

标签: database delphi configuration firebird delphi-xe


【解决方案1】:

Delphi Professional 不支持 Firebird 与 Delphi 附带的本机 dbExpress 驱动程序。您需要 Delphi 的 Enterprise 或 Architect 版本才能使本机 firebird dbExpress 驱动程序正常工作。

我有 Delphi 2010 Professional。我不想在 E 或 A 版本上花费额外的钱,并且我未能阅读功能矩阵以发现 Firebird dbExpress 驱动程序不适用于 Pro 版本。

我发现了一些非常好的视频,展示了如何使用 Delphi 连接到 Firebird。然而,当我试图跟随我的专业版本时,没有任何效果。

让我感到羞耻,更让 Embarcadero 感到羞耻,因为我用粗体大字吹捧 Delphi 支持 Firebird,但没有提到您需要 Enterprise 或 Architect 版本,除非是小字体。

【讨论】:

    【解决方案2】:

    我现在可以编写代码来在 IDE 中访问 Firebird。我可以(有限但足够)访问 IDE 中的驱动程序。具体来说,驱动程序出现在 Data Explorer 中,可用于为 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 论坛之一上由Bob Swart 提供的解决方法是:

    诀窍是选择一个 ConnectionName 值,然后 为 Driver 属性赋值 以及所有其他属性,例如 LibraryName、VendorLib 和 GetDriverFunc。

    然后,根据需要进行更改 驱动程序的子属性 属性,最后清除名称 Driver 属性。

    这会将您的所有更改保留在 参数列表(您也可以 如果您愿意,可以手动编辑)。

    注意:保留 ConnectionName 集 - 如果你清除那个,参数 将再次被清除。

    现在您可以编译您的应用程序了 并在不需要的情况下部署它 dbxdrivers.exe 或 dbxconnections.ini (但您需要部署 DLL 在 LibraryName 中指定和 VendorLib,当然)。

    还要确保将 LoginPrompt 设置为 假并离开 LoadParamsOnConnect 也设置为 False。

    【讨论】:

      【解决方案3】:

      赏金奖

      我奖励了这个答案,因为它让我远离了对 IDE、它的安装和配置的调查,以及对数据库连接的调查。

      结束

      关于 Firebird 64 位的 DK - - 没有经验。但是我一直在使用 dbExpress 时遇到很多麻烦。包含的 IB 组件套件绝不会出现任何问题。但是 IB 版本有很多混淆......

      但 IMO 最好使用 ADO ('DBGo') 组件为您服务,而不是使用任何专有的 IB 或 Delphi 特定驱动程序。您需要的是 IB 的 ADO 提供程序,可用@:

      http://www.ibprovider.com/eng/ - 正如其他人所说,避免使用 localhost,使用 127.0.0.1,或者更好的是,确定工作站的真实 IP 地址(ping 机器名......)你确定你不'没有可能涉及的某种防火墙或信任保护?

      您还需要确保您的 IB 连接配置正确 - 本地或 TCP,不,不要在您的姓名、密码等中使用引号。您收到的错误消息似乎表明您正在尝试通过 TCP 连接,但配置不正确。在它工作的时间和它不工作的时间之间发生了什么?关闭德尔福?重启机器?请解释一下....

      不需要“特殊权限” - 您只需确保正确安装和配置数据库服务器和客户端。在功能方面,您可以使用专业版做所有事情 - 只是驱动程序等不包含在包中。

      IMO 再次选择 ADO,您将永远不会回头。

      HTH, MNG

      【讨论】:

      • 问题中哪里提到了 devexpress?
      • @David - 抱歉,我的意思是 dbExpress。
      • @Chris - 使用 ping -4 myMachine 名称。 Win 7 默认使用 IPv6。链接:DK - 我只是右键单击并调用“在新选项卡中打开链接”,结果很好。 IDE 和数据库不需要“知道彼此的存在”——如果您的服务器和客户端连接配置正确,它就会工作。您可以使用软件包附带的 IB 工具访问数据库吗?从那里开始-
      • @Chris - 顺便说一句,如果我没记错的话,您无法使用专业版中包含的 IB 驱动程序和/或专业版中包含的 IB 版本通过 TCP/IP 连接允许本地连接模式,而不是 TCP/IP。如果是这样,您可以连接到为“企业”版本等保留的远程服务器。ADO 将在任何地方看到服务器,但如果您的 IB 版本不支持远程连接,那将无济于事。不确定 DevArt 是做什么的。 HTH MNG
      • @Chris - 您是在本地访问数据库还是通过网络访问数据库?这些工具使用什么连接模式?如果我没记错的话,IB 默认有 2 种连接模式“本地”和“TCP/IP”。
      【解决方案4】:

      您是否通过 Borland 数据库引擎 (BDE) 和相关组件尝试过 Paradox:TTableTQueryTStoredProcTDatabaseTSession

      如果我没记错的话,至少可以追溯到 Delphi 3,“专业”和“高级”版本之间的区别因素是“开箱即用”的数据库开发类型。

      • 在 Delphi 1 中,BDE 是进行开箱即用数据库开发的唯一方法。
      • Delphi 2 通过抽象部分数据库组件层次结构允许自定义数据库层。
      • Delphi 3 Professional 为 基于文件的 数据库和 Interbase 提供 BDE 和驱动程序。
      • 一个级别(企业级?*)他们为典型的客户端-服务器数据库访问提供 BDE 驱动程序:SQL Server、Sybase、Interbase、Oracle,...(以及用于 Interbase 的本机驱动程序)
      • 另一个级别(架构师?*)引入了 Midas 的多层开发。不幸的是,Borland 在 Midas 上后退了一步,因为多层组件再次硬连线到 BDE。 (这已在 Delphi 4 中解决。)

      ?* 请注意,我可能对这些版本的确切命名有误。大约在那个时候,我形成了这样一种观点,即 Borland 只是想出“更宏大”的名字,以便为那些并没有真正提供像“大额支票写作-CIO”所相信的那样带来好处的功能收取更多费用——让开发人员处理后果。 (是的,我有迈达斯一世的战痕。)

      除了咆哮,理论是....

      如果有人开始入门级数据库开发,你会购买Delphi ??专业的。通过BDE针对基于文件的数据库Interbase开发您的系统。
      如果您以后需要扩大规模:您将升级 Delphi,购买您选择的 SQL RDBMS,通过 TDatabase 组件切换您的连接,并应用一些必要的调整。
      注意:在Delphi 3 中,可以切换到Native Interbase(个人不推荐)或者使用第三方组件进行非Midas 开发。从 Delphi 4 开始,ADO 和 DevExpress 开始受到更多关注,而如今,BDE 似乎几乎被遗忘了。

      当然理论与实践很少光顾相同的酒吧。但是,通过一些警示性的提示,您应该能够开发出一个重要的基于文件的解决方案,并且可以相对轻松地进行升级。

      • 将您的业务逻辑排除在数据库之外。这很可能是最大和最常遇到的错误。大量系统通常以触发器和存储过程编写,因此更难以维护或迁移系统。
      • 避免使用特定于平台的数据库技术。这应该是不言而喻的,但如果你不明确地注意它们,你就会遇到问题。
        • 与基于文件的数据库系统特别相关,许多支持特殊的锁定机制 - 避免使用它们!在任何情况下,它们都不能很好地扩展到大型多用户系统。
        • 人工密钥的生成通常因平台而异:生成器、IDENTITY 列、获取新值的方式。
      • 为大量数据规划您的系统。识别高事务表,并避免对所有记录进行不受控制的检索。在这种情况下,我也会避免使用TTable - BDE 使用TTable 做了很多有趣背景的事情,并且行为可能因驱动程序和平台而异。

      免责声明:所有这些都是很久以前的事了,所以有些细节可能有点粗略。
      免责声明2:我对Delphi XE没有任何经验。我目前专业使用 D5,个人使用 D2009。

      【讨论】:

      • BDE 已死。即使发现了错误并且需要解决以允许程序运行,Embarcadero 上的任何人都不会接触此代码。这种情况始于 2002 年 (AFAIR),当时发布了 BDE 的最后一个版本(5.2 版)。我没有拒绝您的回答的原因是因为免责声明之前的好建议。虽然我真的不同意第一个建议,如果被当作教条的话。
      • @Fabricio:我很清楚 BDE 宁愿被遗忘。它仍然有从其 DBase 根源继承的错误,这些错误永远不会被修复。它可能不会被移植到 64 位。然而,它仍然与 Delphi 一起分发,并且考虑到 OP 想要一个“低成本或零成本”的解决方案来解决他的问题 - 这需要他目前拥有的东西。顺便说一句:我刚刚测试了几个 BDE 演示:Demos\DelphiWin32\VCLWin32\Db\FishFactDb\MastApp(使用 DbExplorer 而不是数据资源管理器查看数据) - 它适用于 Win7 64 位,只需对设置进行 1 次调整... 一个可以考虑的选项
      • @Fabricio:PS:不要误解我帖子的部分:“入门级......购买Delphi Professional......通过BDE”......我不是说那是如何它应该完成;我是说这就是完成的方式(大约德尔福 3 天)。我的观点是:OP 需要一个解决方案。 不要仅仅因为它使用了过时的技术就取消了可能的解决方案。如果 OP 发现其他答案之一完全解决了他的问题,我会很乐意删除我的 - 因为几乎可以肯定,与依赖 BDE 相比,其他答案会更好地面向未来。
      • 我将取消 BDE 方式,因为由于他有 XE,他可以使用 OLEDb 提供程序(提供了一个链接),甚至可以使用 OleDb over ODBC(我在没有 FB 的情况下使用任何问题)。两者都是比 BDE 更好的解决方案,因为最终他还是会安装 FB 客户端 - 并且 FB 驱动程序支持 dsn-less 连接。
      • 而且FB ODBC是免费的。
      猜你喜欢
      • 1970-01-01
      • 2011-01-28
      • 2014-05-31
      • 2011-01-28
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2019-03-16
      相关资源
      最近更新 更多