如果使用Oracle数据库,Delphi应用程序迁移离开BDE的选项有哪些?

7
我们有一个Delphi 5应用程序连接到一个Oracle 8i数据库。
大多数逻辑都作为存储过程存在于数据库中。目前,我们使用Borland数据库引擎(BDE)通过OCI客户端9.2连接到Oracle。
该应用程序最初是在'96年使用Delphi 1编写的,然后在'99年升级到Delphi 5。
计划升级到XE客户端和Oracle 11g。
有什么选项可以简单地替换BDE并将工作量最小化?
到目前为止,我看到了:
AnyDAC(http://www.da-soft.com/anydac/)
devart ODAC(http://www.devart.com/odac/)
DOA(http://www.allroundautomations.com/)
我不考虑DBExpress,因为我认为它没有我们需要的性能。
重要的事情包括:
易于升级,例如向导或其他工具来转换DBE组件,
良好的性能。
我倾向于devart,因为他们有一个迁移工具(尽管只做了部分工作),并且他们有一个直接TCP选项来连接到数据库而无需客户端。

2
你为什么认为dbExpress不能提供“你所需的性能”?你有任何事实依据,还是只是基于“信念”而没有数据做出决策?如果使用得当,dbExpress确实可以非常高效。而且,任何实现不良的数据访问层都会导致应用程序变慢。 - Warren P
我会选择Devart,我们使用它连接Postgres数据库已经有一年多了,对其性能非常满意。到目前为止,我们唯一的“问题”是缺乏多线程连接。 - user497849
1
好的,现在我相信我把DBExpress和ADO搞混了。使用典型查询,我得到了以下结果:
  • ODAC 2.7秒
  • DBExpress 2.8秒
  • ADO 9.5秒
- Ants
5
dbExpress本身很快。但是dbExpress + DSP + CDS会变慢。不过,要创建双向游标,您需要使用这个组合。除此之外,我们已经将应用程序迁移到AnyDAC上——它工作得很好,又快又稳定! - robmil
2
AnyDAC非常适合从BDE迁移,因为它没有字段映射方面的问题(持久字段等)。您可以将所有字段与BDE完全映射。 - Branko
显示剩余5条评论
2个回答

4
您需要了解BDE和其他架构之间的区别。无论您是否计划转移到dbExpress,您都应该阅读并从这篇白皮书中学习。
dbExpress的架构是有意设计的,旨在解决BDE最低级别以及其上层(TTable/TQuery组件)和架构中的关键缺陷。了解这些更改的原因以及它们解决的BDE中的限制是将应用程序从BDE移出到任何内容的关键因素。
至于您对性能的争议,我喜欢看到人们使用真实数据,而不是基于挥手或形容词(如“快速”)对对象的印象,而没有实验支持。
我个人没有使用过DOA,但如果我不使用dbExpress,那么下一步我将评估它,仅适用于Oracle环境。尽管如此,在没有在自己的环境中测试两者的情况下,我不会认为dbExpress更慢。
更新:最初我提到了Delphi OCI,但事实证明它已经过时,并且不活跃。sourceforge上的DelphiOCI项目仅适用于Delphi 7及之前版本,不适用于unicode delphi,并且仅适用于旧版(Oracle 8i及更早版本)Oracle版本...如果它能在我的环境中工作,我会尝试它。哦,它是GPL。好吧。不是很好。

我想我会建立一个测试。我查看了http://www.devart.com/odac/performance.html以获取一些性能细节。 - Ants
1
还要检查AnyDAC的性能:http://www.da-soft.com/anydac/data-access-performance.html - robmil
Warren,你认为即使自2009年以来似乎没有活跃的开发,DelphiOCI仍然是一个选择吗? - Ants
@Ants:DelphiOCI不支持8i以上的数据库,Delphi 7以上也不支持,并且它是在GPL许可下发布的,这意味着您的应用程序也必须遵循GPL协议发布。 - user160694
谢谢 ldsandon。我没有注意到它没有移植到Unicode。如果我有一天感到无聊,我可能会尝试自己将其向上移植。 - Warren P
@Warren:还要记住“GPL”的含义。许可证不仅仅是附加到项目上的三个字母缩写。它们有着深刻的含义,并且可能导致法律问题。 - user160694

1

无论是ODAC还是DOA(尽管DOA开发最近有点停滞了),都可以让您访问Oracle特性,而通用的DB访问库比如dbExpress通常不允许这样做。如果您的应用程序仅支持Oracle,并且不需要支持其他数据库,那么我认为充分利用Oracle的能力会更好一些。

移植的简易程度取决于您编写BDE组件代码的方式。ODAC有工具来简化BDE移植(虽然我从没用过它们),而据我所知,DOA没有这个功能。

DOA TOracleQuery不是TDataset的子类,因此不能直接替代TQuery,虽然它的开销较小,因此性能很好,而TOracleDaset是唯一类似数据集的组件。

我不建议在没有Oracle客户端的情况下使用ODAC直接TCP连接Oracle,除非有非常特殊的需要,因为这是一种(由Oracle)不受支持的连接方式。如果需要一个较小的(相对而言...)占用空间,我更愿意使用Oracle Instant Client,至少这是一个完全支持的选项,如果需要,您(或您的客户)可以向Oracle请求支持。


1
我使用ODAC已经有几年了,非常满意。我特别喜欢以下三个方面:1)良好的性能,比BDE好得多;2)能够在直接模式下连接而无需安装Oracle客户端软件;3)ODAC支持大多数有用的Oracle功能,而BDE则不支持(例如,直接路径加载、DML数组、XML等)。 - JackD
很有趣,你提到了直接连接,我也在考虑使用它 +1。 - Ants
2
正如已经提到的,需要注意的是,除非ODAC已获得许可并且不仅进行了反向工程,否则Oracle可能不支持直接连接。如果使用不受支持的客户端对给定的数据库版本进行操作,则Oracle支持将不会提供支持。如果这是一个内部应用程序,那就由你决定;如果你正在销售它,请考虑你的客户需求。为Oracle支持支付$$$,然后无法获得支持是不好的。 - user160694

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