某个字段是VARCHAR2,其值在VB里面查询和ORACEL里面查询结果不一样。

iamsilly 2017-11-02 02:22:17
我用VB6做一个数据接口,从客户的ORACLE表里面读出数据,如果读出成功,将原表的读出标志tc_aep06更新为1,原来是0
这个读出标志字段tc_aep06客户说是VARCHAR2,长度为1.
我在VB里面第一次读出的时候,都是成功的,
If rsMain.state = 1 Then rsMain.Close
rsMain.CursorLocation = adUseClient
strMain = "select * from idrz00.tc_aep_file where tc_aep06='0' "
rsMain.Open strMain, cnOra, 3, 3
msgbox rsmain.RecordCount '有数据大于0
for i=0 to rsmain.RecordCount-1
...
cnOra.Execute "UPDATE idrz00.tc_aep_file SET TC_AEP06=1 where tc_aep06='0' "
rsmain.movenext
next i

后面客户又往ORACLE表idrz00.tc_aep新增了一些数据,
但是再去VB里面调试
strMain = "select * from idrz00.tc_aep_file where tc_aep06='0' "
rsMain.Open strMain, cnOra, 3, 3
msgbox rsmain.RecordCount '这里应该>0,但是=0
不知道什么原因?oracle不熟悉,请大家帮忙!


现在再去执这行这句
cnOra.Execute "UPDATE idrz00.tc_aep_file SET TC_AEP06=1 where tc_aep06='0' "
提示:
'提示:【oracle】【odbc】[ora]ora01013 用户请求取消当前的操作


...全文
330 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamsilly 2017-11-06
  • 打赏
  • 举报
回复
引用 5 楼 chewinggum 的回复:
TOAD或者PLSQL Developer 以及oracle自己的plsql 进行增、删、改操作后 要用commit 命令确认变动,TOAD或者PLSQL Developer的界面工具栏里都有两个按钮,一个提交一个回滚。
老大,就是你说的这个问题,膜拜呀!
脆皮大雪糕 2017-11-02
  • 打赏
  • 举报
回复
TOAD或者PLSQL Developer 以及oracle自己的plsql 进行增、删、改操作后 要用commit 命令确认变动,TOAD或者PLSQL Developer的界面工具栏里都有两个按钮,一个提交一个回滚。
脆皮大雪糕 2017-11-02
  • 打赏
  • 举报
回复
ora-01013 这个错误: ORA-01013: user requested cancel of current operation Cause: You interrupted an Oracle operation by pressing Ctrl-C or by canceling the operation through another method (ie: front-end application). Action: The options to resolve this Oracle error are: 1.The current operation has been terminated by the user. There is no course of action to take. This message is informational only. 2.This error may also have been caused by a timeout in a sql pass-through query. To resolve this error, properties of the timeout parameter need to be changed to a higher value. 客户端主动终止(目测不是)或者访问超时。update 语句发生超时,很大可能是锁表。 从你反馈的情况看,你执行完update以后,有没有commit? 强烈怀疑你是你在数据库操作中没有进行commit操作,所有的改动都仅存在于你的oracle客户端(TOAD)会话中,你的VB会话并不能查询到 TOAD会话中的修改,此外,由于TOAD上的update没有commit,所以表处于被TOAD会话锁定状态,所以你的VB再对这张表进行update操作的时候,会等待锁的释放,结果就等超时了。 这样一来一切就都说得通了,第一次查询OK,是因为没有锁表。后续的你们用TOAD客户端对数据的修改没有提交,所以VB始终查询不到变化。同时因为修改没有提交导致锁表,VB对表的修改超时。
iamsilly 2017-11-02
  • 打赏
  • 举报
回复
在ORACLE客户端运行 update idrz00.tc_aep_file set tc_aep06='a' 然后再VB里面执行 strMain = "select * from idrz00.tc_aep_file where tc_aep06='a' " rsMain.Open strMain, cnOra, 3, 3 msgbox rsmain.RecordCount '任然没有数据
iamsilly 2017-11-02
  • 打赏
  • 举报
回复
引用 1 楼 chewinggum 的回复:
"select * from idrz00.tc_aep_file where tc_aep06='0' " 直接到数据库去执行一下,确认是不是客户在新增数据的时候把这类数据给删掉了。
这个语句在数据库里面执行都是正常的,也能看到所有以前的数据。 运行"select * from idrz00.tc_aep_file where tc_aep06='0' " 单独在ORACLE客户端查看是正常的哟,就是在我VB里面查不出来。 客户端他们给我装的是TOAD for ORACLE,我用的是ODBC数据源来连接ORACLE的。
脆皮大雪糕 2017-11-02
  • 打赏
  • 举报
回复
"select * from idrz00.tc_aep_file where tc_aep06='0' " 直接到数据库去执行一下,确认是不是客户在新增数据的时候把这类数据给删掉了。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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