请问如何建立ADO的事务处理? 我找了以前的贴子,都不能显示。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转贴:我们以数据输入模块为例,说明开发客户/服务器应用程序时如何采用 SQL 语句实现数据处理功能。首先,判断是否已经有事务处理程序在运行,如果有,将其回卷(rollback);如果没有,则启动一个新的事务,为数据的最终处理做准备。其次,是设置 SQL 语句,并将其写入 TQuery 构件中。最后,将事务提交或回卷,至此完成一条记录的数据输入。 ---- 下面是以页面中的 TEdit 类型编辑框内容作为数据源,向数据库输入记录的过程代码: procedure DataInsert(const qName:TQuery;szDBName:string;iNum:Integer; iMark:array of Integer;eName:array of TEdit);var i : Integer; szSQL : string;begin if DataModule1.DataBase1.InTransaction=true then DataModule1.DataBase1.RollBack; DataModule1.DataBase1.StartTransaction; szSQL := 'INSERT INTO '+szDBName+' VALUES(' for i:=0 to iNum-1 do begin if iMark[i]=0 then szSQL := szSQL+eName[i].Text {非字符方式} else szSQL := szSQL+'"'+eName[i].Text+'"'; {字符方式} if i=iNum-1 then szSQL := szSQL+')' else szSQL := szSQL+','; end; qName.Close; {关闭查询} qName.SQL.Clear; {清SQL特性内容} qName.SQL.ADD(szSQL); {添加SQL内容} szSQL := 'SELECT * FROM '+szDBName; qName.SQL.ADD(szSQL); qName.Open; {返回结果集} DataModule1.DataBase1.Commit;end;---- 以上过程包含五个参数,实现从页面中的一系列编辑框中读取数据,并向指定数据表输入的功能。其中,参数 qName 为页面中所使用的 TQuery 类构件的名称;参数 szDBName 是数据表的名称;参数eName 是 TEdit 类型的数组,列出了页面中包含数据的各编辑框名称;参数 iNum 是数据表中的字段个数,也即编辑框的个数;参数 iMark 是一个整数类型的数组,该参数表明相应字段是以何种方式输入的,如果是字符方式,需要在数据前后两端加上引号。需要注意的是:在调用本过程之前,应将数据库连接打开: DataModule1.DataBase1.Connected := true;过程调用完成后,将数据库连接断开:DataModule1.DataBase1.Connected := false;---- 另外,开发网络数据库应用程序时,还可以使用存储过程,即:将预先编译过的 SQL 语句存储在服务器上。存储过程提前运行,且不与程序代码一同存储和编译,因此其对应主程序中的代码相对简洁,运行速度也较快。SQL 语句的集中存放,使其修改更容易。 ---- 要创建向数据表中输入数据的存储过程,代码编写举例如下: CREATE PROC ProcTest1 @inttest smallint ,@strtest char(4) outputAS INSERT INTO TEST_User.TRANS_TEST VALUES(@inttest,@strtest) SELECT @strtest,* FROM TEST_User.TRANS_TEST---- 以上代码向数据表 TEST_User.TRANS_TEST 添加数据,该数据表包括两个字段:第一个字段为 smallint 类型的数据,参数类型定为 Input(在存储过程中可缺省);第二个字段数据为长度为4 的字符类型,参数类型为 Output。 ---- 其模块程序的编写与 DataInsert 过程相似,区别主要在于模块的中间部分,对应的主要代码如下: StoredProc1.Close; {关闭存储过程}StoredProc1.Params[1].ParamType := ptInput; {设置存储过程的参数类型}StoredProc1.Params[1].AsInteger := 1; {设置存储过程中参数的数据}StoredProc1.Params[2].ParamType := ptOutput;StoredProc1.Params[2].AsString := 'abcd';StoredProc1.Open; {打开存储过程}---- 其中,StoredProc1 是 TStoredProc 类型的构件名称;Params[1] 是存储过程中的第一个参数,对应存储过程 ProcTest1 可以用ParamByName('@inttest')代替;存储过程的第二个参数与其类似。 Dim con As New ADODB.Connectioncon.ConnectionString = constringcon.Opencon.BeginTrans'Transaction begin herecon.CommitTrans'orcon.RollbackTrans cxgrid中如何判断当前选中的是GroupCell 怎样对登录密码加密 哪位会用KOL? 如何将整条SQL语句转化为字符串? 怎样使DBLookupComboBox自动显示其下拉列表中的第一个数据? 公式编辑器 delphi+opengl问题 消息:凤凰卫视在正播"911惊回首"!!! 大家还好吗,我是阿水,今天休息,特来想大家问好,见者有分 如何使用微软MSDN??? 谁能提供Delphi+ADO+SQL2000 的完美范例模版。在线等待! 如何实现动态的增加集合内的元素!!!
szDBName:string;iNum:Integer;
iMark:array of Integer;eName:array of TEdit);
var
i : Integer;
szSQL : string;
begin
if DataModule1.DataBase1.InTransaction=true then
DataModule1.DataBase1.RollBack;
DataModule1.DataBase1.StartTransaction;
szSQL := 'INSERT INTO '+szDBName+' VALUES('
for i:=0 to iNum-1 do
begin
if iMark[i]=0 then
szSQL := szSQL+eName[i].Text {非字符方式}
else
szSQL := szSQL+'"'+eName[i].Text+'"'; {字符方式}
if i=iNum-1 then
szSQL := szSQL+')'
else
szSQL := szSQL+',';
end;
qName.Close; {关闭查询}
qName.SQL.Clear; {清SQL特性内容}
qName.SQL.ADD(szSQL); {添加SQL内容}
szSQL := 'SELECT * FROM '+szDBName;
qName.SQL.ADD(szSQL);
qName.Open; {返回结果集}
DataModule1.DataBase1.Commit;
end;
---- 以上过程包含五个参数,实现从页面中的一系列编辑框中读取数据,并向指定数据表输入的功能。其中,参数 qName 为页面中所使用的 TQuery 类构件的名称;参数 szDBName 是数据表的名称;参数eName 是 TEdit 类型的数组,列出了页面中包含数据的各编辑框名称;参数 iNum 是数据表中的字段个数,也即编辑框的个数;参数 iMark 是一个整数类型的数组,该参数表明相应字段是以何种方式输入的,如果是字符方式,需要在数据前后两端加上引号。需要注意的是:在调用本过程之前,应将数据库连接打开: DataModule1.DataBase1.Connected := true;过程调用完成后,将数据库连接断开:
DataModule1.DataBase1.Connected := false;
---- 另外,开发网络数据库应用程序时,还可以使用存储过程,即:将预先编译过的 SQL 语句存储在服务器上。存储过程提前运行,且不与程序代码一同存储和编译,因此其对应主程序中的代码相对简洁,运行速度也较快。SQL 语句的集中存放,使其修改更容易。 ---- 要创建向数据表中输入数据的存储过程,代码编写举例如下: CREATE PROC ProcTest1
@inttest smallint
,@strtest char(4) output
AS
INSERT INTO TEST_User.TRANS_TEST
VALUES(@inttest,@strtest)
SELECT @strtest,* FROM TEST_User.TRANS_TEST
---- 以上代码向数据表 TEST_User.TRANS_TEST 添加数据,该数据表包括两个字段:第一个字段为 smallint 类型的数据,参数类型定为 Input(在存储过程中可缺省);第二个字段数据为长度为4 的字符类型,参数类型为 Output。 ---- 其模块程序的编写与 DataInsert 过程相似,区别主要在于模块的中间部分,对应的主要代码如下: StoredProc1.Close;
{关闭存储过程}
StoredProc1.Params[1].ParamType := ptInput;
{设置存储过程的参数类型}
StoredProc1.Params[1].AsInteger := 1;
{设置存储过程中参数的数据}
StoredProc1.Params[2].ParamType := ptOutput;
StoredProc1.Params[2].AsString := 'abcd';
StoredProc1.Open; {打开存储过程}
---- 其中,StoredProc1 是 TStoredProc 类型的构件名称;Params[1] 是存储过程中的第一个参数,对应存储过程 ProcTest1 可以用ParamByName('@inttest')代替;存储过程的第二个参数与其类似。
con.ConnectionString = constring
con.Open
con.BeginTrans
'Transaction begin here
con.CommitTrans
'or
con.RollbackTrans