【问题标题】:Delphi 7 BDE on SQL Server 2012SQL Server 2012 上的 Delphi 7 BDE
【发布时间】:2013-01-10 12:13:42
【问题描述】:

在网上进进出出,找不到合适的信息,我们有一个使用 Delphi 7 和 BDE 连接到 SQL Server 2005 的旧设置。

现在我们计划迁移到 SQL Server 2012,它可能工作的可能性有多大?

【问题讨论】:

  • 对于 BDE,机会减少到新客户端向后兼容旧客户端,或者旧 SQL 客户端可以连接到新服务器的机会。为什么要标记这个 dbExpress?
  • BDE 在十年前被弃用,并在当前版本的 Delphi 中死去(它不再包含在发行版中),这意味着您至少有十年的时间来用更现代的驱动程序,例如 ADO。由于它不适用于 SQL Server 2012,看来您现在必须进行替换(这样做的时间要少得多)才能进行迁移。

标签: sql sql-server-2005 delphi-7 sql-server-2012 bde


【解决方案1】:

如果您使用的是 SQL Links MSSQL 驱动程序,则无法以 SQL Server 2012 为目标。我能够将 SQL 链接与比 SQL Server 2000 更新的任何东西一起使用的唯一方法是将数据库兼容性级别设置为“SQL Server 2000 (80)”。这在 SQL Server 2012 中是不可能的。此版本中可用的最早兼容级别是“SQL Server 2005 (90)”。

SQL 链接会将无效的 SQL 发送到服务器,例如外连接的“*=”语法。为 SQL Server 2005 及更高版本设置的数据库将不接受此语法。

【讨论】:

    【解决方案2】:

    我们一直在使用 Delphi 7 和 SQL Server 2012,通过 Delphi 7 ADO 数据控制组件(例如 TAdoQuery、TAdoCommand)没有出现重大问题。存储过程也可以正常工作,并且可以通过 ADO 命令对象 (TAdoCommand) 调用函数。

    我们使用 SQL Server 2012 附带的 SQL Server Native Client 11.0 ODBC 驱动程序。Delphi 只是将其视为另一个 ODBC 数据接口。从表面上看,它看起来很像在 Delphi 7 中使用 MS Access(通过 ADO 组件和 Access OLE 驱动程序)。 SQL Server 2012 的任何服务包也没有问题。 (抱歉,我不记得 2012 年发布了哪些 SP,但我们没有这些 SP 的差异,我们对此进行了测试)。

    大部分开发都是在 Windows 7 64 位操作系统上完成的,并在相同的 Windows Server 2008 和 2008R2 上执行,都是 64 位。执行 Delphi 编译的可执行文件(显然都是 32 位)不需要特殊设置。

    如果您使用 ODBC“别名”,请务必使用 32 位 ODBC DSN,而不是 64 位 ODBC DSN。 64 位 ODBC 管理器是 64 位 Windows 的控制面板\管理工具中的一个 - 不要在这里使用它。在 Windows 的 SysWOW64 中使用 32 位 ODBC 管理器:C:\Windows\SysWOW64\odbcad32.exe。 64 位 ODBC DSN 位于与 32 位 DSN 不同的空间中。 Delphi 7 是一个 32 位应用程序,无法访问 64 位 DSN(我猜是不同的 API)。

    我们可能还遇到了 SQL 语句中的 cmets 问题。我认为行 cmets ("--") 不起作用,但多行 cmets 起作用 ("/.../")。

    请注意,虽然 BDE 由 Corel 保留(至今仍以 Paradox Runtime 的形式分发;但是,该引擎已冻结,并且在现代 Windows 操作系统中确实存在一些问题),但它不需要访问 SQL Server 数据。我们直接通过 Windows ODBC API 使用 ODBC 别名(我们在 Delphi 中编写了包装器以简化此操作)。但是,您仍然可以将 BDE 用作这些 ODBC DSN 别名的接口。如果您根本不使用别名(并且在源代码中不包含对 DbTables.pas 的任何引用),则根本不需要 BDE。 DbTables.pas 总是在初始化其 INTIALIZATION 块中的全局 Sessions 变量时初始化 BDE。您可以在 DbTables.pas 源代码单元的底部看到这一点。没有这个单元,BDE 就不会被初始化或使用。 (这也意味着您不能使用 TTable 或 TQuery 组件,但它们仅用于 Paradox 数据;像 TAdoTable 之类的 ADO 组件(除非要将整个数据表加载到内存中,否则不要使用它!),TAdoQuery 或 TAdoCommand 完全是独立。

    另一个技巧是使用 MS Access 数据库和链接表来连接 SQL Server 和 Paradox 数据表,如果您仍然需要使用 BDE-native(即 Paradox)表。但有时 Access 和 BDE 不能很好地配合使用。

    我敢肯定,迁移已经完成很久了,但万一其他人也在寻找相同的答案。旧版软件习惯于依赖...

    【讨论】:

      【解决方案3】:

      我们已经成功地将 BDE 与 SQL Server 2008R2 结合使用。无特殊配置。

      编辑:我今天在 SQL Server 2014 上也取得了初步成功。有限的测试,但到目前为止一切都很好!

      格雷格

      【讨论】:

      • 该问题专门询问SQL Server 2012。
      • Ken,确实,但相关信息通常很有帮助。至少对我来说一直如此。
      • 你能提供一下你是怎么做的吗?
      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2011-12-14
      • 2015-05-20
      • 1970-01-01
      • 2017-02-09
      相关资源
      最近更新 更多