使用从Delphi Win32应用程序--ADO或DBX(Database Express)连接到MS SQL,Oracle或Firebird的更好(以及由于什么原因)?
两者都允许您连接到主要数据库。我喜欢ADO通过更改连接字符串以及ADO和驱动程序包含在Windows中的事实,因此无需额外部署(看起来,如果我错了,请纠正我)。
DBX也很灵活,我可以将驱动程序编译到我的应用程序中,不是吗?
如果可能的话,我真的很想拥有一个单一来源,能够根据客户的IT部门/偏好来改变数据库。
但哪个更容易编程,性能更好,最有效地使用内存?还有其他什么可以区分它们吗?
谢谢,理查德
答案 0 :(得分:7)
ADO很简单易用,你必须确保在客户端安装相应的客户端驱动程序。
我发现DBX更灵活,它更好地集成在IDE和DataSnap等其他技术中。
出于与您相同的目的,我使用了来自DevArt的第三方驱动程序的DBX。 如果您购买了驱动程序源,可以使用您的应用程序编译驱动程序。
答案 1 :(得分:5)
在Delphi的开头,人们称赞Delphi中的多DBMS支持。每个人都喜欢BDE(因为这是唯一的方法)。
但是在过去十年中看客户的时候,我看到他们的应用程序中多DBMS支持的稳定下降。
从一个应用程序支持多个DBMS的成本很高。
不仅因为您必须了解每个DBMS,还因为每个DBMS都有自己的一组特性,您必须在数据访问层中进行调整。这些不仅包括语法和基础数据类型的差异,还包括优化策略。
此外,某些DBMS可以更好地使用ADO,更好的是使用直接连接(例如一起跳过Oracle客户端)。
最后,使用多个DBMS系统测试软件的所有组合是非常密集的。
我参与了一些项目,我们不得不改变DBMS后端和/或数据访问技术(从BDE到DBX,或从DBX到直接连接)。改变后端总是比改变数据访问技术更痛苦。多层方法使它们更容易,但增加了自由度,从而增加了测试工作。
我确实看到支持多DBMS的一些产品属于垂直市场应用,最终客户已经拥有自己的DBMS基础架构,应用程序需要适应这种需求。例如,在荷兰政府领域,Oracle非常强大,但SQL Server也建立了相当多的用户群。
因此,您需要考虑您希望支持哪些DBMS组合,不仅在功能方面,而且在成本方面。
如果你坚持使用一个DBMS,那么选择像BDE,DBX或ADO这样的通用数据访问层是没有意义的:它会尽可能直接地建立连接。 我的经验告诉我,这些组合确实运作良好:
带有ADO
的Microsoft SQL Server希望这能让您深入了解从Delphi应用程序支持多个DBMS的可能性和局限性。
- 的Jeroen
答案 2 :(得分:4)
一般规则:每个组件层都可能添加一层额外的错误。 ADO和DBX都是围绕标准数据库功能的组件包装器,因此它们同样强大。 因此,正确的选择应该基于其他因素,例如您要使用的数据库。如果要连接到MS-Access或SQL Server,ADO将是更好的选择,因为它更适合这些数据库。但Firebird和Oracle更适合DBX组件。
但我个人倾向于使用原始ADO API。然后,我不在我的项目中使用数据感知组件。我知道,这不是RAD。但我经常需要这样工作,因为我通常在数据库和GUI之间编写多层客户/服务器应用程序,从而使事情变得更复杂。
答案 3 :(得分:4)
我的两分钱:DBX明显更快(在oracle和sql上都是如此),而且更加挑剔和更难部署。
如果表现是一个因素,我会选择DBX。否则,我只是为了简单起见而使用ADO。
答案 4 :(得分:2)
正如其他人所说,DBX在某些情况下或在特定情况下可能具有原始性能优势,但ADO是世界上大量应用程序的基础,因此尽管ADO的性能可能相对较差,但显然这并不意味着“不可接受”的穷人。
对于我自己,并且通过我所参与的重大项目,DBX最大的“问题”是,无论它有多好,它都是语言/工具公司提供的关键基础设施技术。
任何使用以前的BDE技术构建应用程序的人都将证明该技术被弃用且不再受支持时所造成的中断。虽然没有技术可以免受其提供商的弃用影响,但ADO在技术提供商本身以外的行业支持方面显然具有优势。
因此我自己现在总是使用ADO。但是,从一种数据库类型更改为另一种数据库类型时,仅更改连接字符串并不总是令人担心。存储过程调用语法可能因ADO提供程序而异,如果您打算针对多个不同的SQL引擎进行部署,则仍需要查看您使用的SQL语法,其中SQL支持可能会因此而异。
为了缓解这些问题,我使用自己的ADO对象模型封装。这种封装不会试图将对象模型变为不像ADO的东西,它只是暴露了我需要直接使用的更多ObjectPascal友好(和“类型”安全)形式的ADO部分(例如枚举类型和设置常量和标志等,而不仅仅是得分,如果不是数百个整数常量)。
我的封装还处理了不同提供程序行为/要求中的一些细微变化,例如前面提到的存储过程调用语法的差异。
我还应该说,与另一张海报类似,我很久以前停止使用“数据感知控件”,这开启了这种方法。如果您需要或希望使用数据感知控件并希望使用ADO,那么您不能直接使用ADO,而必须找到一些通过VCL数据集模型公开ADO的封装。
答案 5 :(得分:0)
ADO是微软世界
DBX是在开始时创建的(Delphi 6),用于跨平台和Kylix