2016-03-02 28 views
0

這是一個問題,這可能會導致一些經驗豐富的開發人員的炮火倒敘在FOXBASE洞挖古代設備...德爾福5需要延長ADODB_TLB接口

我們的網頁代碼的時效位,我們需要做一些低級別的數據庫處理。我們已經編寫了一個COM庫來完成其他處理,比如加密和用戶身份驗證,並且我們已經確定了最好的方法是創建一個擴展現有ADODB_TLB接口的COM接口,並添加一些處理。

如何當一切都說過和做過它將被使用時,要更換看起來像這樣的一些現有呼叫:

Set CMD = Server.CreateObject("ADODB.Command") 
    CMD.ActiveConnection = DB 
    CMD.CommandType = adCmdStoredProc 
    CMD.CommandText = "Country_Code_Get" 
    CMD.Parameters.Append CMD.CreateParameter(, adInteger, adParamInput, 4, NULL)  
    Set RS = CMD.Execute() 

新的代碼,看起來更像是這樣的:

Set CMD = Server.CreateObject("MyADODB.Command") 
    CMD.ActiveConnection = DB 
    CMD.CommandType = adCmdStoredProc 
    CMD.CommandText = "Country_Code_Get" 
    CMD.SpecialHandling = "Extra Stuff" 
    CMD.Parameters.Append CMD.CreateParameter(, adInteger, adParamInput, 4, NULL)  
    Set RS = CMD.Execute() 

我們的目標是擴展現有的ADODB庫,以便通過對我們的大型代碼庫進行最少量的更改來實現額外的處理。

有沒有一種方法來擴展現有的_Command接口,只添加我們的新參數(當然,也可以重寫必要的Execute函數來適當處理新參數),而無需有效地複製整個_Command接口?

+0

這是相當簡單的修改AdoDB.Pas的執行部分,只要你不改變接口部分。我這樣做是爲了解決一些奇怪的問題。我不知道一個簡單的方法來修改_Command接口,如果你指的是COM接口,但你肯定可以改變它是如何從AdoDB.Pas – MartynA

+0

稱爲請問這包括添加新的屬性的類呢? – Dan

+0

不以AdoDB.Pas的接口中聲明,如果你想設計時支持,因爲類的屬性出現在界面(在最近版本的Delphi您可以添加使用‘類幫手’屬性getter和setter方法的類,但D5爲時20年太早了)。然而,沒有什麼可以阻止你創造它聲明的類的後裔ADODB並添加你想要的任何性質的單位 - 你需要了解哪些使用它們的方法是否重寫在ADODB,當然。 – MartynA

回答

0

如果我猜測正確的話,在你的問題的代碼片段可能會使用後期綁定的命令對象。這意味着它可能會通過IDispatch接口的方法。有來自ComObj.pas單元一看TAutoObject,它實現IDispatch和地圖到從德爾福類型系統類型的信息。所以在這種情況下,擴展爲 ADO,我不會打擾ADO_TLB或類型庫GUI(除了也許可能是文件>新建>其他...以及從ActiveX選項卡:「自動化對象」)和集中精力創建一個替代IDispatch實現,將任何您不會覆蓋的調用修補到ADO.Command實例的實例實例的IDispatch指針。 (還有更多關於here