ADO+access 急救(100分)

  • 主题发起人 主题发起人 dcba
  • 开始时间 开始时间
D

dcba

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在用delphi6编写物业管理程序发现如下问题那位高手能帮帮我!
1、好像用access插入或数据很慢(即是数据库时空的)
2、为什么我在一个窗体里插入记录后,在另一个窗体里的dbgrid的现实数据并不更新,如果使用
ado.refresh 会显示‘缺少更新或刷新的键列信息’
3、当用sql删除记录以后,立即刷新,dbgrid仍然显示的是原来的记录,只有过几秒后,在刷新才会显示删除记录以后的结果
 
1、不会有这样情况阿,可能是你使用的不对吧。
Client -> Server (设置游标)
2、再Open一下就好了。或者两个窗体同时使用一个DataSource;
3、DBGrid的删除最好使用手工代码删除,呵呵,比较有效率,
当然,再Open一下也是可以的。
如果有什么不到的地方,还请指教。

另:我也写了一个物业软件,你可以试试看。同样是使用ADO+Access
address: http://xingzhi.3322.net
 
1.应该不会的.
2.也是aodquery.open试试.
3.你的adoquery与dbgrid相连,adoquery.open之后dbgrid记录不马上刷新,
还是用的adoquery.refresh,最好用adoquery.open试试.

 
如果以上方法不能解决,把你的程序放到其它的机器上编译再试试.
说不定是你的系统有问题.
 
chonghai:
谢谢你的指点,但是我还有几个疑问:
1、Client -> Server 是什么意思?是吧ado.CursorLocation 由clUseClient改为clUseServer么?
2、即使这样改了,好像是可以使用ado.refresh,但是我删除一个记录以后,dbgrid仍然不能更新,更新之后不变,必须过几秒以后在更新才会改变
我的代码是这样写的:
procedure TPersonInformationForm.Delete_MenuClick(Sender: TObject);
var
tempsn:integer;
begin
if DBGrid1.SelectedRows<>nil then
begin
tempsn:=Personinfor_ADOQuery.FieldByName('sn').AsInteger;
Personinfor_ADOQuery.Close;
Temp_ADOQuery.Close;
Temp_ADOQuery.SQL.Clear;
Temp_ADOQuery.SQL.Add('delete * from personinfortable where sn='+IntToStr(tempsn));
Temp_ADOQuery.ExecSQL;
Temp_ADOQuery.Close;
if not PersonInfor_ADOQuery.Active then PersonInfor_ADOQuery.Open;
PersonInfor_ADOQuery.Refresh;
end;
end;
注:
degrid和 datesource1相连,datesource1 和PersonInfor_ADOQuery相连
当菜单点击以后,dbgrid仍然是原来的内容,只有过几秒后,我再调用PersonInfor_ADOQuery.refresh才会更新
 
我给你解释一下
当query从数据库中检索出数据并显示后,其实显示的数据现在是在内存中,和数据库没有关系
所以你的更新到数据库中的新数据并不反应到dbgrid中
当你刷新以后,与dbgrid相应的datasouce控件才会把新的数据反应到dbgrid中
 
但是我说的问题是:当我把数据插入到数据库里以后,立即刷新,但是dbgrid没有显示出我插入的纪录,必须等上5秒左右,在刷新才会显示结果
但是5秒对于用户来说实在是太慢了,有没有什么办法让dbgrid及时更新,立即显示出结果
 
5秒也很慢吗?
 
5秒还不慢?
close再open可以
 
大家看看我的代码再说好么?
无论是close+open 还是refresh 如果就是加在adoquery.execsql之后,不能立即更新,只有在5秒左右的时间之后的刷新
(close+open 或 refresh) 才可以更新dbgrid,为什么?
 
老兄,你说的这个问题,好象应该去下个补丁才对,那是DELPHI的BUG
 
如果你感觉慢,那你可以换一个数据库啊,比如说SQL SERVER,毕竟ACCESS只是桌面型数据库。
 
但是客户要求用access,谁有过这样的经验?帮帮我把
 
先DisableControls 操作完数据库后再EnableControls
由DataSource自动刷新dbgrid
 
我使用了DisableControls和enablecontrols 但是还是老问题![:(][:(][:(]
 
呵呵,你的问题真的是很奇怪,在我的机子上并不会哦。
我也是使用Access97+ADO来进行变成的。

Delphi5 加上了补丁:UP1 and ADO_UP2
不知道你的情况如何?

另:我的软件您试用了吗?或许对您有帮助。
 
chonghai:
你的软件我是用了,挺好的,但是我不知道你是怎样写的。我用的是delphi6+update2+ado+winxp
如果谁好心想帮我解决问题,可以留下信箱或qq号码,我把源代码发给他,来帮我看看,怎么解决这个更新问题
 
是access97吗?换成access2000试试
有主键吗?
为什么不直接PersonInfor_ADOQuery.Delete?
 
xmh_31:
用delete是可以马上让dbgrid显示出来删除后的结果,但是这是假象,是实际数据库里没有删除,
刷新以下,或是退出再重新进程序,就又会显示出来
 
你用ado原生对象做个实验,看是不是这样的问题。
 
后退
顶部