从 Delphi Win32 应用程序连接到 MS SQL、Oracle 或 Firebird,ADO 或 DBX (Database Express) 哪个更好(以及出于什么原因)?

两者都允许您连接到主要数据库。我喜欢 ADO 通过更改连接字符串来完成这一切的方式,而且 ADO 和驱动程序包含在 Windows 中,因此不需要额外部署(看起来,如果我错了,请纠正我)。

DBX 也很灵活,我可以将驱动程序编译到我的应用程序中,不是吗?

如果可能的话,我真的很希望拥有单一来源,并且能够根据客户的 IT 部门/偏好来改变数据库。

但哪个更容易编程、性能更好、使用内存最有效?还有其他什么可以区分它们吗?

谢谢,理查德

有帮助吗?

解决方案

ADO是使用简单,就是在那里,你只需要确保安装correponding客户端驱动程序在客户端。

我发现DBX更灵活并且其内IDE和另一技术,如更好的DataSnap集成。

出于同样的目的不是你,我已经使用DBX与 DevArt 第三方驱动。 如果你买的驱动源,你可以编译与应用程序的驱动程序。

其他提示

在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 等通用数据访问层就没有意义:尽可能直接的连接是有回报的。我的经验告诉我,这些组合效果很好:

希望这能让您了解从 Delphi 应用程序支持多个 DBMS 的可能性和局限性。

——杰罗恩

一般规则:组件的每一层将有可能添加臭虫的附加层。 ADO和DBX是围绕标准的数据库功能组件封装,因此他们都同样强烈。 所以,正确的选择应基于其他因素,如要使用的数据库。如果你想连接到MS-Access或SQL Server时,ADO会是更好的选择,因为它是为这些数据库的更多本土。但是火鸟和Oracle是用于DBX组件多种天然

我个人倾向于使用原始ADO API的,虽然。再说,我也不在我的项目中使用数据的组件。这是RAD少了,我知道了。但是,我经常需要这样的工作方式,因为我一般写与数据库和GUI之间几层客户端/服务器应用程序,从而使事情变得更加复杂。

我的两个美分:DBX是显著更快(在Oracle和SQL),和更显著挑剔和困难的部署

如果性能是一个因素,我会用DBX去。否则,我只是用ADO为了简单起见。

正如其他人所说,DBX可以具有在某些情况下或在特定情况下的原始性能的边缘,但ADO是在世界的应用中非常大的数目的基础所以虽然ADO的性能可能相对较差,清楚地这并不意味着“不可接受的”差。

有关自己,和我曾经参与重大项目处获悉,最大的“问题”与DBX是再好也可能是,它是由一个语言/工具公司提供的关键基础技术。

是任何人都建立在以前的BDE技术的应用会作证时技术已被弃用,不再支持造成的干扰。虽然没有任何技术是从弃用免疫由它的供应商,ADO显然有优势,当涉及到产业的支持超出了技术提供商自己。

有关这个原因,我自己现在一直使用ADO。只是改变了连接字符串并不总是担心然而,从一个数据库类型转换到另一个时的唯一的事情。存储过程的调用语法可以从一个ADO供应商而有所不同,您还是得看你,如果你打算部署针对多个不同的SQL引擎,其中SQL的支持可以从变化到另一个使用SQL语法。

要缓解这些问题,我用我自己的ADO对象模型的封装。这种封装不会尝试变异对象模型到的东西,并不像ADO,它只是暴露了我需要直接在一个更ObjectPascal友好(和“型”安全)的形式使用ADO的那些部分(如枚举类型和集常数和标志等,而不是仅仅分数如果整数常数不是数百个)。

我的封装也需要一些在不同提供者的行为/要求,如在存储过程调用的语法前面提到的差的微小变化的照顾。

我也应该说,类似的另一个海报,我也早就停止使用“数据感知控件”,开辟了这一做法。如果您需要或希望使用数据感知控件,并希望使用ADO,那么你就不能直接使用ADO,而必须找到一些封装暴露ADO通VCL的数据集模型。

ADO是微软世界

DBX是在开始(DELPHI 6),用于跨平台和Kylix的

创建
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top