用三层更新数据出现Capability not supported错误!(具体情况请见内容)

roger 2002-07-08 10:15:22
由于要用DataSet数据集来控制更新数据的方式,因此设定DataSetProvider的ResolveToDataSet:=True,设定DataSetProvider连接到一个TQuery,此Query的SQL语句是一个SELECT,无条件。设定QUERY的RequestLive:=True.
在客户端使用ClientDataSet的ApplyUpdates(0)来更新数据,发现更新的数据提交到应用服务器,但在更新到数据库时捕获到Capability not supported的错误,那位高人有这方面的经验,解决100分送上!
...全文
42 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
TWWH 2002-08-30
  • 打赏
  • 举报
回复
出现这个错误,就是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 的条件应包含表的关键字字段,
才能在表中定位需要更新的记录。
roger 2002-08-30
  • 打赏
  • 举报
回复
没有包含二进制字段,没有其他的大字段,何况我更新的只是字符型或数值型的字段,我在中间层的delta数据包中都看到newvalue了,就是不能更新
cobi 2002-08-30
  • 打赏
  • 举报
回复
你的更新数据中是否包含了大字段啊
fwwxxjingling 2002-08-30
  • 打赏
  • 举报
回复
强烈关注!!
dupenf 2002-08-30
  • 打赏
  • 举报
回复
那你存储的有比较大的字段吗??例如bolb等
roger 2002-08-27
  • 打赏
  • 举报
回复
我把表都重新建了,ORACLE默认的字段就是大写,我核对了N遍了。。。
gzllich 2002-08-14
  • 打赏
  • 举报
回复
出现此类错误一般跟字段名或表名的大小写有关,在BDE中不管二层或三层均存在,请核对一下
hzb 2002-07-12
  • 打赏
  • 举报
回复
很久不用bde了,一时想不起来是怎么回事,不过确实需要把RequestLive设成true,我做了个例子,除了RequestLive以外什么都没有设置,也可以正常执行的啊,不过用RequestLive=true的时候sql里的表的名字的大小写必须和数据库的一样,不知道你的怎么样, 帮你up吧。
roger 2002-07-12
  • 打赏
  • 举报
回复
啊~~~~~没人回答么。。。UP。。。
roger 2002-07-09
  • 打赏
  • 举报
回复
to hzb:RequestLive不设成TRUE,不能更新数据吧。。。另外Select count(*) from tablename的语句确实有,我又做了个两层的试了一下,有这条语句,接着就如你所说生成了UPDATE语句,可三层就没这条语句,那么大家对三层更新需要数据集更新是怎么做的呢?我觉得不太难,可能是某个细节没有注意,请大家继续帮忙!
surfguy 2002-07-08
  • 打赏
  • 举报
回复
试一下ApplyUpdates(-1)
roger 2002-07-08
  • 打赏
  • 举报
回复
BTW:后台使用的是ORACLE8I,我刚才跟踪QUERY生成的SQL语句十分奇怪:
SELECT COUNT(*) FROM TABLE WHERE FIELD1=:1 AND FIELD2=:2
而非UPDATE语句,难道在QUERY还要手动写UPDATE代码吗?
hzb 2002-07-08
  • 打赏
  • 举报
回复
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...之类的语句,就和在两层结构里更新数据一样的方式。
roger 2002-07-08
  • 打赏
  • 举报
回复
to surfguy不行,仍然是那个错误。对了,我没有追踪到QUERY生成的UPDATE语句,上面那条是定位用的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧