function selectrow(dbgrid1,dbgrid2:Tdbgrid)
var
i,j: Integer;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));//这就是你选中的列
dbgrid2.DataSource.DataSet.append
for j := 0 to FieldCount-1 do
dbgrid2.DataSource.DataSet.fields[j].values=fields[j].values
dbgrid2.DataSource.DataSet.post
end;
end;
二:要实现的目的。
我想把TK表里符合f_leixin表类型的记录全部查询出来, 并将查询结果进行计数, 然后将值存入
f_leixin表的YT字段。
三: 我自己的编程
我主要是用加循环遍历的方式,用一条SQL语句,先进行查询统计、替换,然后循环f_leixin表,
这样查询的字段值就会根据随着LX表的指针移动进行变动,就实现了上述要求。
代码如下:
while not adotable2.eof do begin
lx1:=adotable2.fieldbyname('leixin').AsString;
lx1:=trim(lx1);
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.add('select count(*) as lnfen2 from tk where t11 like ''%'+lx1+'%'' group by t11');
adoquery2.Open;
lnfen2:=adoquery2.fieldbyname('lnfen2').asinteger;
adotable2.Edit;
adotable2.fieldbyname('yti').asinteger:=lnfen2;
adotable2.Next;
end;
end;
四:问题???]
用我自己的代码很慢,很慢。在网上别人告诉我这样可以:
begin
adotable2.Open;
adotable2.edit;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.sql.Add('update f_leixin set yti=(select count(*) from tk where f_leixin.leixin=tk.t11 )');
ADOQUery2.ExecSQL;
adoquery2.sql.clear;
adoquery2.sql.add('select * from f_leixin');
adoquery2.open;
END;
但是执行不了好像ACCESS数据库不支持此SQL语句。
来自:trf, 时间:2003-4-30 12:36:00, ID:1817331
对不起,应该这样,先创建一个表T1,存放满足下面条件记录:
select tk.t11,count(*) as A from tk,f_leixin on tk.t11=f_leixin.leixin
group by tk.t11
然后Update语句:
'update f_leixin,T1 set f_leixin.yti=T1.A where f_leixin.leixin=T1.t11