Delphi 數據庫訪問控件。支持 Delphi 10.2 Tokyo Universal Data Access Components (UniDAC) is a library of components that provides direct access to multiple databases from Delphi, C++Builder, Lazarus (and Free Pascal) on Windows, Mac OS X, iOS, Android, Linux, and FreeBSD for both 32-bit and 64-bit platforms. We have combined the experience of long-term successful development into one product, which provides unified access to multiple database servers like Oracle, Microsoft SQL Server, MySQL, InterBase, Firebird, PostgreSQL, SQLite, DB2, Microsoft Access, Sybase Advantage Database Server, Sybase Adaptive Server Enterprise, and other databases (using ODBC provider). UniDAC offers unified approach to the database-related applications development process. That means you can switch easily between different databases in your projects without going deep into their specifics. Using UniDAC with its server-independent interface is the best way to create cross-database applications. UniDAC gives outstanding flexibility and independence to your projects.
常言道,細微之處見體貼。UniDAC有一些過人的方法或屬性。
比如,刷新單條記錄(RefreshRecord)、多表更新的屬性(UpdatingTable)、宏替換參數(Macros)、
集成刪除/新增/修改/刷新/鎖定SQL語句、FetchRows,更讓人稱道的是引入了UpdateSQL組件。
TUniTable、TUniQuery和TUniStoredProc是用來檢索和編輯數據的UniDAC控件.
***************************TUniQuery******************************************************
UniDirectional屬性
ADO沒有單向數據集特性,所有的數據下載到本地,不停的開辟內存或釋放大內存,對三層的內存是一個極大考驗。TUniQuery有一個 UniDirectional屬性,支持單向速度,這點和DBX的想法不謀而合。況且,單向數據集特性速度非常快,在三層中,配合 TDataSetProvider,中間件將其Data包發送到客戶端,速度無可比擬。ADO也有流或XML格式包,但無論是XML或流格式,數據包遠比 CDS的包大幾倍。CDS封包技術很好!
FetchRows可以設定一次獲取記錄的行數
uniquery 和 unitable 的 SpecificOptions 屬性,需要設置 FetchAll=False才能使 FetchRows 的設置生效,而默認情況下, oracle 是設置Oracle.FetchAll=False;
而對去 sql server 和 mysql 等,卻是設置的 XXX.FetchAll=True
UniQuery.SpecificOptions.Values['FetchAll'] := BoolToStr(cbFetchAll.Checked, True);
UniDirectional屬性
ADO沒有單向數據集特性,所有的數據下載到本地,不停的開辟內存或釋放大內存,對三層的內存是一個極大考驗。TUniQuery有一個 UniDirectional屬性,支持單向速度,這點和DBX的想法不謀而合。況且,單向數據集特性速度非常快,在三層中,配合 TDataSetProvider,中間件將其Data包發送到客戶端,速度無可比擬。ADO也有流或XML格式包,但無論是XML或流格式,數據包遠比 CDS的包大幾倍。CDS封包技術很好!
UniDAC的單條記錄刷新
1、設置 SQLRefresh.TEXT的刷新SQL,一般要具體到單條記錄。比如:SQLRefresh.Text:='SELECT * FROM TName WHERE ID = :ID'(其中ID是表TName的主鍵,以確保返回隻有一條記錄)
2、設置 TRefreshOptions為 [roAfterInsert,roAfterUpdate],即為新增後刷新,修改後刷新。
3、調用 UniQuery1.RefreshRecord
如果不做以上設置,僅執行UniQuery1.RefreshRecord 是一點反映也沒有的
UpdatingTable
屬性 UpdatingTable 服務顯示表將被更新(如果在查詢中有許多表)。如果它的值為空,正在使用的表就會顯示SQL操作的結果。為了更好地對查詢結果進行操作,建議應總是設置屬性UpdatingTable
cachedupdates緩存更新
UniQuery默認狀態為行提交,使用前根據需要設置readonly或cachedupdates屬性
Filter過濾
UniQuery.Filter默認大小寫區分,請注意設置FilterOptions屬性([foCaseInsensitive]),TVirtualtable也存在相同情況
在UniQuery的SQL定義參數
我們經常會在UniQuery的SQL定義一些參數,在傳參時,需要特別注意,例如:
QExec.Close;
QExec.SQL.Text:= ‘select * from YHB where sYHBH=_YHBH’;
在傳參時有兩種寫法
1)最穩妥的寫法
QExec. ParamByName(‘P_YHBH’).DataType:= ftString;
QExec. ParamByName(‘P_YHBH’).ParamType:= ptInPut;
QExec. ParamByName(‘P_YHBH’).AsString:= ‘張三’;(此處可將AsString換成Value)
2)下麵這個寫法我做了簡單測試,也是可以的,但對複雜的SQL傳參是否正確,未知
QExec. ParamByName(‘P_YHBH’).AsString:= ‘張三’;(在不對參數的數據類型和傳入傳出類型進行指定的情況下,絕對不能使用Value)
UniQuery.SetReadOnly屬性
1) 我們經常會用到多表關聯,且需要在前台修改數據。舉個例子:a表和b表,在前台兩個表字段都需要修改,則需要將SetReadOnly設置成false
2)特別注意:若將一個UniQuery.SetReadOnly設置成true,而這個表有一個自增長ID,那麼你在提交數據時會出錯,跟蹤SQL會發現,ID被前台前行傳了一個null值
UniQuery. RefreshRecord
可以刷新當前選擇的數據
數據提交
數據提交的順序,一定要注意:
with MyQuery do
begin
Session.StartTransaction;
try
... {Modify data}
ApplyUpdates; {try to write the updates to the database}
Session.Commit; {on success, commit the changes}
except
RestoreUpdates; {restore update result for applied records}
Session.Rollback; {on failure, undo the changes}
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates; {on success, clear the cache}
end;
對於單數據集的提交:
MyQuery. ApplyUpdates;
MyQuery. CommitUpdates;
Unidac:解決“trying to modify read-only Field”問題!
後台使用SQL語句中,經常會關聯自定義函數或視圖,而CDS(TClientDataSet)對字段校驗比較嚴格,涉及到的自定義函數或視圖輸出的字段,都會強製改為ReadOnly為True屬性。
當後台使用UniDAC+CDS,關聯視圖或自定義函數,為了數據一致性,有可能需要在前台界麵上修改CDS相關的自定義函數輸出的字段,即便是將該字段設置為 readonly為false,
或將其字段的 FieldDefs屬性的attributes的faReadOnly去掉,係統也會拋出一個異常:trying to modify read-only Field。
解決問題很簡單,將TUniQuery.Options.SetFieldsReadOnly為false即可。
查一下TUniQuery.Options.SetFieldsReadOnly的幫助,這樣寫道:
If True, dataset sets the ReadOnly property to True for all fields that do not belong to UpdatingTable or can not be updated. Set this option for datasets
that use automatic generation of the update SQL statements only.
Macros屬性
要注意:如果要替換的值是一個字符串,那麼記得在字符串兩邊加''號,因為Macro隻是一個簡單的替換功能,他不會去判斷條件的類型。
其他
UniQuery默認情況下,有些varchar類型的字段有自動加了一個空格,請注意設置Options.TrimVarChar=true
UniQuery在進行Insert時,若字段不能為null且前台操作未填寫時,可能會報錯,請設置RequiredFields=true
UniQuery在修改數據集時,默認的方式是按關鍵字生成SQL語句進行數據提交。還有另外兩種方式:一是設置updateSQL,一是設置KeyFields(具體請sql跟蹤查看)
UniQuery的數據排序屬性是IndexFieldNames
********************存儲過程*************************************************************************
TUniConnection, TUniSQL, TUniQuery, TUniStoredProc均可以執行存儲過程。
TUniConnection:
是一種最簡單的執行存儲過程的控件,但他有很多限製。TUniConnection不能具有SQL、存儲過程名和參數,不支持輸出參數也不支持存儲執行的預準備。當然,如果隻是運行一個既沒有返回也沒有輸出參數設置,那TUniConnection是一個不錯的選擇。
TUniSQL:TUniSQL是一個被分離出的小控件,執行SQL語句但不返回結果集。它沒有數據存儲,但要消耗一些內存,但比TUniQuery和TUniStoredProc的執行速度快。
UniSQL.SQL.Text :=str
UniSQL.Execute;
s := 'Rows affected: ' + IntToStr(UniSQL.RowsAffected);
TUniQuery:TUniQuery除具有TUniSQL的執行功能外,還能返回結果集。
TUniStoredProc:TUniStoredProc是專門用來執行存儲過程的一個控件,可以返回結果集、輸出參數、執行準備以及通過CreateProcCall方法初始化等。
1、 參數類型
UniDAC支持四種參數類型:input, output, input/output, result
***********************************************TUniConnection************************************************************
事務
TUniConnection通過StartTransaction, Commit, Rollback等方法來控製本地事務,判斷一個事務是否開啟用InTransaction。
1、TUniConnection
建立和控件數據連接的控件,能訪問的數據庫包括:Oracle, SQL Server, MySQL, InterBase, Firebird, 和PostgreSQL.
雖然UniDAC對不同的數據庫提供了統一的訪問接口,但是對個別數據庫還是要進行一些特殊的設置,這些設置是一個字符串列表,你可以按以下代碼進行設置:
UniConnection.SpecificOptions.Values['CharLength'] := '1';
1、 Oracle
76.4M / 03-25
立即下載55M / 06-05
立即下載237.9M / 04-13
立即下載140.5M / 03-06
立即下載900.9M / 03-02
立即下載96.2M / 07-06
立即下載311.2M / 07-06
立即下載335M / 07-06
立即下載200M / 07-06
立即下載413.8M / 07-06
立即下載353.9M / 06-05
立即下載131.8M / 04-13
立即下載230.8M / 03-03
立即下載195.6M / 03-03
立即下載165.4M / 03-03
立即下載45.6M / 09-08
立即下載665.2M / 07-06
立即下載2.84G / 07-06
立即下載93M / 07-06
立即下載338.3M / 07-06
立即下載1.38G / 07-26
立即下載488.3M / 07-16
立即下載109.8M / 06-03
立即下載142M / 01-08
立即下載1.2M / 11-23
立即下載548.8M / 04-13
立即下載1.6M / 04-13
立即下載1.48G / 03-18
立即下載646.6M / 03-03
立即下載133.7M / 03-03
立即下載325.8M / 06-07
立即下載60M / 04-29
立即下載254M / 04-25
立即下載659M / 04-23
立即下載1M / 12-26
立即下載253.4M / 12-08
立即下載253M / 12-08
立即下載1.19G / 11-16
立即下載110.5M / 04-23
立即下載26.7M / 03-16
立即下載488.3M / 07-16
立即下載248.9M / 12-08
立即下載248.9M / 12-08
立即下載201.2M / 04-13
立即下載100.6M / 03-06
立即下載148.9M / 03-06
立即下載1.12G / 07-06
立即下載1.25G / 07-06
立即下載9.48G / 07-06
立即下載50KB / 07-06
立即下載116.2M / 04-10
立即下載1.92G / 04-17
立即下載201.5M / 04-13
立即下載7.31G / 07-01
立即下載94.3M / 07-06
立即下載2.48G / 07-06
立即下載7.63G / 07-06
立即下載1M / 07-06
立即下載778.1M / 07-06
立即下載509.7M / 07-06
立即下載561.8M / 07-11
立即下載1.32G / 01-19
立即下載72M / 07-06
立即下載548.7M / 07-06
立即下載1.00G / 07-06
立即下載9.13G / 07-06
立即下載126.2M / 07-06
立即下載72M / 07-06
立即下載105.1M / 07-06
立即下載132M / 07-06
立即下載