BTW:后台使用的是ORACLE8I,我刚才跟踪QUERY生成的SQL语句十分奇怪:
SELECT COUNT(*) FROM TABLE WHERE FIELD1=:1 AND FIELD2=:2
而非UPDATE语句,难道在QUERY还要手动写UPDATE代码吗?

解决方案 »

  1.   

    to surfguy不行,仍然是那个错误。对了,我没有追踪到QUERY生成的UPDATE语句,上面那条是定位用的。
      

  2.   

    Capability not supported这样的错误很久没碰到了,一时想不起来是什么引起的,不过QUERY的RequestLive没必要设成true吧。SELECT COUNT(*) FROM TABLE WHERE FIELD1=:1 AND FIELD2=:2不可能,select fieldlist from table这样的语句倒是有的,如果select fieldlist from table的语句正常,接下来就是update table set field=:param where...之类的语句,就和在两层结构里更新数据一样的方式。
      

  3.   

    to hzb:RequestLive不设成TRUE,不能更新数据吧另外Select count(*) from tablename的语句确实有,我又做了个两层的试了一下,有这条语句,接着就如你所说生成了UPDATE语句,可三层就没这条语句,那么大家对三层更新需要数据集更新是怎么做的呢?我觉得不太难,可能是某个细节没有注意,请大家继续帮忙!
      

  4.   

    很久不用bde了,一时想不起来是怎么回事,不过确实需要把RequestLive设成true,我做了个例子,除了RequestLive以外什么都没有设置,也可以正常执行的啊,不过用RequestLive=true的时候sql里的表的名字的大小写必须和数据库的一样,不知道你的怎么样, 帮你up吧。
      

  5.   

    出现此类错误一般跟字段名或表名的大小写有关,在BDE中不管二层或三层均存在,请核对一下
      

  6.   

    我把表都重新建了,ORACLE默认的字段就是大写,我核对了N遍了
      

  7.   

    那你存储的有比较大的字段吗??例如bolb等
      

  8.   

    没有包含二进制字段,没有其他的大字段,何况我更新的只是字符型或数值型的字段,我在中间层的delta数据包中都看到newvalue了,就是不能更新
      

  9.   

    出现这个错误,就是RequestLive设成true的缘故。
    但若不设成true,又不能更新数据。要想更新数据将 RequestLive 设成false, 为UpdateObject 指定一个 UpdateSQL 组件,为 UpdateSQL 组件的 XXXSQL 写 SQL 语句,再在 Query 的 UpdateRecord 事件中根据 UpdateKind 执行 UpdateSQL 中相应的 SQL语句进行更新。 
    例如:
    procedure TdmPmms110.QryMA_CALENDARUpdateRecord(DataSet: TDataSet; UpdateKind: 
      TUpdateKind; var UpdateAction: TUpdateAction); 
    begin 
      UpdateSQL1.SetParams(UpdateKind);//假设 Query 的 UpdateObject 为 UpdateSQL1 
      UpdateSQL1.ExecSQL(UpdateKind); 
      UpdateAction := True; 
    end; 
    注意 UpdateSQL 的 Update 和 Delete 的 SQL 中,where 的条件应包含表的关键字字段, 
    才能在表中定位需要更新的记录。