当数据库提交的时候,我想现打印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');
但是我发现就是打印不成功也会造成提交成功~ 因为牵扯的收费所以不能马虎~ 

解决方案 »

  1.   

    看了你的代码,只有commit 而没有 rollback.
    应该用一个
    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;
      

  2.   

    你只能确保在提交数据库之前成功地向Windows系统提交打印任务,而不能保证打印是真实成功打到纸张上了
    也就是说,你只能保证在frxreport2.Print;调用成功后才提交到数据库,但是调用成功不能说明打印一定成功,要是打印机突然断电呢?纸张卡了呢?等等意外在发生时,你的frxreport2.Print并不会知道。
    在达到提交数据库前打印,楼上阿日说的没错。但是我个人觉得没有必要,先提交再打印其实也差不多的。
      

  3.   


    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;
      

  4.   

    To 5楼,这种代码逻辑,就是不管是否打印,都会Commit.
      

  5.   

    如果打印不成功不推出异常(Exception),就无法进行控制,只能是通过Print当中弹出异常或者...(没使用过fastreport)