关于ADO组件中添加记录后的实时更新问题(200分)

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

crob

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用delphi的ADO组件编写C/S型的SQL server数据库处理软件,客户端通过一个SOCKET程序向服务器端发送
数据信息,服务器端接收到SOCKET数据包后将数据添加到SQL server数据表中。

服务器端程序使用TADOQuery组件通过'insert into db ......'语句正常添加一条记录后,立该
要进行查询刚才一条记录是否存在的操作,这时再执行
...........
with ADOQuery1 do begin
Close();SQL.Clear();
ADOQuery1.SQL.Add('select * into db where (aa=1)' );

Open();
result := IsEmpty();
..........
反回的值是IsEmpty = true,可是该条记录的确已经通过上一句的insert添加进去了,再通过
SQL server7自带的Query Analyzer手动执行该select语名却可以找到该条记录,只是程序中
不能找到。

经过我的试验,发现只要执行完insert后,退出server端程序再打开后,可以正常检索下一步的select语句,
可是大家知道,server端的程序是不能随便重启的呀!

难道ADO不是实时对所有操作进行更新的吗?那么该如何更新呢?

另外所有表均集中在一数据模块中,使用SQLOLEDB.1连接,调试环境为局域网

请不要向我推荐使用其它第三方ADO控件,谢谢。


 
数据添加到SQL server中应该是一个动作,而不是返回一个数据集,所以你不应该调用
Open();而应该调用Execsql();
改成
with ADOQuery1 do begin
Close();SQL.Clear();
ADOQuery1.SQL.Add('select * into db where (aa=1)' );

Execsql();
result := IsEmpty();

试试看!goodluck!
 
不会吧,你肯定在哪儿有错了。
 
我把Open改成ExecSQL了,可还是老样子

程序一定没错,要不为什么重新启动server端软件后,再用client查询就行了?

我后来又试过,在insert完成后将ADOConnection断开,再连接,就可以查询到了,所以还
早那个老问题,ADO是怎么更新记录的?
 
搞定了

使用Requery方法即可!!!

呵呵,心情舒畅,给分了......
 
多人接受答案了。
 
后退
顶部