做了一个按钮,代码如下
procedure TLogin.Button1Click(Sender: TObject);
begin
ADOTable1.Open;
if ADOTable1.Locate('code;disable;delete',VarArrayOf([edit1.Text,false,false]),
[loCaseInsensitive]) then
showmessage('yeah') else showmessage('oh no');
ADOTable1.Close;
end;在edit1输入东西,然后在table中定位记录,开始的时候有一条记录可以定位,按下按钮会显示yeah。
用access 2000打开数据库,将这条记录修改,关闭access 2000 ,由于数据库已经改变了,按理说再按这个按钮应该显示oh no。不过情况是,我按下去,头3次依然显示yeah,到第三次才显示oh no。这个问题我曾经在TADOQuery控件也发现过,一年前搞得我很烦,问题还是未解决。调用refresh方法10次也是一样,只要过几秒钟,数据就可以刷新。感觉就是access反应很慢那样,以前用一个TADOQuery组件先查询了些记录,然后关闭这个dataset,将这个查询改成删除记录的语句,调用execsql执行删除指令,原本以为还是用这个控件查询一次,之前的记录一定不见了,谁知情况很不确定,有时迅速看到记录不见了,但是有时查询3-5次还看到本应该删掉的记录。而且修改,增加都有相同的情况,总觉得不应该是这样的。我是用jet 4连接access数据库的。有谁能帮助我吗?
procedure TLogin.Button1Click(Sender: TObject);
begin
ADOTable1.Open;
if ADOTable1.Locate('code;disable;delete',VarArrayOf([edit1.Text,false,false]),
[loCaseInsensitive]) then
showmessage('yeah') else showmessage('oh no');
ADOTable1.Close;
end;在edit1输入东西,然后在table中定位记录,开始的时候有一条记录可以定位,按下按钮会显示yeah。
用access 2000打开数据库,将这条记录修改,关闭access 2000 ,由于数据库已经改变了,按理说再按这个按钮应该显示oh no。不过情况是,我按下去,头3次依然显示yeah,到第三次才显示oh no。这个问题我曾经在TADOQuery控件也发现过,一年前搞得我很烦,问题还是未解决。调用refresh方法10次也是一样,只要过几秒钟,数据就可以刷新。感觉就是access反应很慢那样,以前用一个TADOQuery组件先查询了些记录,然后关闭这个dataset,将这个查询改成删除记录的语句,调用execsql执行删除指令,原本以为还是用这个控件查询一次,之前的记录一定不见了,谁知情况很不确定,有时迅速看到记录不见了,但是有时查询3-5次还看到本应该删掉的记录。而且修改,增加都有相同的情况,总觉得不应该是这样的。我是用jet 4连接access数据库的。有谁能帮助我吗?
解决方案 »
- Delphi 子窗体在MDI中的大小
- TYPE与STRING转换问题
- 外触发信号
- ToolBar上显示带图片ToolButton的问题
- 为什么同样的com+event object在windows 2003 server能调用,在xp上不能调用?
- ▼▲ 看起来容易的问题其实很不好解决 ---> 如何判断一个指针是否有效。
- fastreport直接打印怎么写?
- ini文件使用的困惑!
- 有那位大侠知道fastreport的学习资源。请赐教。谢谢!!
- 那儿有汉化的,带BDE的安装工具?
- 在lookupComboBox已选中选项的情况下如何在清空呢
- 新学Delphi,请教一个小问题:在一个Edit框中输入了值,并回车,请问events中那一个是回车的事件?
最好把ADOConnection也断开,在连接,然后在ADOTable1.open,这样看看还存在以上问题吗?
http://webmail.21cn.net:8082/fcgi/file/可怜的程序.rar?action=download&filename=/1097724741如果程序运行后输出yeah,用access打开数据库,将该记录的disable或delete随便一个更改成true,迅速关闭access,再点“登陆”几下,可能发现前几次显示yeah,而后面显示oh no。为何?而且如果不用access修改,而是在程序中发sql语句修改,情况会一样。
语句执行完以后再 close 再 open 就可以了
begin
ADOTable1.Close;
ADOTable1.Open;
ADOTable1.Refresh;
if ADOTable1.Locate('code;disable;delete',VarArrayOf([edit1.Text,false,false]),
[loCaseInsensitive]) then
showmessage('yeah') else showmessage('oh no');
ADOTable1.Close;
end;