象这样,执行到query1.open就完蛋了...
        database1.StartTransaction;
        try
          query1.close;
          query2.close;
          query2.sql.Clear;
          query2.sql.Add('select * from kc');
          query2.Open;
          while not query2.Eof do
             begin
                query1.sql.Clear;
                query1.sql.Add('select settle_quantity,settle_money from g_month_account ');
                query1.sql.Add('where ga_month=:ga_month and g_code=:g_code');
                query1.ParamByName('ga_month').asstring:=lastmonth;   
                query1.ParamByName('g_code').asstring:=query2['g_code'];
                query1.open;

解决方案 »

  1.   

    去掉事务处理就没问题了,dbpower和pjy你们一定知道这是怎么回是吧?
      

  2.   

    你只有开始事务但缺少提交事务(database.commit......)。
      

  3.   

    阁下的程序不全。
    无法分析你的意图。
    不过你似乎忘记在循环内部重新关闭QUERY1了。
    重复打开当然出错。
      

  4.   

    可能是你的不完整, 你提的问题无法回答,但
     query1.sql.Clear;
     query1.sql.Add('select settle_quantity,settle_money from g_month_account ');
     query1.sql.Add('where ga_month=:ga_month and g_code=:g_code');
      我只觉得你的代码很冗余,上面的代码为什么不在Query1的 SQL属性里写好,然后再close-->parambyname(' para1').assring =:para1 ---> open 每次都CLear  再编译,多没效率!
      

  5.   

    应该是这样:database1.StartTransaction;
    try
      你做的操作;
      database1.Commit;
    except
      database1.rollback;
    end;你的事物没有完成!