我們正在將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