程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 有關ADO專題

有關ADO專題

編輯:Delphi
ADO架構圖:                消費者                         (Recordset)       提供者                           消費者        提供者                程應 ↗              ↘    OLEDB   ←→    服務器件   ←→ OLEDB  ←→ 數據庫 keyset Cursor與Dynamic Cursor的執行過程: 1、 數據庫只把記錄的鍵值放入結果數據集中 2、 ADO Cursor Engine存取客戶需要的記錄 3、 OLE Provider再根據結果數據集中的鍵值字段到數據庫中存取相應的數據 4、 根據鍵值找到的數據再放入結果數據集中 事務管理功能: 在使用ADO處理多個數據表的主從架構應用程序中,一定要記得激活事務管理的功能以保護更新的數據。 1、 激活事務管理功能: Procedure ADODataSetBeforePost (Dataset: Dataset); Begin   If (not ADOConnection.InTransaction) then ADOConnection.BeginTrans; End; 2、 在數據成功更新之後確定事務: Procedure ADODataSetAfterPost (Dataset: Dataset); Begin   If (ADOConnection.InTransaction) then ADOConnection.CommitTrans; End; 3、 最後,當更新數據發生錯誤時取消事務,以便正確釋放系統資源: Procedure ADODataSetPostError (Dataset: Dataset; E: EdatabaseError; var Action: TDataAction); Begin   ADOConnection.RollbackTrans;         Action: =daAbort; End; RecordSet 的頁面定位功能:例如 學生表中有1000筆數據,當頁面的大小[PageSize]為10筆數據時,那麼整個數據表就被分割成100個不同的頁面[PageCount]。因此程序員指定的頁面號碼[AbsolutePage]為2,就可以存取到11-20筆的數據。 AbsolutePage:改變當前Page的位置,設定這個屬性可以存取特定Page中的數據。這是個可擦寫的屬性。        PageCount:數據表中所有的記錄數除以PageSize後得到的頁數。這是個只讀屬性。        PageSize:指定沒一個數據頁中包含的數據筆數。這是個可擦寫的屬性。 RecordSet 的UpdateCriteria動態屬性:        AdCriteriaKey:只在SQL命令的Where子句中使用鍵值字段值來尋找原來的記錄。     AdCriteriaAllCols: 只在SQL命令的Where子句中使用所有字段值來尋找原來的記錄。 AdCriteriaUpCols: 在SQL命令的Where子句中使用鍵值字段值以及所有被修改字段值來尋找原來的記錄。這是ADO使用的默認的設定。 AdCriteriaTimeStamp: 在SQL命令的Where子句中使用鍵值字段值以及數據表中字段類型為TimeStamp的字段來尋找原來的記錄。 何謂客戶端Cursor、服務器端Cursor?        ADO的CursorLocation分為兩種:一種是客戶端Cursor,另一種是服務器端Cursor。 那麼何謂CursorLocation呢?簡單的說就是當客戶端應用程序存取了一些數據之後,這些數據存儲在什麼地方?如果這些暫時的數據是存儲在客戶端的ADO驅動程序內存中,由客戶端ADO引擎管理,這就稱為客戶端Cursor。相反,如果這些暫時的數據是存儲在後端的數據庫中,由後端數據庫本身管理,就稱為服務器端Cursor。        結論:使用ClIEnt-Side Cursor,再加上少量多次的存取方式,那麼你的應用系統會非常有效率。 LockType:對於數據存取行為的影響大於對ADO執行效率的影響。其主要影響數據源服務器如何鎖定資源,以及鎖定資源的數量。 ReadOnly:只讀鎖,在使用Locate方法搜尋數據時,使用ReadOnly類型的LockType執行效率最高。 Optimistic:樂觀鎖 BatchOptimistic:批處理鎖 Pessimistic:悲觀鎖        結論:在分布式多層應用系統或Internet/Intranet以及電子商務中,不要使用Pessimistic的LockType,因為這不但沒有意義而且會損失執行效率。更嚴重的後果會造成系統死鎖或發生數據不正確的情形。其次是在調用Locate方法搜尋數據時一般采用ClIEnt-Side Cursor、CacheSize的大小大約在100-1000之間、LockType采用Optimistic或BatchOptimistic。以達到最佳效率。 CacheSize: 1、 增加CacheSize可以增加ADO應用程序的執行效率,因為這可以減少網絡的RoundTrips。 2、 增加CacheSize也增加了啟動數據表的時間,但增加ADO應用程序的執行效率。 3、 當CacheSize接近1000時,ADO應用程序的執行效率在時間/空間比方面似乎是非常好的設定。 ExecuteOptions:        EoAsyncExecute:以異步的方式來執行命令。        EoAsyncFetch:當ADO存取了CacheSize指定的數據後,再以異步的方式存取其他的數據。 EoAsyncFetchNonBlocking:ADO以異步的方式執行命令,而且不會阻礙應用程序的執行。相對效率較高。 EoAsyncNoRecords:執行不會回傳結果數據集的存儲過程或命令。如果被執行的存儲過程或命令回傳的任何數據都會被丟棄。 結論:當ADO執行完Action Query之後,會以事件的方式通知客戶端應用程序。 OnFetchProgress:以異步存取數據時,會定時觸發這個事件處理程序。 OnFetchComplete:當異步存取的數據完全存取完畢後,會觸發這個事件處理程序。 Prepared和存儲過程:        Prepared屬性值會影響數據源在執行這些組件的Action Query時是否先編譯這些SQL命令。如果Prepared屬性值為True時,數據源只要編譯一次即可重復執行這個存儲過程。而不需要在沒一次這些組件提出SQL命令時都編譯一次SQL命令為存儲過程,再執行。 排序數據: ADO數據集.SORT:=’字名  排序,字名 排序……’    (排序有   ASC DESC) ADO處理錯誤ERRORS(稱錯誤集合對象) ……….PostError(..)….   Var Adoerrors:errors; Adoerror:error; Icount:integer; Begin    Adoerrors:=adoconn.errors;    For icount:=0 to adoerrors.count-1 do Begin   Adoerror:=adoerrors.item[icount];   Adoerror.number[source.description,helpfile.sqlstate]; End; End; ….. try…….except    result:=false;    raise;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved