翻譯|使用教程|編輯:李爽夏|2019-01-29 13:38:55.000|閱讀 900 次
概述:本篇文章介紹使用UniDAC數據集組件進行數據編輯的常用方法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
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、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。
為了更靈活地控制數據修改,可以填充update-SQL語句。它們由SQLInsert、SQLUpdate、SQLDelete和SQLRefresh 屬性表示,并在Insert/Post、Edit/Post、Delete和Refresh操作中自動執行。在設計時,可以在組件編輯器的“SQL Generator”選項卡上生成默認的更新SQL語句。可以根據需要修改生成的語句。但是,如果為每個記錄動態生成更新查詢,則只有更改后的值才會發送到服務器。
對于某些特定情況,此功能不夠。它可以通過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。執行更新查詢后,數據集讀取輸出參數的值,并將其放入具有相應名稱的字段中。
購買UniDAC正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn