UniDAC使用教程(二):數據更新

下載UniDAC最新版本數據庫

Universal Data Access Components (UniDAC)是一款通用數據庫訪問組件,提供了多個數據庫的直接訪問,如針對Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。咱們將長期的經驗集於這個小組件,提供統一的數據庫鏈接訪問(如oracle、微軟SQL等等)。這意味着您能夠在您的項目之間輕鬆地切換不一樣的數據庫,以及建立跨數據庫應用程序接口。緩存

本篇文章介紹使用UniDAC數據集組件進行數據編輯的經常使用方法。服務器

  • 自動數據更新
  • 數據更新的擴展設置
  • 緩存更新
  • 默認值/表達式
  • 自動增量值生成
  • 及時獲取最新數據

自動數據更新

TUniTable, TUniQuery和TUniStoredProc是容許檢索和編輯數據的UniDAC組件。要編輯每一個組件的數據,請在KeyFields屬性中指定鍵字段名稱。若是KeyFields爲空字符串,則Oracle、PostgreSQL、Interbase、SQLite和全部基於ODBC的提供程序都將嘗試從發送附加查詢的服務器請求有關主鍵的信息(這可能會對性能產生負面影響)。SQL Server和MySQL提供程序將使用服務器發送的元信息和數據。SQL Server提供程序具備UniqueRecords選項,該選項容許在查詢中省略主鍵字段時自動從表中請求主鍵字段。oracle

若是要打開的數據集沒有惟一標識記錄的字段,則能夠經過服務器的方式經過Oracle、Firebird 2.0、PostgreSQL和SQLite服務器來解決這個問題。對於Oracle和SQLite服務器,您應該將RowID列添加到查詢中。帶Firebird 2.0 - DB_KEY。若是您的表是使用OID建立的,那麼可使用PostgreSQL服務器OID列做爲關鍵字字段。編輯器

數據更新的擴展設置

對於具備來自多個表的數據的數據集,默認狀況下只有一個表是可更新的。您應該在UpdatingTable屬性中指定要更新的表名,不然屬於字段列表中第一個字段的表將是可更新的。若是SetFieldsReadOnly選項設置爲True(默認狀況下),則自動生成的更新SQL語句中未使用的字段將標記爲只讀。對於複雜查詢(使用多個表、同義詞、dblinks、聚合字段的語句),咱們建議使用Oracle、PostgreSQL和全部基於ODBC的提供程序啓用 ExtendedFieldsInfo 選項。性能

若是插入/發佈、更新或刷新記錄操做影響了多個記錄,UniDAC將引起異常。要禁止此類異常,應將StrictUpdate選項設置爲False。ui

爲了更靈活地控制數據修改,能夠填充update-SQL語句。它們由SQLInsert、SQLUpdate、SQLDelete和SQLRefresh 屬性表示,並在Insert/Post、Edit/Post、Delete和Refresh操做中自動執行。在設計時,能夠在組件編輯器的「SQL Generator」選項卡上生成默認的更新SQL語句。能夠根據須要修改生成的語句。可是,若是爲每一個記錄動態生成更新查詢,則只有更改後的值纔會發送到服務器。spa

對於某些特定狀況,此功能不夠。它能夠經過TUniUpdateSQL組件進行擴展。TUniUpdateSQL容許爲每一個更新操做關聯一個單獨的TUniSQL/TUniQuery/TUniStoredProc組件。設計

緩存更新

UniDAC容許在客戶端緩存更新(所謂的「Cashed Updates」),而後批量發佈全部更新。這意味着在調用Post或Delete以後,更改不會當即反映在服務器上。調用ApplyUpdates方法後,全部緩存的更改都將發佈到服務器。UpdateBatchSize選項容許設置要同時發佈的更改數。對象

默認值/表達式

若是已經爲數據庫表中的列定義了默認值或表達式,則能夠設置UniDAC,以便它從服務器請求這些表達式。這些表達式將分配給TField對象的DefaultExpression 屬性。若是已填充默認表達式值,則將替換這些值。此行爲由默認值選項控制,默認狀況下禁用該選項。

自動增量值生成

編輯數據集時,一般不方便手動填充關鍵字字段值,而是自動生成它們。有三種方法能夠作到。

第一種方法,最有用的方法,是使用服務器方法自動生成關鍵字字段值。

SQL Server、MySQL和SQLite容許在表中定義自動增量列。這不須要在客戶機上進行額外的處理。對於SAP Sybase ASE、Oracle、PostgreSQL和Interbase提供程序,須要指定特定於keysequence(Interbase的KeyGenerator)的選項。自動生成的值自動反映在數據集中。

第二種方法是在BeforePost事件處理程序中生成並填充關鍵字字段值。一般,這種方式須要執行查詢以從服務器檢索一些信息。因此這種方法可能只在某些特定的狀況下有用。

第三種方法是建立AFTER INSERT觸發器,用適當的值填充字段。但返回觸發器生成的值時出現問題。儘管這個問題能夠解決(見下一段),但這種方法被認爲是非最優的。所以,若是可能,嘗試選擇另外一種方法。

可是,可使用特定於QueryIdentity的選項爲SQL Server提供程序禁用檢索生成的值。這將提升記錄插入的性能。

及時獲取最新數據

在某些狀況下,UniDAC容許自動刷新數據集中的記錄,以使其值保持最新。

使用刷新選項,您能夠在編輯前、插入或刪除後使UniDAC刷新當前記錄。它是經過執行一個附加的查詢來完成的。

DMLRefresh選項容許在插入或更新後刷新當前記錄,與RefreshOptions相似,但其工做方式不一樣。這容許實現比刷新選項更高的性能。基於MySQL、SQLite和ODBC的提供程序不支持DMLRefresh。

若是要控制插入或更新後須要刷新當前記錄的哪些字段,應執行如下操做:在更新查詢中定義與數據集中字段名稱對應的名稱的輸出參數,並將ReturnParams選項設置爲  True。執行更新查詢後,數據集讀取輸出參數的值,並將其放入具備相應名稱的字段中。

相關文章
相關標籤/搜索