为什么用了QUERY的RequestLive属性后,用SQL语句返回结果集便会有一些错误?(100分)

  • 主题发起人 主题发起人 hzzkf
  • 开始时间 开始时间
H

hzzkf

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序用QUERY连接SQL SERVER数据库,使用SQL语句进行数据库操作。在程序中,我需要
用到缓存更新(这样,必须使用QUERY的RequestLive属性)的功能进行数据操作(APPEND、
edit、delete),然后通过一个BUTTON的事件提交这些数据。现在的问题是,当我利用
SELECT语句返回结果集时,只要用了一些特殊的SQL语句来返回结果集(例如利用TOP 0
返回0记录或一些求两个时间之间的所隔天数等语句时),程序就会出错。但关闭缓存更新
功能时程序不会出错。如何解决,请高手指教!
例:1.出错语句
dataunit.DataModule1.query1.close;
dataunit.DataModule1.query1.sql.clear;
dataunit.DataModule1.query1.RequestLive:=true;//删除此行程序不会出错,
但DBGRID中的数据便不能改动了!
dataunit.DataModule1.query1.SQL.Add('select top 0 * from tablename ');
//返回结果集为0,会出错
dataunit.DataModule1.query1.open;
dataunit.DataModule1.query1.RequestLive:=false;



 
你直接在设计期间将QUERY的REQUESTLIVE设置为TRUE不就行了,干什么那么费劲
我以前曾经这么用过,没有问题的
 
改用ADOQuery吧!或用UpdateSQL控件
RequestLive=true有好多语用限制
 
直接在属性中设置多好,那么麻烦干什么?
 
最简单的更改方法还是用UpdateSQL。
 
我已使用UPDATE控件了,确实很方便。不过,现在发现一个问题,我是用事务进行提交的,
某段程序中一次提交用了两个QUERY进行不同的操作,但现在用UPDATE后却不行了,只能在
一次提交中处理其中一个QUERY的代码,具体代码如下:(QUERY1使用UPDATE控件,QUERY3
使用SQL语句进行表的插入操作,QUERY1和QUERY3分别处理两个表)
dataunit.DataModule1.database1.StartTransaction;//开始事务
//query3的操作代码
dataunit.DataModule1.query3.close;
dataunit.DataModule1.query3.sql.clear;
dataunit.DataModule1.query3.SQL.Add('insert 入库明细表 (物品编号) values
(:物品编号) ');
if not (dataunit.DataModule1.query3.Prepared)
then dataunit.DataModule1.query3.Prepare;
dataunit.DataModule1.Query3.Parambyname('物品编号').asstring:=dxedit1.Text;
dataunit.DataModule1.query3.unprepare;
dataunit.DataModule1.query3.ExecSQL;
//query1的操作代码
dataunit.DataModule1.query1.Edit;
dataunit.DataModule1.Query1.FieldByName('库存总量').asfloat:=23;
dataunit.DataModule1.Query1.Post;
try
dataunit.DataModule1.Query1.ApplyUpdates;
dataunit.DataModule1.database1.Commit;
dataunit.DataModule1.Query1.CommitUpdates;
 
接受答案了.
 
后退
顶部