Delphi连接SQL Server - BDE的“未来证明”的替代品?

4
我们有一个应用程序大小适中(约1MLOC),它是在BDE即将被弃用的时代开始的。现在,我们只使用它来连接SQL Server使用ODBC。尽管其状态已经过时,但它仍然表现出惊人的良好效果,很可能会持续工作15年。但是,没有人知道何时会停止工作。如果停止了,Embarcadero也无能为力。因此,这是一个定时炸弹,我们需要替换它。但用什么替换呢?
Delphi中的ADO组件看起来很有前途。有类似于BDE组件的表格和查询组件,它们不是由一个可能失去兴趣的单人商店制作的第三方组件。我们还期待使用连接字符串而不是笨重的ODBC管理员。
然而,大约一年前,微软宣布OLE DB已经过时,对于本机开发,我们应该使用SQL Server Native Client ODBC驱动程序。
因此,我的问题是,Delphi中的ADO组件是否与OLD DB硬编码?如果在驱动程序列表中选择“SQL Server Native Client”,我们是否不使用OLE DB?
我预计/担心,要使用SQL Server Native Client ODBC驱动程序,我们必须像现在一样在ODBC-Adminstrator中设置数据源。或者可以使用连接字符串连接ODBC吗?
还有哪些Delphi组件可以连接到ODBC而不使用OLE DB? 是的,我知道dbExpress,但看起来要从BDE转换到它需要花费我们数年时间。
谢谢, LandShark

只是为了增加列表,我们列出了从Delphi 5到XE3的开源组件。您可以通过OleDB或ODBC访问SQL Server(参见http://blog.synopse.info/post/2011/06/27/SynOleDB%3A-OpenSource-Unit-for-direct-access-to-any-database-via-OleDB或http://blog.synopse.info/post/2012/02/29/Microsoft-states%3A-OleDB-out-enjoy-ODBC%21)。其中后者是未来的方向,因为Microsoft已正式停用OleDB, 所以ADO也不再支持。此外,我们还提供了TQuery替代工具,它比BDE版本快得多,并且在每种方法上都兼容。但是,项目范围更注重代码导向,而非组件/RAD。 - Arnaud Bouchez
3个回答

3
我们5年前也有类似的迁移需求,进行了许多研究和测试。从BDE最简单的迁移路径是使用Devart的SDAC(http://www.devart.com/sdac/)。Devart拥有一个BDE替换工具,可浏览您的代码并用等效的SDAC组件替换BDE组件。这将使您完成大约90%的工作,然后您需要手动进行一些更改以使所有内容正常运行(例如,如果您使用fetchall,则必须注释掉所有fetchall代码-但您将看到一个模式并可以通过搜索和替换来修复剩余的代码)。SDAC组件的性能非常好,它们支持所有SQL Server调用,并且您可以在Internet上使用加密连接。该组件支持本地SQL或OLEDB连接到SQL Server。它们还可以使用缓存更新处于分离模式中。另一个选择是使用UniDac,如果您计划除了SQL Server之外还支持其他数据库平台,那么它与SDAC类似-非常类似BDE,但没有开销。

UniDac - 它就像是 SDAC 一样。我认为 SDAC 只是 UniDAC 的一个子集,不是吗? - Arioch 'The

2

1) "本地连接"并不意味着使用ODBC或OLE DB,也不是BDE和DBX。本地连接指的是使用专门的库,只能连接到MS SQL,并且不使用任何标准的服务器无关管道。相反,BDE、DBX、ADO和ODBC是通用库,提供连接到任何您安装插件的服务器。

一般来说,本地库可以为您提供更接近服务器的集成,并使用一些通用库可能会缺少的功能(如firebird/interbase服务器中的事件)。它们还可以更快地工作,因为不需要将数据流和命令转码为公共API标准的管道。

另一方面,公共接口可以帮助您更轻松地切换服务器和更轻松地开发与服务器无关的应用程序。

2) 你为什么认为BDE -> DBX的转换比BDE -> ODBC或BDE -> ADO或BDE -> 其他更难?转换就是转换。ADO也有其自身的限制和陷阱,就像DBX和任何其他库一样。

3) DBX有MS SQL插件。DevArt提供了他们的DBX插件套件,可能比Delphi DBX MS SQL支持更好。或者可能不是。

4) 除此之外,还有一些众所周知的服务器无关库

5) 您可以在任何组件收集器网站上找到许多直接的ODBC连接,例如http://www.torry.net/pages.php?id=570

6) 对于本地MS SQL连接,也是如此。http://www.torry.net/pages.php?id=1513

然而,评估这些选择并做出决策需要您拥有内部上下文知识。


  1. 是的,无论如何这将是一项巨大的任务,但通过使用 ADO 和 dbExpress 组件进行试验,似乎使用 ADO 更容易。ADO 组件的设计类似于 BDE 组件。而 dbExpress 则不是。
- LandShark
  1. 股票dbExpress驱动程序不使用ole db吗?
- LandShark
  1. 由于OLE DB设计师大多是Delphi设计师 - 这是可以预料的 :-) 好吧,类助手可以修复一些SQL参数方法的缺失等问题。/// 3) 不知道。尝试卸载MDAC并运行它们。
- Arioch 'The
我现在看到DevArt SDAC可以使用OLE DB或SQL Server Native Client,所以我们可能有一个不使用OLE DB的解决方案。 - LandShark
1
AnyDAC too - http://www.da-soft.com/anydac/docu/Connect_to_Microsoft_SQL_Server.html /// 或许您可以尝试使用UniDAc和AniDAC工具将一些较小的应用程序进行转换,并查看哪个需要更多:http://www.da-soft.com/anydac/docu/BDE_application_migration.html - Arioch 'The
1
股票DBX驱动程序可能使用OLE DB:有人告诉我它只能在CoInititialize调用后的线程中工作。 - Arioch 'The

0

我们几年前也遇到了同样的问题。我想如果有完美的解决方案,那么就不会有那么多的替代方案了。

无论如何,我们从BDE + ODBC转换到了ADO + SQLOLEDB。主要原因是它非常可靠,易于转换,不需要在客户计算机上安装任何额外的东西(例如BDE),而且比其他与Delphi一起提供的工具更快,包括DBX(使用DisableControls时)。

另外,作为一个旁注,如果您想使用ODBC配置连接,可以使用ODBC管理器配置值,但从注册表中读取并直接连接而不使用ODBC。这帮助我们完成了转换。


好的,但是你现在使用的OLE DB已经被弃用,并且仅支持“仅有”的七年时间。它可能会比Microsoft支持的时间更长,但是很有可能你将无法连接到下一个版本的SQL Server。除非可以在没有OLE DB的情况下使用Delphi ADO组件。这是可能的,就像这个网站(http://weblogs.sqlteam.com/dang/archive/2011/09/04/rip-ole-db.aspx)上所说的那样:“使用带有Server Native Client驱动程序的ODBC。ODBC调用级别接口可以直接使用或通过更高级别的ADO API使用”。这才是我的核心问题。 - LandShark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接