数据库有表A(A1--主键,A2) B(B1--主键,B2)
我用adoquery来连接:
adoquery.active:=false;
adoquery.sql.clear;
adoquery.sql.add('select m.A2,n.B2 from A m join B n on m.A1=n.B1 group by m.A2,n.B2');
adoquery.active:=true;
得到数据用 DBGrid 显示,但是 Refresh 时,报错 '缺少更新或刷新的键列信息'。我的问题是:
难道就只能用 adoquery.active:=false再:=true的方式刷新?另一个问题:(在刷新操作不报错的情况下,如 只select 表A)
在得到记录比较多时,在修改了记录后--->再刷新,用Refresh是不是比adoquery.active:=false--->true的方式快?还是一样?
我用adoquery来连接:
adoquery.active:=false;
adoquery.sql.clear;
adoquery.sql.add('select m.A2,n.B2 from A m join B n on m.A1=n.B1 group by m.A2,n.B2');
adoquery.active:=true;
得到数据用 DBGrid 显示,但是 Refresh 时,报错 '缺少更新或刷新的键列信息'。我的问题是:
难道就只能用 adoquery.active:=false再:=true的方式刷新?另一个问题:(在刷新操作不报错的情况下,如 只select 表A)
在得到记录比较多时,在修改了记录后--->再刷新,用Refresh是不是比adoquery.active:=false--->true的方式快?还是一样?
好的是active=false再active=true。或者close再open也是不錯的方法
adoquery.sql.clear;
adoquery.sql.add('select m.A2,n.B2 from A m join B n on m.A1=n.B1 group by m.A2,n.B2');
adoquery.open
requery就是调用 close--->open 吧?
先Close;
再Open;
ReFresh;有可能并没有更新
用Close再Open好了。
这个原因我知道的,只是感觉要写2行,用refresh只要写1行。我在网上也看到 close--->open 比 refresh 速度快(在记录较多时有明显感觉),我就用 close-->open 了。
应该有这两个方法吧,我没用过这个DBGrid,不知道。
begin
if active:=false then
Active := false
sql.clear;
sql.add('select m.A2,n.B2 from A m join B n on m.A1=n.B1 group by m.A2,n.B2');
Open;
end;