起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 225|回复: 14

【结】程序设置标准数据集更新选项语句报错**

[复制链接]
发表于 2008-5-16 15:07:28 | 显示全部楼层 |阅读模式
如题,设置程序如下
//~~~~~~~~~~~~~~~~~~~~~~~~~~
FDataSetData.UpdateOptions.Enabled:=True;  FDataSetData.UpdateOptions.UpdateMode:=TUpdateMode.upWhereKeyOnly;
FDataSetData.UpdateOptions.InsertSQL:=cAInsTemp;
FDataSetData.UpdateOptions.UpdateSQL:=cAUpdTemp;
FDataSetData.UpdateOptions.DeleteSQL:=cADelTemp;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
语句常量如下
cAInsTemp='INSERT INTO TABLE_RUNTIMEDATA'#13#10'( FDateTime , FTargetCode , '
    +'FValue , FEntity )'#13#10'VALUES ( :FDateTime , :FTargetCode , :FVALUE , '
    +':FENTITY )'#13#10#13#10'INSERT INTO TABLE_ATEMPRUNTIMEDATA'#13#10'( '
    +'FDateTime , FTargetCode , FValue , FEntity )'#13#10'VALUES ( :FDateTime ,'
    +' :FTargetCode , :FVALUE , :FENTITY )'#13#10#13#10;

cAUpdTemp='UPDATE TABLE_RUNTIMEDATA '#13#10'SET  FDateTime = :FDateTime  '
    +','#13#10'FTargetCode = :FTargetCode  ,'#13#10'FValue = :FVALUE  ,'#13#10'FEntity'
    +' = :FENTITY'#13#10'WHERE  ( FDateTime = :OLD__FDateTime )'#13#10'AND  ( '
    +'FTargetCode = :OLD__FTargetCode )'#13#10#13#10'UPDATE TABLE_ATEMPRUNTIMEDATA '#13#10'SET'
    +'  FDateTime = :FDateTime  ,'#13#10'FTargetCode = :FTargetCode  ,'#13#10'FValue'
    +' = :FVALUE  ,'#13#10'FEntity = :FENTITY'#13#10'WHERE  ( FDateTime = :OLD__FDateTime'
    +' )'#13#10'AND  ( FTargetCode = :OLD__FTargetCode )'#13#10#13#10;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
提交时报错:
invoke batch method error, error occur during invoke ApplyUpdates method, ORA-00933: SQL command not properly ended
回复

使用道具 举报

 楼主| 发表于 2008-5-16 15:09:38 | 显示全部楼层
晕,怎么那么多表情,表情那儿应该是右括号
回复 支持 反对

使用道具 举报

发表于 2008-5-16 15:43:30 | 显示全部楼层
从这个错误ORA-00933来看,应该是您的sql语句有问题,你拿到sql查询分析器试试,有问题不?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-16 16:41:16 | 显示全部楼层
sql没问题
回复 支持 反对

使用道具 举报

发表于 2008-5-17 16:34:16 | 显示全部楼层
楼主把代码定位到FDataSetData.ApplyUpdates上面然后查一下 FDataSetData.DataFetch.CommandText 看一下取出来的sql是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 09:21:23 | 显示全部楼层
SELECT TABLE_ATEMPRUNTIMEDATA.FDateTime, TABLE_ATEMPRUNTIMEDATA.FTargetCode, TABLE_ATEMPRUNTIMEDATA.FVALUE, TABLE_ATEMPRUNTIMEDATA.FSTATE, TABLE_ATEMPRUNTIMEDATA.FENTITY, TABLE_TARGET.FTARGETDEFCODE, TABLE_TARGET.FENTITYCODE, TABLE_TARGET.FINTERNALCODE, TABLE_TARGET.FSTATRANGECODE, TABLE_TARGET.FDATASOURCECODE, TABLE_TARGET.FSTATMETHODCODE, TABLE_TARGET.FBIZTYPECODE
  FROM TABLE_ATEMPRUNTIMEDATA, TABLE_TARGET
  WHERE (TABLE_ATEMPRUNTIMEDATA.FTARGETCODE = TABLE_TARGET.FTARGETCODE) AND ((FEntityCode like 'CD%' and FStatRangeCode = 'D' and FDateTime = to_date('2008-04-13 00:00:00', 'yyyy-mm-dd hh24:mi:ss')))
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 09:24:23 | 显示全部楼层
FDataSetData.UpdateOptions.InsertSQL:
INSERT INTO TABLE_RUNTIMEDATA
( FDateTime , FTargetCode , FValue , FEntity )
VALUES ( :FDateTime , :FTargetCode , :FVALUE , :FENTITY )

INSERT INTO TABLE_ATEMPRUNTIMEDATA
( FDateTime , FTargetCode , FValue , FEntity )
VALUES ( :FDateTime , :FTargetCode , :FVALUE , :FENTITY )

DataSetData.UpdateOptions.UpdateSQL:
UPDATE TABLE_RUNTIMEDATA
SET  FDateTime = :FDateTime  ,
FTargetCode = :FTargetCode  ,
FValue = :FVALUE  ,
FEntity = :FENTITY
WHERE  ( FDateTime = :OLD__FDateTime )
AND  ( FTargetCode = :OLD__FTargetCode )

UPDATE TABLE_ATEMPRUNTIMEDATA
SET  FDateTime = :FDateTime  ,
FTargetCode = :FTargetCode  ,
FValue = :FVALUE  ,
FEntity = :FENTITY
WHERE  ( FDateTime = :OLD__FDateTime )
AND  ( FTargetCode = :OLD__FTargetCode )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 09:26:54 | 显示全部楼层
我的更新和 插入 都是同时对两个表操作,是不是两个语句中间需要什么分隔符,或者结尾需要结束符? 表情那儿应该是右括号
回复 支持 反对

使用道具 举报

发表于 2008-5-19 09:31:48 | 显示全部楼层
每一个你都只保留一条看看呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 09:36:38 | 显示全部楼层
保留一条可以,我试过,但是此处必须更新两个表
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 04:48 , Processed in 0.043284 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表