请问query.execsql这句是否会提交(50分)

  • 主题发起人 主题发起人 ohywm
  • 开始时间 开始时间
O

ohywm

Unregistered / Unconfirmed
GUEST, unregistred user!
我在query.sql 中写了个insert的语句
然后执行execsql语句
接下来我在未执行commit之前
查询了一下数据库发现表中已有数据插入了,
而我的目的是必须用commit才能让数据提交
请问如何做到??
 
procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
with CustomerQuery do
begin
Database1.StartTransaction;
try
ApplyUpdates;
{try to write the updates to the database};
Database1.Commit;
{on success, commit the changes};
except
Database1.Rollback;
{on failure, undo the changes};
raise;
{raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates;
{on success, clear the cache}
end;

end;
 
to ttdlh
不好意思,我不明白你写这几句是什么意思??
我的目的就是要让execsql这句不自动提交,而是要显式调用commit才提交
该如何做到呢?
 
你可能没有启动事务:
adoquery1.begin
trans
try
adoquery1.execsql;
adoquery1.commit;
except
adoquery1.rollback;
end;
 
应该已说清楚了。
 
procedure TFrm_gzjl.BitBtn5Click(Sender: TObject);
var
vygbh:string;
begin
if flag='addnew' then
begin
with adoqgzjl do
{新增数据}
begin
close;
sql.Clear;
sql.Add('insert t_gzjl values(:gh,:rzrq,:lzrq,:rzgs,:zw,:bz)');
parameters.ParamByName('gh').value:=trim(edit1.Text);
parameters.ParamByName('rzrq').value:=dateTostr(DateTimePicker1.Date);
parameters.ParamByName('lzrq').value:=dateTostr(DateTimePicker2.Date);
parameters.ParamByName('rzgs').value:=trim(edit3.Text);
parameters.ParamByName('zw').value:=trim(combobox2.Text);
parameters.ParamByName('bz').value:=trim(edit4.Text);
if not prepared then
prepared;
begin
trans;
try
ExecSQL;
commit;
except
rollback;
end;
end
else
begin
vygbh:=edit1.text;
//修改数据
with adoqgzjl do
begin
Close;
SQL.Clear;
SQL.Add('update t_gzjl set gh=:gh,rzrq=:rzrq,lzrq=:lzrq,rzgs=:rzgs,zw=:zw,bz=:bz');
SQL.Add('where');
SQL.Add('gh='''+trim(vygbh)+'''');
parameters.ParamByName('gh').value:=trim(edit1.Text);
parameters.ParamByName('rzrq').value:=dateTostr(DateTimePicker1.Date);
parameters.ParamByName('lzrq').value:=dateTostr(DateTimePicker2.Date);
parameters.ParamByName('rzgs').value:=trim(edit3.Text);
parameters.ParamByName('zw').value:=trim(combobox2.Text);
parameters.ParamByName('bz').value:=trim(edit4.Text);
ExecSQL;
end;
end;
with adoqgzjl do
//刷新表格//
begin
close;
sql.Clear;
sql.add('select * from t_gzjl where gh='''+trim(edit1.text)+'''');
If Not prepared then
adoqgzjl.Prepared;
open;
end;
setbutton;
//panel1.enabled:=false;}
end;

这个有错吗?
 
to bernhn
你用的是ado控件,我现在用的是query控件:)
另:我之所以不让execsql自动提交,是因为我接下来还要执行一个insert 操作
想让这两个insert操作都执行完后才一起commit!
举例如下
with query1 do
sql.clear;
sql.add('insert .....');
execsql;
sql.clear;
sql.add('insert ......');
execsql;
DM.commit ;
我的目的就是第一个execsql执行后不能提交,而是要在第二个
execsql后,让DM.commit 来一起提交!!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部