我们一直在使用 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 不能很好地配合使用。
我敢肯定,迁移已经完成很久了,但万一其他人也在寻找相同的答案。旧版软件习惯于依赖...