关于Access的问题,我问过摩托,可我还是没有解决,请高手们帮忙,我天天在线,得到答案就给分

seekmydoom 2003-09-03 08:41:46
问题是这样的,在窗体Form1中增加一条记录,用的是ADOQuery1.Append;ADOQuery1.Post;提交完后返回另一个窗体Form2,在Form2中,用ADOQuery2.Close;ADOQuery2.Open;问题出现在这里,ADOQuery2打开后没有刚才在Form1中加入的记录,要等一会儿才有,大约2-3秒中,这是为什么呢?我在同一个窗体中Form1中,在同一个ButtonClick下面:ADOQuery1.Append;ADOQuery2.Open,可以看大刚才加入的记录,这也许是正常的,但为什么在不同窗体中为什么不行呢?
接上面的问题--我在Form2中ADOQuery2.Open时,不知道Form1中是否添加了记录,所以没有办法知道表中是否有数据更新,只能ADOQuery2.Open来判断,所以摩托建议用while ADOQuery2.Eof do
begin
ADOQuery2.Close;
ADOQuery2.Open;
end;
是不行的,请各位建议怎么样改进呢?这是Access数据库本身的问题吗?如果是,那为什么在同一个窗体中没问题呢?
解答正确的,马上给分,请帮忙!
...全文
28 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
seekmydoom 2003-09-04
  • 打赏
  • 举报
回复
谁能够帮帮忙呢?
wdong18 2003-09-04
  • 打赏
  • 举报
回复
oh.You use 2 querys but 1 connection.
so replace the query.close and query.open by:
if connection.active=true then
connection.active:=false;
connection.active:=true;
Sorry I can't type Chinese Charactors in my Japanese OS.
tanqth 2003-09-03
  • 打赏
  • 举报
回复
象这样,能出来数据已不错了(只等一下),我有时不再OPEN一次是不会出来的。
照您说的可以在另外一个窗体中一个函数中调用前进行ExecSQL。

再试试
seekmydoom 2003-09-03
  • 打赏
  • 举报
回复
tanqth(青蛙):我想要实现的目的是在Form1中更改数据后,在另外一个窗体中一个函数中要调用表中所有数据,不能在AfterPost中写,也不可能在ADOQuery1中每次插入再ADOQuery2.Open,我所不解的是为什么等待一段时间后就可以找到所有的数据!!!
tanqth 2003-09-03
  • 打赏
  • 举报
回复
AfterPost,事件中更好。试试看
tanqth 2003-09-03
  • 打赏
  • 举报
回复
ADOQuery1中,的“插入后”事件中写代码(ADOQuer2。close...open)
也就是说每次ADOQuer1插入后ADOQuer2就会打开一次,就行了。

写得是简单了一点,自己领会一下,不会我再写全代码。
seekmydoom 2003-09-03
  • 打赏
  • 举报
回复
wdong18(东东) 你说的不能实现,因为这是在两个不同的单元里面的,ADOQuery_Temp在另外Form中
goldstar365(星光宝盒) :我并不需要知道是否更改过,你下面说得我已经是这样做了,但问题不能解决啊!
seekmydoom 2003-09-03
  • 打赏
  • 举报
回复
firetoucher(风焱) :
我试过了,出现错误‘缺少更新会刷新的键列信息’,这个问题我碰到N次,我没有解决,所以一直不用这个Refresh了,请问这个错误是怎么发生的,我的表中有主键(绝对有),要什么样的情况才能刷新呢?
空中居士 2003-09-03
  • 打赏
  • 举报
回复
我想你可以根本不用判断,Form1中是否添加了记录,总是在激活form2 重新刷新数据显示就行了,这样可能稍慢,应该可以解决问题。
在form2.activate事件中
ADOQuery2.Close;
ADOQuery2.Open;
如果你非想判断Form1中是否添加了记录,就在form2中设一个变量,在form1插入记录后,改变form2这个变量的值。最后根据这个变量值的变化,确定是否重新刷新数据显示
wdong18 2003-09-03
  • 打赏
  • 举报
回复
在Form1.showmodal;前面执行
ADOQuery_Temp.Close;
后面改成
if ADOQuery_Temp.Active=true then
ADOQuery_Temp.Close;
ADOQuery_Temp.SQL.Clear;
...
firetoucher 2003-09-03
  • 打赏
  • 举报
回复
ADOQuery_Temp.Refresh
seekmydoom 2003-09-03
  • 打赏
  • 举报
回复
lxpbuaa(桂枝香在故国晚秋) :
代码是这样的,在主窗体上点击增加用户Button1.OnClick();
Application.CreateForm(TForm1, Form1);//弹出增加记录的窗体Form1,在Form1上有增加、编辑、删除、保存、返回5个按钮,返回按钮的事件是Close;
Form1.ShowModal;
Form1.Free;//Form1中内容是由另一个写的
//接着用ADOQuery_Temp查询
with Frm_data do
begin
ADOQuery_Temp.Close;
ADOQuery_Temp.SQL.Clear;
ADOQuery_Temp.SQL.Add('select * from Users ');
ADOQuery_Temp.Open;
end;

代码就是这样的!这有什么错误的吗?但为什么在Form1中添加完毕后,等2-3秒钟返回就可以看到刚加入的记录呢?
lxpbuaa 2003-09-03
  • 打赏
  • 举报
回复
很大可能是你代码的问题,比如Form2中:
ADOQuery2.Close;ADOQuery2.Open;
写的位置可能不对。
至于你的:
while ADOQuery2.Eof do
begin
ADOQuery2.Close;
ADOQuery2.Open;
end;
我搞不懂这是什么意思。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧