我的ADOQuery是ltBatchOptimistic的,为什么我在保存的时候提示不是在insert或edit模式下无法无法保存我的代码如下
if (ADOQuery1.RecordCount>0)
begin
    ADOQuery2->First();
    while (!ADOQuery2->Eof)
    begin
         //dm是主键,所以必须赋上值
         ADOQuery2.FieldByName("dm").AsString=ADOQuery1.FieldByName("dm").AsString;
         ADOQuery2.Next();
    end
end
//就是执行上面ADOQuery2.FieldByName("dm").AsString=ADOQuery1.FieldByName("dm").AsString;这一句会出错,假如是但是主键,我不赋值不行呀,郁闷呀。
ADOConnection1->BeginTrans();//
.
.
.
ADOConnection1->CommitTrans();

解决方案 »

  1.   

    楼主你的以下这段代码根本就是错误的
    if (ADOQuery1.RecordCount>0)
    begin
        ADOQuery2->First();
        while (!ADOQuery2->Eof)
        begin
             //dm是主键,所以必须赋上值
             ADOQuery2.FieldByName("dm").AsString=ADOQuery1.FieldByName("dm").AsString;
             ADOQuery2.Next();
        end
    end;
    如果你要想通过ADOQuery2向数据库添加记录的话应该是这样的:
    if (ADOQuery1.RecordCount>0)
    begin
        ADOQuery1->First();
        //如果你的ADOQuery2没有打开的话,请先在这里打开
        //示例:
        //ADOQuery2->Sql.Clear();//楼主是用CB写的吧
        //ADOQuery2->Close();
        //ADOQuery2->Sql.Add('select * from 要插入数据的表名字');//如果你该表数据多的话,随便写一个where条件过滤数据
        //ADOQuery2->Open();
        while (!ADOQuery1->Eof)
        begin
             //dm是主键,所以必须赋上值
             ADOQuery2->Insert();
             ADOQuery2->FieldByName("dm").AsString=ADOQuery1.FieldByName("dm").AsString;
             ADOQuery2->Post();
             ADOQuery1->Next();
        end;
    end;
      

  2.   

    我的录入界面是主细表的,主表跟细表是在同一个录入界面完成的,你这样也是不对的,我假如刚开始的时候dm=000,假如ADOQuery2增加一条,这个时候adoquery2增加的的dm为000,假如我这个时候把主表的dm改为001,哪我这个时候adoquery2增加的就为001为,你说像你这样我能对呀,再说我假如主表不保存,哪你细表的记录不是多出来了吗?
      

  3.   

    jason(jason) ( ) 信誉:100 
    虽然你没有把我的问题解决,但是还是谢谢你,后面我看也没有人关注,所以我就结账了。