将检索和数据修改分开, 修改采用事务的方式:
function ExecuteSQLs(Query: TQuery; pstrlSQL: TStringList): boolean;
var
nSQLCount, i: integer;
begin
i := 0;
nSQLCount := pstrlSQL.Count ;
if (nSQLCount = 0) then begin
result := true;
exit;
end;
try //试图开始执行一系列SQL语句。
try //试图开始一个事务
dmMain.dbMain.StartTransaction;
except
on E: Exception do begin
MsgBox('不能在数据库中开始一个事务!,请详细记录下面的错误信息后与系统管理员联系!', Application.Title, 64);
MsgBox('系统错误信息:' + E.Message, Application.Title, 64);
result := false;
exit;
end;
end;
//开始执行一系列的语句
if Query.Active then Query.Close;
for i := 0 to nSQLCount - 1 do begin
Query.SQL.Clear;
Query.SQL.Add(pstrlSQL.Strings);
Query.ExecSQL;
end;
i := 0;
try //试图提交改变
dmMain.dbMain.Commit;
result := true;
except
On E: Exception do begin//提交事务时出现了错误,Rollback整个事务。
dmMain.dbMain.Rollback;
MsgBox('不能提交数据!请详细记录下面的错误信息后与系统管理员联系!', '错误', 48);
MsgBox('系统错误信息:' + E.Message, '错误', 48);
result := false;
end;
End;
Except
On E: Exception do begin //执行中出现了问题,Rollback整个事务。
dmMain.dbMain.Rollback;
MsgBox('修改数据时出现错误!请详细记录下面的错误信息后与系统管理员联系!', '错误', 48);
MsgBox('系统错误信息:' + E.Message, '错误', 48);
MsgBox('错误语句:' + pstrlSQL.Strings, '错误', 48);
result := false;
end;
End;
end;