資料庫控制元件
# FastWeb資料庫控制元件
- 適用平臺: WEB(桌面)
該組中的控制元件用以連線資料庫並設定數據運算服務,包括查詢、統計、運算等必要的控制元件。
# 1. TUgFDConnection
該元件是用於與資料庫進行連線的元件。在其中設定資料庫名,登錄的地址,使用者名稱,密碼等資訊后連線至資料庫,作為連線的元件來使用。
# 1.1. 屬性
屬性 | 說明 |
---|---|
Connected | 是否連線到資料庫 |
Params | 連線參數的相關設定 |
# 1.1.1. Connected
property Connected: Boolean;
該屬性用於確認元件是否需要發起資料庫的連線。為True
時與資料庫進行連線,為False
時斷開連線。
# 1.1.2. Params
property Params: TFDConnectionDefParams
設定連線參數。
點選右側的配置按鈕,打開參數配置的對話方塊。
首先需要選擇資料庫的型別,在Driver ID
中選擇對應的資料庫,顯示如下所示的資訊。
需要填寫的專案如下:
名稱 | 說明 |
---|---|
Database | 資料庫名稱 |
Server | 資料庫伺服器的地址 |
User_Name | 資料庫認證的使用者名稱稱 |
Password | 資料庫認證的使用者密碼 |
填寫完成後,點選[Test]
進行測試,如果出現Success
字樣的提示框則說明連線參數正確,連線成功。點選[Ok]
以儲存連線參數並關閉對話方塊。
# 1.2. 事件
事件 | 觸發條件 |
---|---|
AfterCommit | 在數據提交后觸發該事件 |
AfterConnect | 在連線到資料庫后觸發該事件 |
AfterDisconnect | 在斷開資料庫的連線后觸發該事件 |
AfterRollBack | 在進行回滾操作后觸發該事件 |
BeforeCommit | 在提交數據前觸發該事件 |
BeforeConnect | 在連線到資料庫前觸發該事件 |
BeforeDisconnect | 在斷開資料庫的連線前觸發該事件 |
BeforeRollBack | 在進行回滾操作前觸發該事件 |
# 2. TUgFDTransaction
該元件負責連線資料庫的事務執行的管理。
# 2.1. 屬性
屬性 | 說明 |
---|---|
Connection | 設定連線的控制元件 |
Options | 設定事務行為的選項 |
# 2.1.1. Connection
property Connection: TFDCustomConnection;
設定控制元件連線使用的控制元件,此處通常設定為TUgFDConnection的元件型別。
# 2.1.2. Options
property Options: TFDTxOptions;
設定事務行為的選項。該選項不會立即生效,只有當執行事務連線時才會生效。
名稱 | 說明 |
---|---|
AuotCommit | 設定是否自動提交 |
AutoStart | 設定是否自動開啟事務 |
AutoStop | 設定是否自動停止事務 |
DisconnectAction | 設定當斷開連線時的行為。xdCommit 為提交事務,xdNone 為不執行,xdRollback 為回滾事務 |
# 2.2. 事件
事件 | 觸發條件 |
---|---|
AfterCommit | 當提交事務完成後觸發該事件 |
AfterRollback | 當回滾事務完成後觸發該事件 |
AfterStartTransaction | 當開始執行事務后觸發該事件 |
BeforeCommit | 當開始提交事務前觸發該事件 |
BeforeRollback | 當回滾事務前觸發該事件 |
BeforeStartTransaction | 當開始事務前觸發該事件 |
# 2.3. 方法
# 2.3.1. Commit
procedure Commit;
呼叫該方法可對資料庫的操作(插入,更新,刪除)進行永久性更改。
//JScript
//初始化事務的設定
UgFDQuery01.Transaction = UgFDTransaction01;
UgFDQuery01.SQL.Text = "update employees set salary = salary * :k where id = :id";
UgFDTransaction01.StartTransaction; //開啟事務
try{
UgFDQuery01.ExecSQL("", [1.2, 100]);
UgFDQuery01.ExecSQL("", [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
}
except{
UgFDTransaction01.Rollback; //回滾事務
raise;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
//初始化事務的設定
UgFDQuery01.Transaction := UgFDTransaction01;
UgFDQuery01.SQL.Text := 'update employees set salary = salary * :k where id = :id';
UgFDTransaction01.StartTransaction; //開啟事務
try
UgFDQuery01.ExecSQL('', [1.2, 100]);
UgFDQuery01.ExecSQL('', [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
except
UgFDTransaction01.Rollback; //回滾事務
raise;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
# 2.3.2. Rollback
procedure Rollback;
進行事務的回滾操作。
//JScript
//初始化事務的設定
UgFDQuery01.Transaction = UgFDTransaction01;
UgFDQuery01.SQL.Text = "update employees set salary = salary * :k where id = :id";
UgFDTransaction01.StartTransaction; //開啟事務
try{
UgFDQuery01.ExecSQL("", [1.2, 100]);
UgFDQuery01.ExecSQL("", [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
}
except{
UgFDTransaction01.Rollback; //回滾事務
raise;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
//初始化事務的設定
UgFDQuery01.Transaction := UgFDTransaction01;
UgFDQuery01.SQL.Text := 'update employees set salary = salary * :k where id = :id';
UgFDTransaction01.StartTransaction; //開啟事務
try
UgFDQuery01.ExecSQL('', [1.2, 100]);
UgFDQuery01.ExecSQL('', [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
except
UgFDTransaction01.Rollback; //回滾事務
raise;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
# 2.3.3. StartTransaction
procedure StartTransaction;
開始執行事務。
//JScript
//初始化事務的設定
UgFDQuery01.Transaction = UgFDTransaction01;
UgFDQuery01.SQL.Text = "update employees set salary = salary * :k where id = :id";
UgFDTransaction01.StartTransaction; //開啟事務
try{
UgFDQuery01.ExecSQL("", [1.2, 100]);
UgFDQuery01.ExecSQL("", [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
}
except{
UgFDTransaction01.Rollback; //回滾事務
raise;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
//初始化事務的設定
UgFDQuery01.Transaction := UgFDTransaction01;
UgFDQuery01.SQL.Text := 'update employees set salary = salary * :k where id = :id';
UgFDTransaction01.StartTransaction; //開啟事務
try
UgFDQuery01.ExecSQL('', [1.2, 100]);
UgFDQuery01.ExecSQL('', [1.3, 200]);
UgFDTransaction01.Commit; //提交事務
except
UgFDTransaction01.Rollback; //回滾事務
raise;
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
# 3. TUgFDCommand
該控制元件用於執行SQL命令。可使用該控制元件執行不返回結果的SQL命令。如需要獲取返回結構數據集的,選擇TUgFDQuery。
# 3.1. 屬性
名稱 | 說明 |
---|---|
Active | 是否啟用控制元件 |
ActiveStoredUsage | 儲存Active 屬性的方式 |
ComandKind | 設定命令列的型別 |
CommandText | 設定要執行的SQL命令 |
Connection | 設定連線的控制元件 |
MarcosByName | 宏變數集合的設定 |
ParamsByName | 設定宏變數的參數 |
Prepare | 為SQL命令的運行準備 |
Transaction | 設定事務控制元件 |
# 3.1.1. Active
property Active: Boolean;
設定是否啟用控制元件,啟用控制元件后將執行SQL命令。
# 3.1.2. ActiveStoredUsage
property ActiveStoredUsage: TFDStoredActivationUsage;
設定Active
屬性儲存至DFM的方式。auDesignTime
表示在設計階段使用該屬性。auRunTime
表示在運行階段使用該屬性。
# 3.1.3. CommandKind
property CommandKind: TFDPhysCommandKind;
設定命令的型別,您可以在呼叫Prepare
之前設定該屬性項的值。否則控制元件在分析CommandText
中的內容後會自動分配該值,對於預存程序仍然需要手動分配。
//JScript
//Example 1:
UgFDCommand01.CommandKind = skStoredProc;
UgFDCommand01.CommandText.Text = "MY_PROC";
UgFDCommand01.Prepare;
//Example 2:
UgFDCommand01.CommandText.Text = "ALTER PROCEDURE MY_PROC COMPILE";
switch (UgFDCommand01.CommandKind){
case skAlter: ShowMessage("Alter command");
..........
default ShowMessage("Other command");
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
//Example 1:
UgFDCommand01.CommandKind := skStoredProc;
UgFDCommand01.CommandText.Text := 'MY_PROC';
UgFDCommand01.Prepare;
//Example 2:
UgFDCommand01.CommandText.Text := 'ALTER PROCEDURE MY_PROC COMPILE';
case UgFDCommand01.CommandKind of
skAlter: ShowMessage('Alter command');
..........
else ShowMessage('Other command');
end;
2
3
4
5
6
7
8
9
10
11
12
13
// Make sure to add code blocks to your code group
# 3.1.4. CommandText
property CommandText: TStrings;
設定命令列的文字。
設定的命令列的型別如下:
- 要執行的SQL命令的文字。
- 如果
CommandKind
位於[skStoredProc,skStoredProcWithCrs,skStoredProcNoCrs]
中,則要執行的預存程序的名稱。
設定CommandText
后,FireDAC將對非預存程序執行以下操作:
- 如果
ResourceOptions.ParamCreate
為True
,則提取參數的名稱並填充Params
屬性集合。 - 如果
ResourceOptions.MacroCreate
為True
,則提取宏名稱並填充Macros
屬性集合。 - 如果
ResourceOptions.PreprocessCmdText
為True
,則提取SELECT命令的FROM表的名稱
,並將其分配給CommandIntf.SourceObjectName
。 - 填充
CommandKind
屬性的值(如果未顯式設定)。 如果使用CommandText.Add
方法新增長命令,則建議在命令修改之前呼叫CommandText.BeginUpdate
,在命令修改完成之後呼叫CommandText.EndUpdate
。
稍後,當呼叫Prepare
時,命令文字將被預處理並轉換為目標DBMS命令。
# 3.1.5. Marcos
property Macros: TFDMacros;
Macros
屬性是宏的替換變數的集合。 如果ResourceOptions.MacroCreate
為True
,則在分配CommandText
后將自動填充該檔案。 否則,可以手動填充。在結構編輯器中選擇該控制元件下的Marcos
,點選左上角的[新增]
按鈕填充該屬性集合。
呼叫Prepare
時,如果ResourceOptions.MacroExpand
為True
,則將宏值替換為CommandText
。
//JScript
//Example 1 - Substitute table name:
UgFDCommand01.CommandText.Text = "select * from &Tab";
UgFDCommand01.Macros[0].AsIdentifier = "Order Details";
UgFDCommand01.Prepare;
ShowMessage(UgFDCommand01.SQLText); // select * from "Order Details"
//Example 2 - Substitute WHERE condition:
UgFDCommand01.CommandText.Text = "select * from MyTab {if !cond} where !cond {fi}";
UgFDCommand01.Macros[0].AsString = "ID > 100";
UgFDCommand01.Prepare;
ShowMessage(ADCommand1.SQLText); // select * from MyTab where ID > 100
UgFDCommand01.Macros[0].Clear;
UgFDCommand01.Prepare;
ShowMessage(UgFDCommand01.SQLText); // select * from MyTab
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
//Example 1 - Substitute table name:
UgFDCommand01.CommandText.Text := 'select * from &Tab';
UgFDCommand01.Macros[0].AsIdentifier := 'Order Details';
UgFDCommand01.Prepare;
ShowMessage(UgFDCommand01.SQLText); // select * from "Order Details"
//Example 2 - Substitute WHERE condition:
UgFDCommand01.CommandText.Text := 'select * from MyTab {if !cond} where !cond {fi}';
UgFDCommand01.Macros[0].AsString := 'ID > 100';
UgFDCommand01.Prepare;
ShowMessage(ADCommand1.SQLText); // select * from MyTab where ID > 100
UgFDCommand01.Macros[0].Clear;
UgFDCommand01.Prepare;
ShowMessage(UgFDCommand01.SQLText); // select * from MyTab
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
# 3.1.6. Params
property Params: TFDParams;
Params
屬性是SQL命令的參數集合。
如果CommandKind
不在[skStoredProc,skStoredProcWithCrs,skStoredProcNoCrs]
中,則如果ResourceOptions.ParamCreate
為True
,則在分配CommandText
后將自動填充Params
。
如果CommandKind
位於[skStoredProc,skStoredProcWithCrs,skStoredProcNoCrs]
中,則如果fiMeta
位於FetchOption.Items
中,則在呼叫Prepare
方法后將自動填充Params
。
否則需要手動填充Params
。 呼叫Prepare
時,參數繫結到已準備的SQL命令。 之後,您將無法更改參數型別,否則會引發異常。
# 3.2. 事件
事件 | 觸發條件 |
---|---|
AfterClose | 當命令被關閉后觸發該事件 |
AfterExecute | 當命令被執行后觸發該事件 |
AfterFetch | 當從命令列中獲取到遊標后觸發該事件 |
AfterOpen | 當命令打開后觸發該事件 |
AfterPrepare | 當命令列準備完畢后觸發該事件 |
AfterUnPrepare | 當命令列尚未準備完畢后觸發該事件 |
BeforeClose | 當命令被關閉前觸發該事件 |
BeforeExecute | 當命令被執行前觸發該事件 |
BeforeFetch | 當從命令列中獲取到遊標前觸發該事件 |
BeforeOpen | 當命令打開前觸發該事件 |
BeforePrepare | 當命令列準備完畢前觸發該事件 |
BeforeUnPrepare | 當命令列尚未準備完畢前觸發該事件 |
OnCommandChanged | 當CommandText 出現修改時觸發該事件 |
OnError | 當命令執行出錯時觸發該事件 |
# 3.3. 方法
# 3.3.1. Close
procedure Close;
關閉命令遊標。
# 3.3.2. Open
procedure Open(ABlocked: Boolean = False);
執行命令,並返回遊標。之後,將State
設定為csOpen
,然後可以使用Fetch
方法從目前遊標中獲取行。 如果命令不返回遊標,則Open
方法會引發異常。
# 3.3.3. MarcoByName
function MacroByName(const AValue: string): TFDMacro;
該方法根據其名稱從Marcos集合返回一個宏。如果沒有這樣的宏,則會引發異常。
# 3.3.4. ParamByName
function ParamByName(const AValue: string): TFDParam;
該方法根據其名稱從Params集合返回一個參數。如果沒有這樣的參數,則會引發異常。
# 3.3.5. Prepare
procedure Prepare(const ACommandText: String = '');
呼叫Prepare
方法準備要執行的SQL命令。 之後,State
的值變為csPrepared
。 在執行之前,不需要為標準SQL命令呼叫Prepare
,因為第一個Execute / Open將自動準備命令。 相反,如果您需要自動填充Params集合,則預存程序需要它。 準備命令后,SQLText將返回發送給DBMS的SQL命令文字。
要準備SQL命令,DBMS連線必須處於活動狀態,否則會引發異常。
準備之後,應用程式的呼叫無法更改命令參數的數據型別和大小,否則在下一次Execute或Open呼叫時會引發異常。
注意:在呼叫Prepare
之前,請設定參數。
//JScript
UgFDCommand01.Prepare("select * from MyTab");
2
//PasScript
UgFDCommand01.Prepare('select * from MyTab');
2
// Make sure to add code blocks to your code group
# 4. TUgFDQuery
該元件為數據集元件,用於存放查詢的結果。此控制元件用於獲取具有返回數據集的SQL查詢語句,如僅執行不需要獲取返回結果的,請使用TUgFDCommand。
# 4.1. 屬性
名稱 | 說明 |
---|---|
Active | 是否啟用數據集 |
CachedUpdates | 是否對更新進行快取 |
Connection | 設定連線使用的控制元件 |
Filter | 設定過濾條件 |
Filtered | 是否開啟過濾器 |
SQL | 設定資料庫查詢內容的SQL |
RecordCount | 數據集中的記錄數量 |
Eof | 是否處於表末尾 |
Bof | 是否處於表開頭 |
# 4.2. 方法
# 4.2.1. Close
procedure Close;
該方法用於關閉數據集。
UgFDQuery01.Close;
# 4.2.2. Open
procedure Open;
該方法用於打開數據集。
UgFDQuery01.Open;
# 4.2.3. FieldByName
function FieldByName(AFieldName: String): TFiled
設定欄位資訊。比如讀取,賦值等方式。
//JScript
UgFDQuery01.FieldByName("id").AsString = "1";
2
//PasScript
UgFDQuery01.FieldByName('id').AsString := '1';
2
// Make sure to add code blocks to your code group
# 4.2.4. First
procedure First;
將數據集指針指向表的第一條記錄。
# 4.2.5. Last
procedure Last;
將數據集指針指向表的最後一條記錄。
# 4.2.6. ToJSONObjectString
function ToJSONObjectString(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
將數據集中目前選擇的的數據行轉換為JSON對象的數據集。輸出的格式為欄位名稱與欄位值組成的鍵值對。
{"code":"Code1","name":1}
# 4.2.7. ToJSONArrayString
function ToJSONArrayString(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
將數據集中的數據轉換為JSONArray。是由JSON對像組成的佇列。
[{"code":"Code1","name":1},{"code":"Code2","name":2}]
# 4.2.8. ToJSONObject
function ToJSONObject(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONObject;
將數據集中目前指向的數據行轉換為JSON對像型別。
# 4.2.9. ToJSONArray
function ToJSONArray(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONArray;
將數據集中的數據轉換為JSON對像序列型別。
# 4.2.10. SaveStructure
function SaveStructure: TJSONArray;
獲取目前的數據集的結構資訊,以JSONArray的方式輸出,包括數據表的欄位名稱、數據型別、大小等資訊。
# 4.2.11. LoadStructureJSONArray
procedure LoadStructureJSONArray(const AJSONArray: TJSONArray; const AOwns: Boolean = True);
將數據集的數據表結構從JSONArrary中載入。
# 4.2.12. LoadStructureJSONString
procedure LoadStructureJSONString(const AJSONString: string); overload;
將數據集的數據表結構從JSON格式的字串中讀取載入。
# 4.2.13. LoadFromJSONObject
procedure LoadFromJSONObject(const AJSONObject: TJSONObject; const AOwns: Boolean = True)
數據集從JSON對像中獲取載入單條記錄。
# 4.2.14. LoadFromJSONArray
procedure LoadFromJSONArray(const AJSONArray: TJSONArray; const AOwns: Boolean = True);
數據集從JSON對像序列中獲取載入多條記錄。
# 4.2.15. LoadFromJSONString
procedure LoadFromJSONString(const AJSONString: string);
數據集從JSON對象的字串中獲取載入數據記錄。
# 4.2.16. MergeFromJSONObject
procedure MergeFromJSONObject(const AJSONObject: TJSONObject; const AOwns: Boolean = True);
數據集從JSON對像中讀取單條數據記錄併合並至數據集中。
# 4.2.17. MergeFromJSONString
procedure MergeFromJSONString(const AJSONString: string);
數據集從JSON對像字串中讀取數據記錄併合並至數據集中。
# 4.2.18. ValidateJSONObject
function ValidateJSONObject(const AJSONObject: TJSONObject; const ALang: TLanguageType = enUS; const AOwns: Boolean = True): TJSONArray;
用於驗證JSON對像元件是否有效。
# 4.2.19. ValidateJSONString
function ValidateJSONString(const AJSONString: string; const ALang: TLanguageType = enUS): TJSONArray;
用於驗證JSON對像字串是否有效。
# 5. TUgFDMemTable
該元件實現記憶體中的數據集功能。可以實現與資料庫進行數據交換。
# 5.1. 屬性
名稱 | 說明 |
---|---|
Active | 數據集是否開啟 |
ActiveStoredUsage | 儲存Active 屬性的方式 |
Adapter | 指定數據適配器 |
Aggregrates | 為數據集定義的客戶端彙總的集合 |
AggregratesActive | 是否自動計算彙總值 |
AutoCalcFields | 確定何時觸發OnCalcFields事件以及何時計算查詢欄位值 |
CacheUpdates | 指定數據集是否將對數據的更改記錄而無需立即將其應用於資料庫 |
Constraints | 指定編輯數據時必須滿足的記錄級約束 |
ConstraintsEnabled | 是否啟用約束檢查 |
Data | 表示數據集中的數據,允許將數據集中的數據複製至另外一個數據集中 |
Filter | 設定過濾條件 |
Filtered | 是否開啟過濾器 |
# 5.1.1. Data
property Data: IFDDataSetReference;
Data屬性表示數據集的內部記憶體數據儲存。 使用此屬性,應用程式可以將一個FireDAC數據集的當前結構和數據複製到另一個FireDAC數據集。
該屬性值是對IFDDataSet介面的引用。 它是引用計數的,應用程式不需要顯式釋放它。 如果應用程式使用變數或欄位保留介面引用,則必須在關閉數據集之前釋放該引用。
數據集必須處於非活動狀態才能設定此屬性值,否則會引發異常。 設定后,該數據集:
- 具有原始數據集的結構,但不包括索引,IndexDefs,過濾器等。
- 具有原始數據集數據的副本,包括所有行版本和狀態(插入,刪除,更新,未更改)。
- 如果原始數據集有未應用的更改,則
CachedUpdates
等於True
。 - 數據集處於開啟狀態。
//JScript
UgFDQuery01.SQL.Text = "select * from orders; select * from customers";
UgFDQuery01.Open;
UgFDQuery01.FetchAll;
// assign orders records to FDMemTable1
UgFDMemTable01.Data = UgFDQuery01.Data;
UgFDQuery01.NextRecordSet;
UgFDQuery01.FetchAll;
// assign customers records to FDMemTable2
UgFDMemTable02.Data = UgFDQuery01.Data;
2
3
4
5
6
7
8
9
10
11
12
//PasScript
UgFDQuery01.SQL.Text := 'select * from orders; select * from customers';
UgFDQuery01.Open;
UgFDQuery01.FetchAll;
// assign orders records to FDMemTable1
UgFDMemTable01.Data := UgFDQuery01.Data;
UgFDQuery01.NextRecordSet;
UgFDQuery01.FetchAll;
// assign customers records to FDMemTable2
UgFDMemTable02.Data := UgFDQuery01.Data;
2
3
4
5
6
7
8
9
10
11
12
// Make sure to add code blocks to your code group
# 5.2. 方法
因其為記憶體表中的數據集,其大部分方法的使用方式與TUgFDQuery相似。
# 5.2.1. FieldByName
function FieldByName(AFieldName: String): TFiled
設定欄位資訊。比如讀取,賦值等方式。
//JScript
UgFDQuery01.FieldByName("id").AsString = "1";
2
//PasScript
UgFDQuery01.FieldByName('id').AsString := '1';
2
// Make sure to add code blocks to your code group
# 5.2.2. First
procedure Open;
跳轉至第一條記錄。
# 5.2.3. Prior
procedure Prior;
跳轉至前一條記錄。
# 5.2.4. Next
procedure Next;
跳轉至后一條記錄。
# 5.2.5. Last
procedure Last;
跳轉至最後一條記錄。
# 5.2.6. Edit
procedure Edit;
編輯目前指向的記錄。
# 5.2.7. Cancel
procedure Cancel;
取消對當前記錄的修改。
# 5.2.8. Post
procedure Post;
提交數據。
# 5.2.9. Insert
procedure Insert;
插入記錄。
# 5.2.10. Append
procedure Append;
新增記錄。
# 5.2.11. Delete
procedure Delete;
刪除記錄。
# 5.2.12. Refresh
procedure Refresh;
重新整理記錄。
# 6. TUgFDStoredProc
使用TUgFDStoredProc執行伺服器端預存程序,瀏覽結果集,並編輯結果集記錄。
# 6.1. 屬性
名稱 | 說明 |
---|---|
Active | 數據集是否開啟 |
ActiveStoredUsage | 儲存Active 屬性的方式 |
Adapter | 指定數據適配器 |
Aggregrates | 為數據集定義的客戶端彙總的集合 |
AggregratesActive | 是否自動計算彙總值 |
AutoCalcFields | 確定何時觸發OnCalcFields事件以及何時計算查詢欄位值 |
CacheUpdates | 指定數據集是否將對數據的更改記錄而無需立即將其應用於資料庫 |
Constraints | 指定編輯數據時必須滿足的記錄級約束 |
ConstraintsEnabled | 是否啟用約束檢查 |
Data | 表示數據集中的數據,允許將數據集中的數據複製至另外一個數據集中 |
Filter | 設定過濾條件 |
Filtered | 是否開啟過濾器 |
Params | 設定預存程序使用的參數 |
SchemaAdapter | 獲取或設定對模式適配器的引用作為「集中式快取更新」日誌 |
StoredProcName | 指定在伺服器端呼叫的預存程序的名稱 |
Transaction | 指定事務連線使用的控制元件 |
# 6.2. 方法
# 6.2.1. ExecProc
procedure ExecProc; overload;
function ExecProc(const AProcName: String): LongInt; overload;
function ExecProc(const AProcName: String; const AParams: array of Variant): LongInt; overload;
function ExecProc(const AProcName: String; const AParams: array of Variant; const ATypes: array of TFieldType): LongInt; overload;
2
3
4
執行預存程序。
//JScript
//1
UgFDStoredProc01.StoredProcName = "myproc";
UgFDStoredProc01.Prepare;
UgFDStoredProc01.ParamByName("inval").Value = 100;
UgFDStoredProc01.ExecProc;
ShowMessage(UgFDStoredProc01.ParamByName("outval").AsString);
//2
UgFDStoredProc01.ExecProc("myproc");
//3
UgFDStoredProc01.ExecProc("myproc;2", [100, "qweqwe"]);
//4
UgFDStoredProc01.ExecProc("myproc", [100, "qweqwe"], [ftInteger, ftWideString]);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//PasScript
//1
UgFDStoredProc01.StoredProcName := 'myproc';
UgFDStoredProc01.Prepare;
UgFDStoredProc01.ParamByName('inval').Value := 100;
UgFDStoredProc01.ExecProc;
ShowMessage(UgFDStoredProc01.ParamByName('outval').AsString);
//2
UgFDStoredProc01.ExecProc('myproc');
//3
UgFDStoredProc01.ExecProc('myproc;2', [100, 'qweqwe']);
//4
UgFDStoredProc01.ExecProc('myproc', [100, 'qweqwe'], [ftInteger, ftWideString]);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 7. TUgFDTableAdapter
該控制元件提供應用與數據的連線(使用頻率極低,建議直接使用TUgFDQuery)。
# 7.1. 屬性
名稱 | 說明 |
---|---|
DeleteCommand | 刪除命令使用的UgFDCommand控制元件 |
FetchRowCommand | 獲取行資訊使用的UgFDCommand控制元件 |
InsertCommand | 插入數據使用的UgFDCommand控制元件 |
LockCommand | 鎖表使用的UgFDCommand控制元件 |
SelectCommand | 查詢操作使用的UgFDCommand控制元件 |
# 8. TUgFDSchemaAdapter
該元件用於支援集中式快取更新,可用於管理集中式快取更新(使用頻率極低,建議直接使用TUgFDQuery)。
名稱 | 說明 |
---|---|
ResourceOptions | 用於控制永續性的相關選項 |
# 9. TUgFDMetaInfoQuery
該元件可執行後設資料資訊查詢的數據集。處查詢後設資料資訊的相關屬性外,其餘的屬性功能與TUgFDQuery相同。
# 9.1. 屬性
名稱 | 說明 |
---|---|
BaseObjectName | 設定基本對象的名稱。 其選項與 MetaInfoKind 關聯 |
CatalogName | 設定資料庫管理系統目錄的名稱。 |
MetaInfoKind | 設定要檢索的後設資料型別,如果在運行時為此屬性賦值會關閉數據集。 |
ObjectName | 設定要獲取詳細資訊的對象名稱。其選項與 MetaInfoKind 關聯。 |
ObjectScopes | 設定對像範圍過濾器。如果設定了 CatalogName 與 SchemaName ,則可選擇不使用此屬性。osMy :僅針對目前使用者建立的對象。osSystem :針對屬於資料庫管理系統的對象。osOther :所有的對象。 |
SchemaName | 設定資料庫管理系統的模式名稱。 |
TableKinds | 設定表格種類的過濾器。tkSynonyms :同義詞。tkTablle : 常規表。 tkView :檢視。tkTempTable :臨時表。 tkLocalTable :本地表。 |
WildCard | 設定對像按名稱進行過濾,相當於新增了一個 LIKE 萬用字元。 |
# 9.1.1. BaseObjectName
property BaseObjectName: String;
設定基本對象的名稱,名稱的選擇與 MetaInfoKind 的選項相關聯。以下是相關聯的選項說明。
MetaInfoKind 選項 | 說明 |
---|---|
mkIndexFields | 表名稱 |
mkPrimaryKeyFields | 表名稱 |
mkForeignKeyFields | 表名稱 |
mkProcs | 包名稱 |
mkProcArgs | 包名稱 |
BaseObjectName 屬性值與 CatalogName 和 SchemaName 一起構成完整的基礎對像名稱。 如果目前資料庫的會話中包含多個具有相同名稱但在不同目錄或不同模式中的對象,那麼我們強烈建議指定 CatalogName 和/或 SchemaName 屬性值以限制檢視的對象列表。
如果 BaseObjectName 區分大小寫或包含特殊字元,則必須明確引用。為該屬性賦值會關閉數據集。
//JScript
// SQL Server: retrieve foreign key fields for FK_DEPARTMENTS constraint of the Northwind.dbo.Employees table
UgFDMetaInfoQuery01.Connection = UgFDConnection01;
UgFDMetaInfoQuery01.BaseObjectName = "Northwind.dbo.Employees";
UgFDMetaInfoQuery01.ObjectName = "FK_DEPARTMENTS";
UgFDMetaInfoQuery01.MetaInfoKind = mkForeignKeyFields;
UgFDMetaInfoQuery01.Open;
2
3
4
5
6
7
//PasScript
// SQL Server: retrieve foreign key fields for FK_DEPARTMENTS constraint of the Northwind.dbo.Employees table
UgFDMetaInfoQuery01.Connection := UgFDConnection01;
UgFDMetaInfoQuery01.BaseObjectName := 'Northwind.dbo.Employees';
UgFDMetaInfoQuery01.ObjectName := 'FK_DEPARTMENTS';
UgFDMetaInfoQuery01.MetaInfoKind := mkForeignKeyFields;
UgFDMetaInfoQuery01.Open;
2
3
4
5
6
7
// Make sure to add code blocks to your code group
# 9.1.2. MetaInfoKind
property MetaInfoKind: TFDPhysMetaInfoKind;
設定數據集要獲取的後設資料資訊的型別。選項中的含義會跟隨設定的屬性專案的變化而有區別,請參考 CatalogName、SchemaName、BaseObjectName、ObjectName 中的說明。
# 9.1.3. ObjectName
property ObjectName: String;
設定要獲取詳細資訊的對象名稱。可設定的內容與 MetaInfoKind 的選項相關聯。以下是相關聯的選項說明。
MetaInfoKind 選項 | 說明 | 資料庫名稱與模式名稱 |
---|---|---|
mkTableFields | 數據表名稱 | 適用 |
mkIndexes | 數據表名稱 | 適用 |
mkIndexFields | 索引名稱 | -- |
mkPrimaryKey | 主鍵 | 適用 |
mkForeignKeys | 外來鍵 | 適用 |
mkForeignKeyFields | 外來鍵欄位 | -- |
mkProcArgs | 預存程序名稱 | 適用於非包預存程序 |
//JScript
UgFDMetaInfoQuery01.Connection = UgFDConnection01;
UgFDMetaInfoQuery01.MetaInfoKind = mkTableFields;
UgFDMetaInfoQuery01.ObjectName = "Basic_Item";
UgFDMetaInfoQuery01.Open;
2
3
4
5
//PasScript
UgFDMetaInfoQuery01.Connection := UgFDConnection01;
UgFDMetaInfoQuery01.MetaInfoKind := mkTableFields;
UgFDMetaInfoQuery01.ObjectName := 'Basic_Item';
UgFDMetaInfoQuery01.Open;
2
3
4
5
// Make sure to add code blocks to your code group
# 10. TUgDataSource
該元件為數據源元件,為數據控制類元件提供數據源。
# 10.1. 屬性
屬性 | 說明 |
---|---|
AutoEdit | 是否為數據控制類元件啟用編輯功能 |
DataSet | 設定數據源使用的數據集控制元件 |
# 11. TUgClientDataSet
該元件為記憶體數據集元件,其運行可不依賴於資料庫驅動程式,滿足單機「瘦」資料庫應用程式的需要。在FastWeb中,以下的專案需要點選選擇該屬性,點選[新增]
按鈕新增專案。
# 11.1. 屬性
屬性 | 說明 |
---|---|
Aggregates | 統計合計資訊 |
Constraints | 設定欄位的限制類型資訊 |
DataNodeName | 設定連線的node節點資料庫的名稱 |
FieldDefs | 設計數據表字段的相關資訊 |
IndexDefs | 設計數據表的索引資訊 |
Params | 設計數據查詢使用的參數資訊 |
FileName | 設定數據儲存檔案的名稱 |
# 11.2. 方法
# 11.2.1. CreateDataSet
procedure CreateDataSet;
建立數據集。
# 11.2.2. Open
procedure Open;
打開數據集。
# 11.2.3. First
procedure Open;
跳轉至第一條記錄。
# 11.2.4. Prior
procedure Prior;
跳轉至前一條記錄。
# 11.2.5. Next
procedure Next;
跳轉至后一條記錄。
# 11.2.6. Last
procedure Last;
跳轉至最後一條記錄。
# 11.2.7. Edit
procedure Edit;
編輯目前指向的記錄。
# 11.2.8. Cancel
procedure Cancel;
取消對當前記錄的修改。
# 11.2.9. Post
procedure Post;
提交數據。
# 11.2.10. Insert
procedure Insert;
插入記錄。
# 11.2.11. Append
procedure Append;
新增記錄。
# 11.2.12. Delete
procedure Delete;
刪除記錄。
# 11.2.13. Refresh
procedure Refresh;
重新整理記錄。
# 11.2.14. SubmitUpdates
procedure SubmitUpdates;
儲存並提交數據。
# 11.2.15. ToJSONObjectString
function ToJSONObjectString(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
將數據集中目前選擇的的數據行轉換為JSON對象的數據集。輸出的格式為欄位名稱與欄位值組成的鍵值對。
{"code":"Code1","name":1}
# 11.2.16. ToJSONArrayString
function ToJSONArrayString(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
將數據集中的數據轉換為JSONArray。是由JSON對像組成的佇列。
[{"code":"Code1","name":1},{"code":"Code2","name":2}]
# 11.2.17. ToJSONObject
function ToJSONObject(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONObject;
將數據集中目前指向的數據行轉換為JSON對像型別。
# 11.2.18. ToJSONArray
function ToJSONArray(const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONArray;
將數據集中的數據轉換為JSON對像序列型別。
# 11.2.19. SaveStructure
function SaveStructure: TJSONArray;
獲取目前的數據集的結構資訊,以JSONArray的方式輸出,包括數據表的欄位名稱、數據型別、大小等資訊。
# 11.2.20. LoadStructureJSONArray
procedure LoadStructureJSONArray(const AJSONArray: TJSONArray; const AOwns: Boolean = True);
將數據集的數據表結構從JSONArrary中載入。
# 11.2.21. LoadStructureJSONString
procedure LoadStructureJSONString(const AJSONString: string); overload;
將數據集的數據表結構從JSON格式的字串中讀取載入。
# 11.2.22. LoadFromJSONObject
procedure LoadFromJSONObject(const AJSONObject: TJSONObject; const AOwns: Boolean = True)
數據集從JSON對像中獲取載入單條記錄。
# 11.2.23. LoadFromJSONArray
procedure LoadFromJSONArray(const AJSONArray: TJSONArray; const AOwns: Boolean = True);
數據集從JSON對像序列中獲取載入多條記錄。
# 11.2.24. LoadFromJSONString
procedure LoadFromJSONString(const AJSONString: string);
數據集從JSON對象的字串中獲取載入數據記錄。
# 11.2.25. MergeFromJSONObject
procedure MergeFromJSONObject(const AJSONObject: TJSONObject; const AOwns: Boolean = True);
數據集從JSON對像中讀取單條數據記錄併合並至數據集中。
# 11.2.26. MergeFromJSONString
procedure MergeFromJSONString(const AJSONString: string);
數據集從JSON對像字串中讀取數據記錄併合並至數據集中。
# 11.2.27. ValidateJSONObject
function ValidateJSONObject(const AJSONObject: TJSONObject; const ALang: TLanguageType = enUS; const AOwns: Boolean = True): TJSONArray;
用於驗證JSON對像元件是否有效。
# 11.2.28. ValidateJSONString
function ValidateJSONString(const AJSONString: string; const ALang: TLanguageType = enUS): TJSONArray;
用於驗證JSON對像字串是否有效。
# 12. TUgDataSetProvider
該元件可作為中轉通道,將Query中的數據傳遞給ClientDataSet,實現離線數據的處理。
# 12.1. 屬性
屬性 | 說明 |
---|---|
DataSet | 設定傳遞給ClientDataSet的數據集來源 |
Options | 控制元件的設定選項 |
# 12.1.1. Options
property Options: TProviderOptions;
設定控制元件選項。
名稱 | 說明 |
---|---|
poFetchBlobsOnDemand | 若包含此項,則表示數據包中不包括BLOB欄位,如果客戶端的TUgClientDataSet控制元件的FetchOnDemand 屬性設為True ,那麼客戶端還是能自動地請求這些數據值;否則,客戶端應用程式必須使用客戶數據集的FetchBlobs方法來檢索BOLB數據。 |
poFetchDetailsOnDemand | 當用巢狀表的方式處理Master/Detail關係時,這裡的Provider表示主/明細表中的主表。若包含此項,則Detail表中的欄位將不會放入包中。不過,如果客戶端的TUgClientDataSet控制元件的FetchOnDemand 屬性為True ;那麼客戶端還是能自動的請求這些數據;否則, 要顯式呼叫FetchDetails 方法。 |
poIncFieldProps | 若包含此項,則表示數據包中將包含下列欄位屬性:Alignment 、MinValue 、DisplayLabel 、DisplayWidth 、 Visible 、DidplayFormat 、MaxValue 、EditFormat 、Currency 、EditMask 、 DisplayValues 等。 |
poCascadeDeletes | 當用巢狀表的方式處理Master/Detail 關係時,這裡的Provider表示主/明細表中的主表。若包含此項,則當主表中的記錄被刪除時,明細表中相應的記錄將自動地被刪除。 |
poCascadeUpdates | 當用巢狀表的方式處理Master/Detail關係時,這裡的Provider表示主/明細表中的主表。若包含此項,則當主表中主鍵欄位的值改變時,明細表中相應的記錄將自動地被更新。 |
poReadOnly | 若包含此項,則表示不允許客戶端數據集向Provider申請更新數據。 |
poAllowMultiRecordUpdates | 表示一個單一的更新將同時更新關聯的許多表的記錄,這有可能是通過觸發、參照完整性或自定義的SQL 語句來實現的。 |
poDisableEdits | 若包含此項,則表示不允許客戶端更新已經存在的數據值,否則,將觸發異常。 |
poDisableInserts | 若包含此項,則表示不允許客戶端插入一個新的記錄,否則,將觸發異常。 |
poNoReset | 若包含此項,則表示在提供數據前,不允許客戶端將游標指定在第一條記錄。 |
poAutoRefresh | 若包含此項,則表示Provider將用目前的記錄重新整理客戶端的數據集,而不管它是否已經申請更新。(該功能未實現) |
poPropogateChanges | 若包含此項,則表示伺服器對記錄的更新將返回給客戶端並反映到客戶端數據集中。 |
poAllowCommandText | 若包含此項,則表示客戶端可以過載相關數據集的 SQL語句、表的名字或預存程序。 |
# 13. TUgDBNavigator
此控制元件為資料庫導航控制元件,用於數據表的常規編輯修改等操作。包含 首頁
、前頁
、后頁
、末頁
、插入
、刪除
、編輯
、提交
、取消
等數據操作常用按鈕。
# 13.1. 屬性
屬性 | 說明 |
---|---|
DataSource | 設定控制元件繫結的數據源 |
# 14. TUgReportDataSet
報表欄位中使用的此元件是為報表設計服務的,不可直接置入模組視窗中使用。如需要使用報表設計的相關功能,請參考FastWeb報表設計說明。
# 15. TUgReportDataView
報表欄位中使用的此元件是為報表設計服務的,不可直接置入模組視窗中使用。如需要使用報表設計的相關功能,請參考FastWeb報表設計說明。
# 16. TUgReportDBGrid
報表欄位中使用的此元件是為報表設計服務的,不可直接置入模組視窗中使用。如需要使用報表設計的相關功能,請參考FastWeb報表設計說明。