procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
ADOQ: TADOQUERY;
begin
ADOQ := TADOQUERY.Create(SELF);
if IsInputNil then begin
Application.MessageBox('记录添加失败!合同编号不能为空!请修改合同编号!',
'出错信息!', MB_ICONERROR);
DBEdit1.SetFocus;
Exit;
end;
if ExtRec then begin
Application.MessageBox('记录添加失败,记录已存在!请修改合同编号!',
'出错!', MB_ICONERROR);
Edit1.SetFocus;
Exit
end
else begin
if DBEdit1.Text <> sOldID then begin
if ExtRec then begin
Application.MessageBox('记录修改失败,记录已存在!请修改合同编号!',
'出错信息', MB_ICONERROR);
Edit1.SetFocus;
Exit;
end;
end;
with ADOQ do begin
CONNECTION := unit2.DataModule2.ADOConnection1;
unit2.DataModule2.ADOConnection1.BeginTrans;
try
for I := sTablename.Count - 1 downto 0 do begin
if sTablename[i] = 'TID' then Continue; SQL.Text := 'INSERT into ' + sTablename[i] +
' (hetong) values (''' + Edit1.text + ''')'; ExecSQL; end;
unit2.DataModule2.ADOConnection1.CommitTrans;//Commits an open transaction.
except
unit2.DataModule2.ADOConnection1.RollbackTrans;//Rolls back an active transaction
为什么要try....except 去掉它为什么不行
var
I: Integer;
ADOQ: TADOQUERY;
begin
ADOQ := TADOQUERY.Create(SELF);
if IsInputNil then begin
Application.MessageBox('记录添加失败!合同编号不能为空!请修改合同编号!',
'出错信息!', MB_ICONERROR);
DBEdit1.SetFocus;
Exit;
end;
if ExtRec then begin
Application.MessageBox('记录添加失败,记录已存在!请修改合同编号!',
'出错!', MB_ICONERROR);
Edit1.SetFocus;
Exit
end
else begin
if DBEdit1.Text <> sOldID then begin
if ExtRec then begin
Application.MessageBox('记录修改失败,记录已存在!请修改合同编号!',
'出错信息', MB_ICONERROR);
Edit1.SetFocus;
Exit;
end;
end;
with ADOQ do begin
CONNECTION := unit2.DataModule2.ADOConnection1;
unit2.DataModule2.ADOConnection1.BeginTrans;
try
for I := sTablename.Count - 1 downto 0 do begin
if sTablename[i] = 'TID' then Continue; SQL.Text := 'INSERT into ' + sTablename[i] +
' (hetong) values (''' + Edit1.text + ''')'; ExecSQL; end;
unit2.DataModule2.ADOConnection1.CommitTrans;//Commits an open transaction.
except
unit2.DataModule2.ADOConnection1.RollbackTrans;//Rolls back an active transaction
为什么要try....except 去掉它为什么不行
解决方案 »
- WIN7下如何实现后台找色?就是窗口被挡住情况下。
- 还是那天那个问题,数据表格是真实的,也给出了数据.
- 一个关于动态生成QRshape的问题
- 请教:主窗体为MDI,子窗体的建立写到了DLL里,代码见内,如何判断使子窗体只CREATE一次??
- 请教c++builder及delphi 高手?帮帮忙,急着呢!!
- 有没有什么好方法设置TEdit控件的取值范围?
- 用vc写得dll如何在delphi中调用?参数要如何写?
- 寻找汉->英词库
- **************如何在DELPHI里配置BDE呢 请给个详细的代码***********************
- 如何截获Ctrl+Alt+Del?
- 请大家推荐这样一个控件?
- qq的窗口自动弹出是怎么弄的啊?
for I := sTablename.Count - 1 downto 0 do begin
if sTablename[i] = 'TID' then Continue;
什么意思
Try Except 是做异常处理,
如果正常执行
如
Try
执行SQL语句
showmessage('成功');
exept
showmessage('不成功');
exit;
end;
try
... // 正常执行
except
... // 出现异常后执行
end;还有一种
try
... //正常执行
finally
... // 不管上面出现什么情况,完成后都将执行这一行语句
end;
为什么要去掉那,留着多好!!严重同意。另外,代码似乎还有值得修改的地方,如下with ADOQ do begin
CONNECTION := unit2.DataModule2.ADOConnection1;
unit2.DataModule2.ADOConnection1.BeginTrans;
try
for I := sTablename.Count - 1 downto 0 do begin
if sTablename[i] = 'TID' then Continue; SQL.Text := 'INSERT into ' + sTablename[i] +
' (hetong) values (''' + Edit1.text + ''')'; ExecSQL; end;
unit2.DataModule2.ADOConnection1.CommitTrans;//Commits an open transaction.
except
unit2.DataModule2.ADOConnection1.RollbackTrans;//Rolls back an active transaction
我的意见是改成以下的代码: CONNECTION := unit2.DataModule2.ADOConnection1;
try
if unit2.DataModule2.ADOConnection1.InTraction = true then
begin
unit2.DataModule2.ADOConnection1.CommitTraction;
unit2.DataModule2.ADOConnection1.BeginTraction;
end
else
unit2.DataModule2.ADOConnection1.BeginTractioin;
with ADOQ do
begin
for I := sTablename.Count - 1 downto 0 do
begin
if sTablename[i] = 'TID' then Continue;
SQL.Text := 'INSERT into ' + sTablename[i] +
' (hetong) values (''' + Edit1.text + ''')'; ExecSQL;
end;
unit2.DataModule2.ADOConnection1.CommitTrans;//Commits an open transaction.
end;
except
on EdataBaseError do
unit2.DataModule2.ADOConnection1.RollbackTrans;//Rolls back an active transaction
end;
大致是这样