有两个表,结构如下:
表1
ANO ,ANAME, 
A1    N1 
A2    N2  
A3    N3      表2
主键为ANO,B_NO,
ANO ,ANAME, B_NO,    B_NAME
A1    N1     001        S1  
A1    N1     002        S2  
A1    N1     003        S3  
A1    N1     004        S4  
A1    N1     005        S5  
A1    N1     006        S6  
A1    N1     007        S7  所用控件adoquery,datasource,dbgrid
dbgrid1为表1的数据,
dbgrid2为表2的数据,
当在dbgrid1上选择A1这条记录,点复制按钮btn1时,弹出一个窗口,在其中的edit.text中输入A2,点确定后,语句能在表2中插入如下数据,并实时更新DBGRID2:
A2    N1     001        S1  
A2    N1     002        S2  
A2    N1     003        S3  
A2    N1     004        S4  
A2    N1     005        S5  
A2    N1     006        S6  
A2    N1     007        S7  烦请大家给各思路或代码~~~

解决方案 »

  1.   


    那就把筛选的数据放到数组里,然后逐条insert进去
      

  2.   

    SQL
    insert into 表2
    select 'A2', ANAME, B_NO, B_NAME where ANO = 'A1'
    其中'A2'、'A1'替换成你的变量即可
      

  3.   

    SQL codeinsert into 表2
    select 'A2', ANAME, B_NO, B_NAME from 表2 where ANO = 'A1'
      

  4.   

     假設
    dbgrid1 對應的 dataSet 為 adoquery1 
    dbgrid2 對應的 dataSet 為 adoquery2adoquery1.first;
    with adoquery1 do while not eof do 
    begin
     adoquery2.append;
     adoquery2.fieldbyname('ANO').AsString := Edit1.text;
     adoquery2.fieldbyname('ANAME').AsString := fieldbyname('ANAME').AsString ;
     adoquery2.fieldbyname('B_NO').AsString := fieldbyname('B_NO').AsString ;
     adoquery2.fieldbyname('B_NAME').AsString := fieldbyname('B_NAME').AsString ;
     next;
    end;
    if AdoQuery2.state in [dsInsert,dsEdit] then AdoQuery2.post;
      

  5.   

    type
      Ttab = Record
        aNO : String;
        aName:String;
        b_No :String;
        b_Name:String;
      end;
     tab : array of string;
     i : integer; setLength(Tab,AdoQuery1.RecordCount);i := 0;
    with adoquery1 do while not eof do 
    begin
      tab[i].aNo := Edit1.text;
      tab[i].aName := fieldbyname('ANAME').AsString ;
      tab[i].b_No  := fieldbyname('B_NO').AsString ;
      tab[i].b_Name:= fieldbyname('B_NAME').AsString ;
      next;
      inc(i);
    end;for i := 0 to length(Tab) -1 do 
    begin
     adoquery2.append;
     adoquery2.fieldbyname('ANO').AsString := tab[i].aNo;
     adoquery2.fieldbyname('ANAME').AsString := tab[i].aName;
     adoquery2.fieldbyname('B_NO').AsString := tab[i].b_No ;
     adoquery2.fieldbyname('B_NAME').AsString := tab[i].b_Name;end; 沒有環境,直接手寫,可能有筆誤,見諒。這是數組做法。
      

  6.   

    呵呵,有一个小小错误,tab : array of string; -> array of Ttab;
      

  7.   

    Dbgrid是与数据绑定的,只要数据集一更改,它会自动跟随数据集而改变的,无需编程所以只要对数据集进行插入就可以了,插入操作的语句为:
    insert into 表2 select 'A2', ANAME, B_NO, B_NAME where ANO = 'A1'
      

  8.   

    這個同數組多個沒有關系。是這樣的,
    Ttab = Record
        aNO : String;
        aName:String;
        b_No :String;
        b_Name:String;
      end;
    這個結構用來存放字段的,所以增加字段,只要相應增加結構的的成員就行了。