翻譯|使用教程|編輯:李爽夏|2019-01-29 13:38:55.000|閱讀 900 次
概述:本篇文章介紹使用UniDAC數(shù)據(jù)集組件進(jìn)行數(shù)據(jù)編輯的常用方法。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Universal Data Access Components (UniDAC)是一款通用數(shù)據(jù)庫(kù)訪問(wèn)組件,提供了多個(gè)數(shù)據(jù)庫(kù)的直接訪問(wèn),如針對(duì)Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。我們將長(zhǎng)期的經(jīng)驗(yàn)集于這個(gè)小組件,提供統(tǒng)一的數(shù)據(jù)庫(kù)連接訪問(wèn)(如oracle、微軟SQL等等)。這意味著您可以在您的項(xiàng)目之間輕松地切換不同的數(shù)據(jù)庫(kù),以及創(chuàng)建跨數(shù)據(jù)庫(kù)應(yīng)用程序接口。
本篇文章介紹使用UniDAC數(shù)據(jù)集組件進(jìn)行數(shù)據(jù)編輯的常用方法。
TUniTable, TUniQuery和TUniStoredProc是允許檢索和編輯數(shù)據(jù)的UniDAC組件。要編輯每個(gè)組件的數(shù)據(jù),請(qǐng)?jiān)贙eyFields屬性中指定鍵字段名稱。如果KeyFields為空字符串,則Oracle、PostgreSQL、Interbase、SQLite和所有基于ODBC的提供程序都將嘗試從發(fā)送附加查詢的服務(wù)器請(qǐng)求有關(guān)主鍵的信息(這可能會(huì)對(duì)性能產(chǎn)生負(fù)面影響)。SQL Server和MySQL提供程序?qū)⑹褂梅?wù)器發(fā)送的元信息和數(shù)據(jù)。SQL Server提供程序具有UniqueRecords選項(xiàng),該選項(xiàng)允許在查詢中省略主鍵字段時(shí)自動(dòng)從表中請(qǐng)求主鍵字段。
如果要打開(kāi)的數(shù)據(jù)集沒(méi)有唯一標(biāo)識(shí)記錄的字段,則可以通過(guò)服務(wù)器的方式通過(guò)Oracle、Firebird 2.0、PostgreSQL和SQLite服務(wù)器來(lái)解決這個(gè)問(wèn)題。對(duì)于Oracle和SQLite服務(wù)器,您應(yīng)該將RowID列添加到查詢中。帶Firebird 2.0 - DB_KEY。如果您的表是使用OID創(chuàng)建的,那么可以使用PostgreSQL服務(wù)器OID列作為關(guān)鍵字字段。
對(duì)于具有來(lái)自多個(gè)表的數(shù)據(jù)的數(shù)據(jù)集,默認(rèn)情況下只有一個(gè)表是可更新的。您應(yīng)該在UpdatingTable屬性中指定要更新的表名,否則屬于字段列表中第一個(gè)字段的表將是可更新的。如果SetFieldsReadOnly選項(xiàng)設(shè)置為True(默認(rèn)情況下),則自動(dòng)生成的更新SQL語(yǔ)句中未使用的字段將標(biāo)記為只讀。對(duì)于復(fù)雜查詢(使用多個(gè)表、同義詞、dblinks、聚合字段的語(yǔ)句),我們建議使用Oracle、PostgreSQL和所有基于ODBC的提供程序啟用 ExtendedFieldsInfo 選項(xiàng)。
如果插入/發(fā)布、更新或刷新記錄操作影響了多個(gè)記錄,UniDAC將引發(fā)異常。要禁止此類異常,應(yīng)將StrictUpdate選項(xiàng)設(shè)置為False。
為了更靈活地控制數(shù)據(jù)修改,可以填充update-SQL語(yǔ)句。它們由SQLInsert、SQLUpdate、SQLDelete和SQLRefresh 屬性表示,并在Insert/Post、Edit/Post、Delete和Refresh操作中自動(dòng)執(zhí)行。在設(shè)計(jì)時(shí),可以在組件編輯器的“SQL Generator”選項(xiàng)卡上生成默認(rèn)的更新SQL語(yǔ)句??梢愿鶕?jù)需要修改生成的語(yǔ)句。但是,如果為每個(gè)記錄動(dòng)態(tài)生成更新查詢,則只有更改后的值才會(huì)發(fā)送到服務(wù)器。
對(duì)于某些特定情況,此功能不夠。它可以通過(guò)TUniUpdateSQL組件進(jìn)行擴(kuò)展。TUniUpdateSQL允許為每個(gè)更新操作關(guān)聯(lián)一個(gè)單獨(dú)的TUniSQL/TUniQuery/TUniStoredProc組件。
UniDAC允許在客戶端緩存更新(所謂的“Cashed Updates”),然后批量發(fā)布所有更新。這意味著在調(diào)用Post或Delete之后,更改不會(huì)立即反映在服務(wù)器上。調(diào)用ApplyUpdates方法后,所有緩存的更改都將發(fā)布到服務(wù)器。UpdateBatchSize選項(xiàng)允許設(shè)置要同時(shí)發(fā)布的更改數(shù)。
如果已經(jīng)為數(shù)據(jù)庫(kù)表中的列定義了默認(rèn)值或表達(dá)式,則可以設(shè)置UniDAC,以便它從服務(wù)器請(qǐng)求這些表達(dá)式。這些表達(dá)式將分配給TField對(duì)象的DefaultExpression 屬性。如果已填充默認(rèn)表達(dá)式值,則將替換這些值。此行為由默認(rèn)值選項(xiàng)控制,默認(rèn)情況下禁用該選項(xiàng)。
編輯數(shù)據(jù)集時(shí),通常不方便手動(dòng)填充關(guān)鍵字字段值,而是自動(dòng)生成它們。有三種方法可以做到。
第一種方法,最有用的方法,是使用服務(wù)器方法自動(dòng)生成關(guān)鍵字字段值。
SQL Server、MySQL和SQLite允許在表中定義自動(dòng)增量列。這不需要在客戶機(jī)上進(jìn)行額外的處理。對(duì)于SAP Sybase ASE、Oracle、PostgreSQL和Interbase提供程序,需要指定特定于keysequence(Interbase的KeyGenerator)的選項(xiàng)。自動(dòng)生成的值自動(dòng)反映在數(shù)據(jù)集中。
第二種方法是在BeforePost事件處理程序中生成并填充關(guān)鍵字字段值。通常,這種方式需要執(zhí)行查詢以從服務(wù)器檢索一些信息。所以這種方法可能只在某些特定的情況下有用。
第三種方法是創(chuàng)建AFTER INSERT觸發(fā)器,用適當(dāng)?shù)闹堤畛渥侄巍5祷赜|發(fā)器生成的值時(shí)出現(xiàn)問(wèn)題。盡管這個(gè)問(wèn)題可以解決(見(jiàn)下一段),但這種方法被認(rèn)為是非最優(yōu)的。因此,如果可能,嘗試選擇另一種方法。
但是,可以使用特定于QueryIdentity的選項(xiàng)為SQL Server提供程序禁用檢索生成的值。這將提高記錄插入的性能。
在某些情況下,UniDAC允許自動(dòng)刷新數(shù)據(jù)集中的記錄,以使其值保持最新。
使用刷新選項(xiàng),您可以在編輯前、插入或刪除后使UniDAC刷新當(dāng)前記錄。它是通過(guò)執(zhí)行一個(gè)附加的查詢來(lái)完成的。
DMLRefresh選項(xiàng)允許在插入或更新后刷新當(dāng)前記錄,與RefreshOptions類似,但其工作方式不同。這允許實(shí)現(xiàn)比刷新選項(xiàng)更高的性能。基于MySQL、SQLite和ODBC的提供程序不支持DMLRefresh。
如果要控制插入或更新后需要刷新當(dāng)前記錄的哪些字段,應(yīng)執(zhí)行以下操作:在更新查詢中定義與數(shù)據(jù)集中字段名稱對(duì)應(yīng)的名稱的輸出參數(shù),并將ReturnParams選項(xiàng)設(shè)置為
True。執(zhí)行更新查詢后,數(shù)據(jù)集讀取輸出參數(shù)的值,并將其放入具有相應(yīng)名稱的字段中。
購(gòu)買UniDAC正版授權(quán),請(qǐng)點(diǎn)擊“”喲!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn