2014-01-06 65 views
0

我们正在将Delphi 7应用程序迁移到Delphi XE。我们正在用ADO替换BDE数据库组件。在Delphi 7应用程序中,我们大量使用了TwwQuery(Info Power)组件。虽然TwwQuery仅被BDE支持,但我们必须用ADOQuery替换TwwQuery。我们有大约20多个应用程序进行迁移并转到所有TwwQueries并手动替换它们非常耗时。是否有任何代码或脚本可以将所有TwwQuery替换为ADO查询?用ADOQuery替换TwwQuery Delphi XE

回答

0

我不知道现有的脚本或库会完全符合你的要求,但它也不应该是也是难以自己写。基本原理是这样的:

  • 将DFM和PAS源文件的内容加载为文本。
  • 扫描查找TwwQuery的实例。
  • 用TADOQuery替换组件的定义。
  • 更新每个查询的属性与ADO等价物(我相信 它们虽然相当相似)。
  • 保存文件。

显然有一些试验和错误涉及到完全正确,但一旦你完成它应该适用于所有的应用程序。

2

GExperts有一个向导来执行此操作。您可以右键单击任何TwwQuery,并选择用TADOQuery替换它。对于它在应用程序中找到的所有实例以及选定的实例,都可以选择执行此操作。

SQL属性应该映射到没有问题 - 显然你需要找到某种方法将Connection属性设置为ADO连接。或者,您可以在运行时通过编写一些共享的初始化代码来添加到每个表单中,这些代码循环遍历组件查找TADOQuery并在找到TADOQuery时设置连接属性。

(请记住,也检查了DBTables单元的使用条款,以及去除wwXXX项 - 如果不删除所有引用我敢肯定的BDE仍将需要)

+2

另一个问题照顾的参数。 BDE数据集和ADO数据集有不同的方式来处理参数。对于初学者来说,TwwQuery有一个名为Params的属性,而TADODataset有一个名为Parameters的属性。 – AlexSC

0

我知道这不是你问的,但我会和你分享我的经验。数据库应用程序中遗留代码的最大问题是它的主要逻辑与数据集相关。

当我面对你现在要做的同样的问题(我会通过TADOQuery更换TQueryTwwQuery)我决定停止我的TxxxQuery的依赖,成为依赖于TClientDataset(CDS)。我发现CDS是一个更好的数据集,它具有在其他数据集中找不到的一些功能,例如聚合字段。借助CDS,您可以根据需要加载新记录,而无需再次选择所有行,并且可以使用TDatasetField作为处理主从关系的另一种方式。对我来说绰绰有余。

此外,特定的数据库访问数据集留下的TDatasetProvider组件。你的主要逻辑将取决于CDS只,而不是TADOQueryTODACQuery或任何其他TxxxQuery,你可能需要在未来。那是我最后一次担心这个问题。如果我必须替换我的数据集,它不会再影响关键的业务逻辑,只有持久性逻辑(我转移到另一个DataModule)!

所以,我刨我所有的进化策略从TQueryTwwQuery移动到TClientDataset作为第一个步骤,然后通过TADOQuery取代TQueryTwwQuery作为第二步。

我didn't使用任何助手重构代码。这确实是很多工作,但它只能一劳永逸地发生。

现在我已经通过一个持久性服务,它能够运行一个查询并返回与发现记录的OleVariant取代中间件数据集(TQueryTwwQueryTADOQuery等)。所有我需要做的就是这个OleVariant分配给TClientDataset.Data财产和it's完成了!在application's代码中的任何类型的数据集的

没有更多的依赖,除了CDS!