我们正在将Delphi 7应用程序迁移到Delphi XE。我们正在用ADO替换BDE数据库组件。在Delphi 7应用程序中,我们大量使用了TwwQuery(Info Power)组件。虽然TwwQuery仅被BDE支持,但我们必须用ADOQuery替换TwwQuery。我们有大约20多个应用程序进行迁移并转到所有TwwQueries并手动替换它们非常耗时。是否有任何代码或脚本可以将所有TwwQuery替换为ADO查询?用ADOQuery替换TwwQuery Delphi XE
回答
我不知道现有的脚本或库会完全符合你的要求,但它也不应该是也是难以自己写。基本原理是这样的:
- 将DFM和PAS源文件的内容加载为文本。
- 扫描查找TwwQuery的实例。
- 用TADOQuery替换组件的定义。
- 更新每个查询的属性与ADO等价物(我相信 它们虽然相当相似)。
- 保存文件。
显然有一些试验和错误涉及到完全正确,但一旦你完成它应该适用于所有的应用程序。
GExperts有一个向导来执行此操作。您可以右键单击任何TwwQuery,并选择用TADOQuery替换它。对于它在应用程序中找到的所有实例以及选定的实例,都可以选择执行此操作。
SQL属性应该映射到没有问题 - 显然你需要找到某种方法将Connection属性设置为ADO连接。或者,您可以在运行时通过编写一些共享的初始化代码来添加到每个表单中,这些代码循环遍历组件查找TADOQuery并在找到TADOQuery时设置连接属性。
(请记住,也检查了DBTables单元的使用条款,以及去除wwXXX项 - 如果不删除所有引用我敢肯定的BDE仍将需要)
使用Perl的正则表达式表达式
reFind.exe,搜索和替换工具,我认为它必须是:
refind *.pas *.dfm /I /W "/P:TwwQuery" /R:TADOQuery
user3164938:你试过ReFind.exe吗? – Ravaut123
我知道这不是你问的,但我会和你分享我的经验。数据库应用程序中遗留代码的最大问题是它的主要逻辑与数据集相关。
当我面对你现在要做的同样的问题(我会通过TADOQuery
更换TQuery
和TwwQuery
)我决定停止我的TxxxQuery的依赖,成为依赖于TClientDataset
(CDS)。我发现CDS是一个更好的数据集,它具有在其他数据集中找不到的一些功能,例如聚合字段。借助CDS,您可以根据需要加载新记录,而无需再次选择所有行,并且可以使用TDatasetField
作为处理主从关系的另一种方式。对我来说绰绰有余。
此外,特定的数据库访问数据集留下的TDatasetProvider
组件。你的主要逻辑将取决于CDS只,而不是TADOQuery
,TODACQuery
或任何其他TxxxQuery,你可能需要在未来。那是我最后一次担心这个问题。如果我必须替换我的数据集,它不会再影响关键的业务逻辑,只有持久性逻辑(我转移到另一个DataModule)!
所以,我刨我所有的进化策略从TQuery
和TwwQuery
移动到TClientDataset
作为第一个步骤,然后通过TADOQuery
取代TQuery
和TwwQuery
作为第二步。
我didn't使用任何助手重构代码。这确实是很多工作,但它只能一劳永逸地发生。
现在我已经通过一个持久性服务,它能够运行一个查询并返回与发现记录的OleVariant
取代中间件数据集(TQuery
,TwwQuery
,TADOQuery
等)。所有我需要做的就是这个OleVariant
分配给TClientDataset.Data
财产和it's完成了!在application's代码中的任何类型的数据集的
没有更多的依赖,除了CDS!
- 1. ADO中的batchMove的替换Delphi XE
- 2. Delphi,ADOQuery,ClientDataSet
- 3. BDE与Delphi XE
- 4. Delphi XE - 更快的替代System.Pos功能
- 5. Firebird和Delphi XE
- 6. Delphi XE图标
- 7. Delphi XE Jedi 3.45
- 8. Delphi XE + SOAP + SSL
- 9. Delphi使用ClientDataSet的ADOQuery结果串联
- 10. Delphi XE和Winrunner(QTP)
- 11. Jedi Library和Delphi XE
- 12. Delphi XE中的窗体/单元切换?
- 13. 问题在Delphi XE
- 14. Delphi AdoQuery SQL添加或文本
- 15. Delphi-将参数传递给ADOquery
- 16. POPCNT在Delphi XE/XE2 64
- 17. 从Delphi XE连接TFS 2010
- 18. Rad Studio Delphi XE和PostgreSQL
- 19. Delphi 2010中的TWordApplication-XE
- 20. delphi XE 5程序单元
- 21. Delphi XE找不到BPL
- 22. delphi xe文件加密
- 23. adoQuery过滤器
- 24. 通过SQL语句在Delphi中删除数据库和adoquery
- 25. 使用delphi xe将iso_8859_1字符串转换为win1253
- 26. 禁用Delphi XE自动更新检查
- 27. Delphi XE中的主题应用程序
- 28. 在Delphi XE环境中使用Delphi5
- 29. Delphi XE不会正确使用WebService
- 30. Delphi XE 5试用 - ORA-12154问题
另一个问题照顾的参数。 BDE数据集和ADO数据集有不同的方式来处理参数。对于初学者来说,TwwQuery有一个名为Params的属性,而TADODataset有一个名为Parameters的属性。 – AlexSC