二:要实现的目的。
我想把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
也許大家還沒有看我的問題﹔
我開始的程序是這樣的﹕
adoquery8.Active:=false;
adoquery8.SQL.Text:='select * from mealtraces where emp_no='+''''+ trim(strid) +''''+' and convert(varchar(19),tt_time,21)='+''''+ sktime+''''+' and addr_no='+targetaddr;
adoquery8.Active:=true;
if adoquery8.RecordCount=0 then
begin
if not adoquery7.Active then
adoquery7.Open;
adoquery7.Insert;
adoquery7.FieldByName('EMP_NO').AsString:= trim(strID);
adoquery7.FieldByName('TT_TIME').AsString:=sktime;
adoquery7.FieldByName('Orig_time').AsString:=sktime;
adoquery7.FieldByName('ADDR_NO').Value:=targetaddr;
adoquery7.Post;
end;
后來發現這判斷速度太慢了﹐就在改表mealtraces的結構﹐既對字段emp_no,tt_time,addr_no設為主鍵﹐再把上面用來判斷的語句主釋了﹐既變成這樣了:
if not adoquery7.Active then
adoquery7.Open;
adoquery7.Insert;
adoquery7.FieldByName('EMP_NO').AsString:= trim(strID);
adoquery7.FieldByName('TT_TIME').AsString:=sktime;
adoquery7.FieldByName('Orig_time').AsString:=sktime;
adoquery7.FieldByName('ADDR_NO').Value:=targetaddr;
adoquery7.Post;
在這種情況下出那個關于主鍵的異常。我不知道說明白了沒有﹕(