........
........
main.ADOCommand1.CommandText :='update sell set lx=0';
main.ADOCommand1.Execute;
main.ADOQuery1.Close;
main.ADOQuery1.SQL.Clear;
main.adoquery1.SQL.Add('select * from sell where lx<>0');
main.ADOQuery1.Prepared := True;
main.ADOQuery1.Open;
i:=main.ADOQuery1.RecordCount;
为何i<>0,即我先用一条语句更新数据库,紧接着查询数据库,为何查出来的数据是没有执行更新语句以前的数据库呢?我用的是Delphi6.0+Access,怎样才能使执行完命令后数据库马上更新?
........
main.ADOCommand1.CommandText :='update sell set lx=0';
main.ADOCommand1.Execute;
main.ADOQuery1.Close;
main.ADOQuery1.SQL.Clear;
main.adoquery1.SQL.Add('select * from sell where lx<>0');
main.ADOQuery1.Prepared := True;
main.ADOQuery1.Open;
i:=main.ADOQuery1.RecordCount;
为何i<>0,即我先用一条语句更新数据库,紧接着查询数据库,为何查出来的数据是没有执行更新语句以前的数据库呢?我用的是Delphi6.0+Access,怎样才能使执行完命令后数据库马上更新?
1、设置了数据集的什么属性,特别适合客户端缓存有关的属性、或者是立即提交等方面的属性,以导致第二次的返回记过没有更新。
2、数据集已经更新,但RecordCount没有更新,因为,在底层,Delphi就是封装了微软的Ado组件,不知道,朋友们是没有试过,如果在VB中使用ADO时,如果,不把CursorLocation属性改为"Client"的方式的话,就会导致RecordCount的不准确甚至是不允许访问。所以,这个例子中,也并不排除,返回的结果集正确,但是RecordCount的不正确。建议的调试方法:
首先,设置断点,监视main.ADOQuery1,看是否是前述第一种情况,如果是,就着重查找main.ADOQuery1的相应属性设置,如果返回的记录集是正确的,就再检查一下CursorLocation属性,总之,如果不是SQL语句方面考虑的欠缺的话,就肯定是数据集的属性有不妥的地方。
不用post
我记得在oracle中有个commit命令的
应该设为false;