主要思路是这样的:开票前用户的交费状态为未交费,等收过钱开票后,使用户的交费状态为已交费。代码如下:
Userinf 为表名,UserSta为字段名,表示用户的交费状态procedure TKP.BtnPrnClick(Sender: TObject);
begin
  ServMainForm.Query1.Close;
  ServMainForm.Query1.sql.clear;
  ServMainForm.Query1.sql.Add('Update Userinf Set UserSta= '''+'是'+''' Where UserNum = 123456');  //更新用户123456的交费状态
  ServMainForm.Query1.Open;  
  ServMainForm.RMReport4.PrintReport; //打印报表
end;但执行时发生异常,提示‘当前提供程序不支持同单一执行返回多个记录集’和'Query1: CommandText does not return a result set'。这是怎么回事?该如何解决呢?谢谢!

解决方案 »

  1.   

    当然 Query1 没有返回记录集
    这时的 Query1 要用 Execute 执行ServMainForm.RMReport4.PrintReport; 这句我不明白
      

  2.   

    procedure TKP.BtnPrnClick(Sender: TObject);
    begin
      ServMainForm.Query1.Close;
      ServMainForm.Query1.sql.clear;
      ServMainForm.Query1.sql.Add('Update Userinf Set UserSta= '''+'是'+''' Where UserNum = 123456');  //更新用户123456的交费状态
      ServMainForm.Query1.ExcecSQL;  
      ServMainForm.RMReport4.PrintReport; //打印报表
    end;
      

  3.   

    ServMainForm.Query1.Open;//错误
      ServMainForm.Query1.ExcecSQL; 
      

  4.   

    如果你要打印当前交费用户回执单,你要用select语句。
    在ServMainForm.RMReport4.PrintReport之前插入:
      ServMainForm.Query1.Close;
      ServMainForm.Query1.sql.clear;
      ServMainForm.Query1.sql.Add('Select * from Userinf where UserNum = 123456');
      ServMainForm.Query1.Open;
      

  5.   

    同意梦想query的requestlive 设置为   TRUE
      

  6.   

    ServMainForm.Query1.ExcecSQL;  
    ServMainForm.RMReport4.Print; //打印
    //ServMainForm.RMReport4.Preview//预览
      

  7.   

    procedure TKP.BtnPrnClick(Sender: TObject);
    begin
      ServMainForm.Query1.Close;
      ServMainForm.Query1.sql.clear;
      ServMainForm.Query1.sql.Add('Update Userinf Set UserSta= ''是'' Where UserNum = 123456');  //更新用户123456的交费状态
      ServMainForm.Query1.ExecSQL;
      ServMainForm.RMReport4.PrintReport; //打印报表
    end;
      

  8.   

    ServMainForm.Query1.Open;//这是做的,要改用EXECSQL
    ServMainForm.Query1.execsql;
    //只有有数据集返回时才用到OPEN.其它的如INSERT ,UPDATE,DELETE都是用EXECSQL
      

  9.   

    update操作要用execsql来操作,因为它仅仅是修改,而不返回数据的,同样,insert、delete、drop等也是要用ExecSQL执行的。如果语句是有返回结果的,比如Selete语句,那就要用Open了
      

  10.   

    而事实是,换成 ExecSQL 也不行。
      

  11.   

    execsql和open方法都是执行SQL语句的功能,你用UPDATE、DELETE或INSERT
    当然没有数据集(set)返回,若你需要返回数据集,请用SELECT语句并用
    active:=true;来返回数据集,否则程序只是影响数据库,但并不返回结果
      

  12.   

    但我的Query是ADOQuery,好像没有这个requestlive 属性。  ServMainForm.Query1.Close;
      ServMainForm.Query1.sql.clear;
      ServMainForm.Query1.sql.Add('Update Userinf Set UserSta= '''+'是'+''' Where UserNum = '+Trim(Edit2.text));  //更新状态
      ServMainForm.Query1.ExecSQL;
      ServMainForm.RMReport4.PrintReport;  //打印票据上面的代码依旧有问题。
    我只是想使用 ReportMachine 打印完报表后,把用户的交费状态改为否。仅此而已。诸位谁能提供一些建议?分不够可以再加!只要问题能解决,分不是问题。帮忙看看吧,各位老大,谢谢!
      

  13.   

    既然是ADOQUERY,将PREPARED设置为TRUE,
    ServMainForm.Query1.ExecSQL;
      

  14.   

    谢谢ZbDerek(虚竹)也谢谢其他兄弟。问题已解决。谢谢!