数据库控件
# 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报表设计说明。