2014-01-06 90 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!