用ADOQuery Delphi XE替换TwwQuery

时间:2014-01-06 10:07:53

标签: sql-server delphi delphi-7 delphi-xe

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

4 个答案:

答案 0 :(得分:2)

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

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

(还记得检查DBTables单元的uses子句以及删除wwXXX条目 - 如果你不删除对它的所有引用我很确定仍然需要BDE)

答案 1 :(得分:1)

reFind.exe,使用Perl RegEx表达式的搜索和替换实用程序

http://docwiki.embarcadero.com/RADStudio/XE5/en/ReFind.exe,_the_Search_and_Replace_Utility_Using_Perl_RegEx_Expressions

我认为一定是:

refind *.pas *.dfm /I /W "/P:TwwQuery" /R:TADOQuery

答案 2 :(得分:0)

我不知道现有的脚本或库会完全按照您的意愿行事,但它不应该难以自己编写。基本理论是这样的:

  • 以文本形式加载DFM和PAS源文件的内容。
  • 扫描查找TwwQuery的实例。
  • 用TADOQuery替换组件的定义。
  • 使用ADO等效项更新每个查询的属性(我相信 虽然它们非常相似。
  • 保存文件。

显然,在完全正确的情况下需要进行一些试验和错误但是一旦完成它就应该适用于所有应用程序。

答案 3 :(得分:0)

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

当我遇到你现在遇到的同样问题时(我要用TQuery替换TwwQueryTADOQuery)我决定停止依赖 TxxxQuery 并依赖于TClientDataset(CDS)。我发现CDS是一个更好的数据集,它有一些你不会在其他数据集中找到的功能,例如聚合字段。使用CDS,您可以按需加载新记录,而无需再次选择所有行,并且TDatasetField作为处理主 - 详细信息关系的另一种方式。对我来说绰绰有余。

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

所以,我计划将我的所有进化策略从TQueryTwwQuery移到TClientDataset作为第一步,然后将TQueryTwwQuery替换为TADOQuery作为第二步。

我没有使用任何助手来重构代码。这确实是很多工作,但它必须只发生一次。

现在我已经用能够运行查询的持久性服务替换了中间件数据集(TQueryTwwQueryTADOQuery等)返回带有找到记录的OleVariant。我所要做的就是将此OleVariant分配给TClientDataset.Data属性并完成!

除了CDS之外,不再需要在应用程序代码中依赖任何类型的数据集了。