Delphi ADOQuery事务提交怎么做?

fupeng0616 2016-12-22 03:51:58
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit)' +
' values(:ClientName,:pass,:Phone,:address,:bankNo,:Timer,:Deposit)'; //添加信息
ADOQuery.Parameters.ParamByName('ClientName').value := Client.Text ; //给字段赋值
ADOQuery.Parameters.ParamByName('pass').Value := trim(Pass.Text);
ADOQuery.Parameters.ParamByName('Phone').Value := trim(PhoneNumber.Text);
ADOQuery.Parameters.ParamByName('Address').Value := trim(Address.Text);
ADOQuery.Parameters.ParamByName('BankNo').Value :=trim(BankNo.Text);
ADOQuery.Parameters.ParamByName('Timer').Value := RegisterTime.Date;
ADOQuery.Parameters.ParamByName('Deposit').Value := strtoint(Deposit.Text);
ADOQuery.ExecSQL; //执行SQL
ADOQuery.sql.text :='commit'; //事务提交
ADOQuery.ExecSQL;

编译没报错,运行没报错,为啥就是数据库中没有数据?
...全文
1163 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fupeng0616 2016-12-23
  • 打赏
  • 举报
回复
引用 16 楼 lyhoo163 的回复:
1、楼主要搞清楚,什么是事务处理。事务处理是指若干个数据处理,要一次性全部完成,只要任何一个处理失败,退回到原处。你的代码不是事务处理,是正常的数据读写。 2、你的代码分二种情况: (1)直接连接数据库文件,它就是一个插入数据行。 (2)如果是C/S模式,它仅仅是向当前的DBGrid的数据集中,插入了一行数据。并示插入到数据库文件的表中。还要通过更新DBGrid数据库集到表中,才能完成真正的插入操作。 3、你的语句修改为:
var s:string;

  DateTimetoString(S,'yyyy-MM-dd hh:nn:ss',RegisterTime.Date); // 格式自己修改一下
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit) values('+
                       #39+Client.Text+#39+','+
                       #39+Pass.Text+#39+','+
                       #39+PhoneNumber.Text+#39+','+
                       #39+Address.Text+#39+','+
                       #39+BankNo.Text+#39+','+
                       #39+S+#39+','+
                       #39+Deposit.Text+')';
  ADOQuery.ExecSQL; 
是我想错了,看百度上的,被误导了,问题解决了,我以为通过DateTimePicker.date得到的值可以直接存进数据库的,虽然不是很明白,想问一下数据库的date类型包括时分秒吗?
不得闲 2016-12-23
  • 打赏
  • 举报
回复
引用 15 楼 santiaodahan 的回复:
调用数据连接方法:

ADOConnection1.BeginTrans;         //开始新事务
try
     //操作数据...
     ADOConnection1.CommitTrans;   //提交事务
except
     ADOConnection1.RollbackTrans; //异常时回滚事务
end;
另外,对数据集组件来说,查询操作用Open,更新、插入操作用ExecSQL。
别人问的事物提交,我只同意这个
lyhoo163 2016-12-23
  • 打赏
  • 举报
回复
1、楼主要搞清楚,什么是事务处理。事务处理是指若干个数据处理,要一次性全部完成,只要任何一个处理失败,退回到原处。你的代码不是事务处理,是正常的数据读写。 2、你的代码分二种情况: (1)直接连接数据库文件,它就是一个插入数据行。 (2)如果是C/S模式,它仅仅是向当前的DBGrid的数据集中,插入了一行数据。并示插入到数据库文件的表中。还要通过更新DBGrid数据库集到表中,才能完成真正的插入操作。 3、你的语句修改为:
var s:string;

  DateTimetoString(S,'yyyy-MM-dd hh:nn:ss',RegisterTime.Date); // 格式自己修改一下
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit) values('+
                       #39+Client.Text+#39+','+
                       #39+Pass.Text+#39+','+
                       #39+PhoneNumber.Text+#39+','+
                       #39+Address.Text+#39+','+
                       #39+BankNo.Text+#39+','+
                       #39+S+#39+','+
                       #39+Deposit.Text+')';
  ADOQuery.ExecSQL; 
lyhoo163 2016-12-23
  • 打赏
  • 举报
回复
数据库的date类型,TData不含时分秒,TDataTime含时分秒。
santiaodahan 2016-12-22
  • 打赏
  • 举报
回复
调用数据连接方法:

ADOConnection1.BeginTrans;         //开始新事务
try
     //操作数据...
     ADOConnection1.CommitTrans;   //提交事务
except
     ADOConnection1.RollbackTrans; //异常时回滚事务
end;
另外,对数据集组件来说,查询操作用Open,更新、插入操作用ExecSQL。
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
有木有大神啊,搞了一天了,到底怎么回事
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
引用 12 楼 juno_393 的回复:
另外,先给你的ADOQuery的sql赋值,在open。因为给ADO赋值为初始信息。初始信息为空,打开失败。 ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit)' + ' values(:ClientName,:pass,:Phone,:address,:bankNo,:Timer,:Deposit)'; //添加信息 ADOQuery。open;
\ 你打的这段不给他们赋值的话,根本就不是SQL语句,我Open不就直接报错了吗
juno_393 2016-12-22
  • 打赏
  • 举报
回复
另外,先给你的ADOQuery的sql赋值,在open。因为给ADO赋值为初始信息。初始信息为空,打开失败。 ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit)' + ' values(:ClientName,:pass,:Phone,:address,:bankNo,:Timer,:Deposit)'; //添加信息 ADOQuery。open;
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
引用 9 楼 juno_393 的回复:
[quote=引用 7 楼 fupeng0616 的回复:] [quote=引用 5 楼 juno_393 的回复:] 我才看你的代码。你都没有打开数据集怎么往里面写数据啊。 ADOQuery.Close; ADOQuery.OPEN;//打开数据集 ADOQuery.SQL.Clear;
我加了试试,报错了 ADOQuery : Missing SQL property[/quote] 看一下你的ADOQuery的active是不是为True,如果是改为false[/quote] 是false
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
引用 8 楼 juno_393 的回复:
你要给你数据集中的数据赋值,不打开肯定会报错啊。
我加了,各种报错,而且不是说用select 时才用 adoquery.open,其他的都用ExecSQL吗
juno_393 2016-12-22
  • 打赏
  • 举报
回复
引用 7 楼 fupeng0616 的回复:
[quote=引用 5 楼 juno_393 的回复:] 我才看你的代码。你都没有打开数据集怎么往里面写数据啊。 ADOQuery.Close; ADOQuery.OPEN;//打开数据集 ADOQuery.SQL.Clear;
我加了试试,报错了 ADOQuery : Missing SQL property[/quote] 看一下你的ADOQuery的active是不是为True,如果是改为false
juno_393 2016-12-22
  • 打赏
  • 举报
回复
你要给你数据集中的数据赋值,不打开肯定会报错啊。
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
引用 5 楼 juno_393 的回复:
我才看你的代码。你都没有打开数据集怎么往里面写数据啊。 ADOQuery.Close; ADOQuery.OPEN;//打开数据集 ADOQuery.SQL.Clear;
我加了试试,报错了 ADOQuery : Missing SQL property
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
引用 5 楼 juno_393 的回复:
我才看你的代码。你都没有打开数据集怎么往里面写数据啊。 ADOQuery.Close; ADOQuery.OPEN;//打开数据集 ADOQuery.SQL.Clear;
但是我没有在ADOQuery中写SQL语句,OPEN有什么用?
juno_393 2016-12-22
  • 打赏
  • 举报
回复
我才看你的代码。你都没有打开数据集怎么往里面写数据啊。 ADOQuery.Close; ADOQuery.OPEN;//打开数据集 ADOQuery.SQL.Clear;
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
觉得拼接麻烦,而且容易出错,这样赋值好看一点
fupeng0616 2016-12-22
  • 打赏
  • 举报
回复
还是报错 ADOQuery : Cannot perform this operation on a closed dataset
sxwhkj 2016-12-22
  • 打赏
  • 举报
回复
奇怪,你为什么不拼接成一个sql语句,而是以参数形式传递呀。 ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.text := 'insert into Client (C_name,C_pass,C_Phone,C_Address,C_BankNo,C_Time,C_Deposit)' + ' values(‘’‘+ Client.Text+’‘’,‘’‘+trim(Pass.Text);+''','''+ trim(PhoneNumber.Text)+''','''+trim(Address.Text)+''','''+trim(BankNo.Text)+''','''+ datetostr(RegisterTime.Date)+''','+Deposit.Text)'; //添加信息 ADOQuery.ExecSQL; //执行SQL
juno_393 2016-12-22
  • 打赏
  • 举报
回复
你上面执行的数据只是保存在了ADO中,并没有提交到数据库。 加上ADOQuery.UpdateBatch(arAll);将ADO中的数据更新到数据库

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧