AqryMainTemp.Close;
    AqryMainTemp.SQL.Clear;
    AqryMainTemp.SQL.Add('select code, e_inc, e_name from');
    AqryMainTemp.SQL.Add('(');
    AqryMainTemp.SQL.Add('select * from st_mg_count_main where prod_no = ' + quotedstr(CmbProduct.Text) + ' and code not in (' + code + ') and e_stint is not null');
    AqryMainTemp.SQL.Add(') main_temp');
    AqryMainTemp.SQL.Add('where code in');
    AqryMainTemp.SQL.Add('(');
    AqryMainTemp.SQL.Add('select max(code) code from');
    AqryMainTemp.SQL.Add('(');
    AqryMainTemp.SQL.Add('select * from st_mg_count_main where prod_no = ' + quotedstr(CmbProduct.Text) + ' and code not in (' + code + ') and e_stint is not null');
    AqryMainTemp.SQL.Add(') main_tmp');
    AqryMainTemp.SQL.Add('group by e_inc, e_name');
    AqryMainTemp.SQL.Add(')');
    AqryMainTemp.Open;
    // 3、将2中查出来的数据插入到标准零件库当中,先将主表数据插入,然后根据2中的code到st_mg_count_detail查找出被插入零件对应的
    // 工序,并插入到标准零件库中的从表中
    if AqryMainTemp.RecordCount > 0 then
    begin
      try
        DataModule2.ADOConnection1.BeginTrans;
        AqryMainTemp.First;
        while not AqryMainTemp.Eof do
        begin
          e_inc_temp := AqryMainTemp.FieldByName('e_inc').AsString;
          e_name_temp := AqryMainTemp.FieldByName('e_name').AsString;
          if AqryMain.RecordCount > 0 then
          begin
            AqryMain.Last;
            id := AqryMain.FieldByName('codeid').AsInteger + 1;
          end
          else
            id := 1;
          AqryMain.Append;
          AqryMain.FieldByName('codeid').AsInteger := id;
          AqryMain.FieldByName('e_inc').AsString := e_inc_temp;
          AqryMain.FieldByName('e_name').AsString := e_name_temp;
          AqryMain.Post;
          AqryMainTemp.Next;
        end;
        DataModule2.ADOConnection1.CommitTrans;
      except
        DataModule2.ADOConnection1.RollbackTrans;
        Application.MessageBox('导入汇总工序时发生错误,无法导入!', '系统提示', mb_ok + mb_iconwarning);
        raise;
        Screen.Cursor := crDefault;
        exit;
      end;
      Screen.Cursor := crDefault;
      Application.MessageBox('汇总工序导入完毕!', '系统提示', mb_ok + mb_iconinformation);
    end;
大家看一下这段程序,我想让AqryMainTemp查出来的数据(大概三千多条)循环的插入到AqryMain中去,但是只执行了一条,就跳出了循环,设置断点发现,在插入了一条数据以后,AqryMainTemp里的查询竟然变成了AqryMain中的查询;他们分别是连接两个表,这是怎么回事?程序里哪里写的有问题吗?麻烦大侠们帮助一下,在线等~~~~~~~~

解决方案 »

  1.   


    你把这句放到这里试试
    AqryMain.Post;
    DataModule2.ADOConnection1.CommitTrans;
      

  2.   

    这种情况有两种可能:1 、有鬼了
    2、AqryMainTemp.RecordCount 本来就等于1
      

  3.   

    if AqryMain.RecordCount > 0 then
    这句怎么没有上下文阿
      

  4.   


    AqryMain的默认SQL是查询select * from st_parts
    直接先判断这里的数量
      

  5.   

    设置断点 检查 AqryMainTemp.RecordCount的值与AqryMain.RecordCount的值
      

  6.   

        AqryMainTemp.Open;
        // 3、将2中查出来的数据插入到标准零件库当中,先将主表数据插入,然后根据2中的code到st_mg_count_detail查找出被插入零件对应的
        // 工序,并插入到标准零件库中的从表中增加两行 就好了
    AqryMainTemp.last;
    AqryMainTemp.first;
        if AqryMainTemp.RecordCount > 0 then
      

  7.   

    按照以上各位的建议,我都试过了,设置断点发现SQL的变化是发生在AqryMain.Post;之后的,之前两个ADOQuery的数量不相同,AqryMainTemp是三千条左右,AqryMain则只有三条数据,在Post之后,AqryMainTemp里的SQL就变成了查询AqryMain操作的表的SQL,数量也跟AqryMain相同了,再次请大侠们帮助看看,是不是有什么属性没设置好,另外这两个ADOQuery是连接同一个ADOConnection的,不知道有没有关系呢??
      

  8.   

    终于找到了~~,我在AqryMain的BeforePost方法中做了一个判断用到了AqryMainTemp,这里就把AqryMainTemp的SQL给改变了,谢谢大家,结贴散分啦~~