当数据库提交的时候,我想现打印fastreport报表后提交,但是怎么才能做到只有fastreport正常打印才能成功提交哪?
我现在的代码是:
sql.clear;
sql.add('MySql');
ExecSQL;
frxreport2.LoadFromFile('report_ykt\hz.fr3');
frxreport2.PrepareReport;
frxreport2.PrintOptions.ShowDialog := False;
frxreport2.Print;
databean.con.CommitTrans;
ShowMessageBox('ok');
但是我发现就是打印不成功也会造成提交成功~ 因为牵扯的收费所以不能马虎~
我现在的代码是:
sql.clear;
sql.add('MySql');
ExecSQL;
frxreport2.LoadFromFile('report_ykt\hz.fr3');
frxreport2.PrepareReport;
frxreport2.PrintOptions.ShowDialog := False;
frxreport2.Print;
databean.con.CommitTrans;
ShowMessageBox('ok');
但是我发现就是打印不成功也会造成提交成功~ 因为牵扯的收费所以不能马虎~
应该用一个
databean.con.begintrans;
try
sql.clear;
sql.add('MySql');
ExecSQL;
frxreport2.LoadFromFile('report_ykt\hz.fr3');
frxreport2.PrepareReport;
frxreport2.PrintOptions.ShowDialog := False;
frxreport2.Print;
databean.con.CommitTrans;
ShowMessageBox('ok');
except
databean.con.rollbackTrans;
ShowMessageBox('error');
end;
也就是说,你只能保证在frxreport2.Print;调用成功后才提交到数据库,但是调用成功不能说明打印一定成功,要是打印机突然断电呢?纸张卡了呢?等等意外在发生时,你的frxreport2.Print并不会知道。
在达到提交数据库前打印,楼上阿日说的没错。但是我个人觉得没有必要,先提交再打印其实也差不多的。
procedure Print;
begin
try
try
frxreport2.LoadFromFile('report_ykt\hz.fr3');
frxreport2.PrepareReport;
frxreport2.PrintOptions.ShowDialog := False;
frxreport2.Print;
except
Exit;
end;
finally
databean.con.CommitTrans;
sql.clear;
sql.add('MySql');
ExecSQL;
ShowMessageBox('ok');
end;
end;