有两个表,结构如下:
表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 烦请大家给各思路或代码~~~
那就把筛选的数据放到数组里,然后逐条insert进去
insert into 表2
select 'A2', ANAME, B_NO, B_NAME where ANO = 'A1'
其中'A2'、'A1'替换成你的变量即可
select 'A2', ANAME, B_NO, B_NAME from 表2 where ANO = 'A1'
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;
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; 沒有環境,直接手寫,可能有筆誤,見諒。這是數組做法。
insert into 表2 select 'A2', ANAME, B_NO, B_NAME where ANO = 'A1'
Ttab = Record
aNO : String;
aName:String;
b_No :String;
b_Name:String;
end;
這個結構用來存放字段的,所以增加字段,只要相應增加結構的的成員就行了。