adoquery怎样循环插入多行记录?最好有例子 adqty.sql.text:= sql语句;
 adqty.Open;循环体内
//-------------- 
      adqty.Append;
 with DBGrid1.DataSource.DataSet do
    begin      adqTY.FieldByName('规格').AsString := FieldByName('规格').AsString;
      adqTY.fieldbyname('名称').AsString := FieldByName('名称').AsString;
    end;
//---------错误:当第一次执行时append时没错,第二次执行到append时,就出错
:无法插入空行,行必须有一列值集

解决方案 »

  1.   

    这样做效率太低,何不尝试用SQL的insert语句?
      

  2.   

    我是界面上动态操作的(两个dbgrid之间),也就是选一条插一条,或选一条删一条,
      

  3.   

    adqty.Append;
     with DBGrid1.DataSource.DataSet do
        begin      adqTY.FieldByName('规格').AsString := FieldByName('规格').AsString;
          adqTY.fieldbyname('名称').AsString := FieldByName('名称').AsString;    end;
      

  4.   

    adqty.Append;
     with DBGrid1.DataSource.DataSet do
        begin      adqTY.FieldByName('规格').AsString := FieldByName('规格').AsString;
          adqTY.fieldbyname('名称').AsString := FieldByName('名称').AsString;
          POST;//这个
        end;
      

  5.   

    你没有提交啊老兄!
    不过这样的操作最好给连接加 事物
    或用批模式adqty.LockType=ltBatchOptimistic;全完成后
    adqty.UpdateBatch();
    中途出错就
    adqty.CancelBatch();下面的会比你那样写快一点;
    adqTY.fieldbyname('名称').Value := FieldByName('名称').Value;
      

  6.   

    用insert语句
    open;
     begin
      ......... 
     插入............
      next;  
     end;
      

  7.   

    再晕~~
          adqty.Append;
     with DBGrid1.DataSource.DataSet do
        begin      adqTY.FieldByName('规格').AsString := FieldByName('规格').AsString;
          adqTY.fieldbyname('名称').AsString := FieldByName('名称').AsString;
          adqTY.post;
        end;
      

  8.   

    如果几百、千条记录也这么弄的话...客户会Delete你的程序的,呵呵~~
      

  9.   

    如果是这样!!!!(我是界面上动态操作的(两个dbgrid之间),也就是,或选一条删一条,)
    那还是不要用SQL 语句。删除 还是用批的比较好。
    没打开 adqty 之前或把 adqty.LockType 在设计时就改 ltBatchOptimistic
    adqty.LockType=ltBatchOptimistic;
    adqty.Open;//然后你 选一条插一条 因为 ltBatchOptimistic 模式就是在本地操作不会写数据库
    //速度也不会慢。
    adqty.Append;
    with DBGrid1.DataSource.DataSet do
    begin      adqTY.FieldByName('规格').Value := FieldByName('规格').Value;
          adqTY.fieldbyname('名称').Value := FieldByName('名称').Value;
          adqTY.post;
    end;
    ......
    //最后 点击保存“按钮” 的时候adqTY.Connection.BeginTrans
    try
      adqty.UpdateBatch();
      ...进行其他任务....
    except
      adqty.Connection.RollbackTrans;
      Exit;
    end;
    QueryCA_Voch.Connection.CommitTrans
    //如果你的数据库没事物 就不要加 BeginTrans,RollbackTrans,CommitTrans 这三行!
      

  10.   

    QueryCA_Voch = adqty 写错了,^_^
      

  11.   

    向你这种 (我是界面上动态操作的(两个dbgrid之间),也就是,或选一条删一条)。
    操作 在没完成之前是不可以写数据库的。
    一般都是用 
    adqty.LockType=ltBatchOptimistic;
    adqty.UpdateBatch();
    两个dbgrid 连的 Query 都要这样。adqty.Append;
    with DBGrid1.DataSource.DataSet do
    begin      adqTY.FieldByName('规格').Value := FieldByName('规格').Value;
          adqTY.fieldbyname('名称').Value := FieldByName('名称').Value;
          adqTY.post;
          {DBGrid1.DataSource.DataSet.}
    Delete;
    end;
      

  12.   

    用insert语句
    open;
     begin
      ......... 
     插入............
      next;  
     end;