关于access写数据时缓存的问题(100分)

  • 主题发起人 主题发起人 chenxu
  • 开始时间 开始时间
C

chenxu

Unregistered / Unconfirmed
GUEST, unregistred user!
使用了两个ado控件:adotable1, adoquery1
两个ado控件的cursorlocation属性都设为clUseServer

datasoure1.dataset指向adoquery1,DBGrid1的datasource设为datasource1

执行如下代码:

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('create table temptable0 (tmp1 char(10), tmp2 char(20), tmp3 char(30))');
adoquery1.ExecSQL;

adotable1.TableName:= 'temptable0';
adotable1.Open;

for i:= 1 to 100 do
begin
adotable1.AppendRecord(['tmp' + inttostr(i), 'test' + inttostr(i), 'hello' + inttostr(i)]);
adotable1.Edit;
adotable1.UpdateRecord;
end;
adotable1.Close;

adoquery1.SQL.Clear;
adoquery1.sql.Add('select * from temptable0');
adoquery1.Open;

执行完代码后DBGrid1中显示为空,但能显示出字段名,没有数据,
要等待大约2秒后再执行'select * from temptable0'才有数据显示,
请问原因?

 
加个 ,有个暂停时间一下
application.procemessage;
再执行'select * from temptable0'
 
如果数据比较多,2秒钟算不了什么,何况你前面那么建表添加数据也要等一些时间.
使用客户端游标的话,则连字段名也要等到2,3秒钟后才会与数据一起显示出来.
还有我从来不用TADOTable和TTable
 
ugvanxk:你的方法不行,我早就试过了
lynu:如果你说要等一些时间,那我怎么知道数据什么时候准备好了?
 
试试用同一个连接,用TADODataSet,
 
ado控件的cursorlocation属性设为clUseServer且
ado控件的LockType属性设为ltBatchOptimistic才算用数据缓存吧
 
使用同一个adoconnection后问题解决,但如果我talbe1使用的是DAO,Query使用ADO时,
又该怎么办?如何才能让我所要读取的数据保持是最新的?
 
在 adoquery1.ExecSQL; 后加一句 adoquery1.Open;
 
用AppendRecord写表很慢,一秒钟只能写个80行左右,这100行的数据在DBGrid1中
显示出来大概也要个半秒钟,这应该是很正常的。
 
用个进程管理.
 
后退
顶部