呵呵,分数我要定了。
将Query的RequestLive设为True是有条件的,你的SQL必须是标准的SQL,不能有不标准的部分。
如select top 0 * from ...,其中的top就是不标准的。
(具体SQL要符合的标准,你可看一下有关的书,我也不太清楚。:)解决方法:
select * from table where 0=1

解决方案 »

  1.   

    多表连接,异构查询,order by语句都不直接支持 requestlive解决办法可以自己写sql改之,或者用 TSQLUpdate。
      

  2.   

    赞成LaZa的关点,用了TQuery且要求实现TTaBel的功能,Query控件的SQl语句在提交以前是不能更新的否则即便查询正确,前面的数据也不会真正提交。  
      

  3.   

    RequestLive=true并不是缓存更新,真正的缓存更新是指:CachedUpdates=true并使用TUpdateSQL控件的更新方式,建议你用这种方法,一般没有问题,至少我以前用BDE时一直这样用都没有问题。
      

  4.   

    我已使用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;