Commit 后仍然无法插入到表中,高手来看一下!!!在线

liglynng99 2003-12-14 11:52:21
我想将表C01D中满足条件的数据插入到临时表TempC01d中,语法没错!
在程序和数据库中单独执行
SELECT *
FROM c01d
WHERE c01d00=:ll_soucestorenum AND c01d09=:ll_soucegys;
也能有结果

帮忙看一下其他地方有什么问题

sqlca.autocommit=false,
表TempC01d 有主键,

使用PB9.0+Oracle 8

代码如下:

//检查临时表中是否有数据,有则删除后插入,无则直接插入

int tempcount
SELECT count(*)
INTO :tempcount
FROM tempc01d;
if tempcount>0 then
DELETE *
FROM TempC01d;
Commit;
if sqlca.sqlcode<>0 then
messagebox("DELETE",sqlca.sqlerrtext) /////运行是无提示!
end if
INSERT INTO tempc01d
VALUES
SELECT *
FROM c01d
WHERE c01d00=:ll_soucestorenum AND c01d09=:ll_soucegys;
COMMIT;
////这是在测试时加的,运行时无提示
if sqlca.sqlcode<>0 then
messagebox("INSERT",sqlca.sqlerrtext)
end if

SELECT count(*)
into :tempcount
FROM c01d ;
INSERT INTO tempc01d
SELECT *
FROM c01d
WHERE c01d00=:ll_soucestorenum AND c01d09=:ll_soucegys;
COMMIT;
////这是在测试时加的,运行时无提示
if sqlca.sqlcode<>0 then
messagebox("INSERT",sqlca.sqlnrows)
end if

SELECT count(*)
into :tempcount
FROM c01d ;
messagebox("SECOND_count",string(tempcount))//查询返回为0条记录,在数据库中也无记录

看遍了论坛里的帖子,也没有这种情况的解决方法,只好烦请各位高手帮忙了,不胜感激!!!!

先谢谢了
...全文
39 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liglynng99 2003-12-15
  • 打赏
  • 举报
回复
我已经搞定了
谢谢各位!
liglynng99 2003-12-15
  • 打赏
  • 举报
回复
语法是没问题的
那个end if 是我漏输的,不好意思,让大家看不明白了
我用的是默认的事务对象

哪位高手给个例子吧,将一个表里满足条件的记录插入到一个临时表中,在插入前先判断临时表中是否有数据,有则删除后插入,无则直接插入

谢谢
liglynng99 2003-12-14
  • 打赏
  • 举报
回复
把SQL语句拆到数据库里都能执行,而且都能有记录被操作
可在程序里就是没效果啊
搞不懂啊
liglynng99 2003-12-14
  • 打赏
  • 举报
回复
有啊
GoldProgramer 2003-12-14
  • 打赏
  • 举报
回复
在你的程序最早执行时,表c01d中是否有记录?
mittee 2003-12-14
  • 打赏
  • 举报
回复
如果内嵌sql语句在运行的时候没有错误提示,那就是执行成功了。
//-----------
COMMIT;
////这是在测试时加的,运行时无提示
if sqlca.sqlcode<>0 then
messagebox("INSERT",sqlca.sqlnrows)
end if
//能否改成如下

if sqlca.sqlcode <> -1 then
commit;
messagebox("提示信息","保存成功")
else
rollback;
messagebox("提示信息","保存失败")
end if

cxwsoftware 2003-12-14
  • 打赏
  • 举报
回复
你是否是自己定义的事务,如果是:
请用:commit using yourstran;
GoldProgramer 2003-12-14
  • 打赏
  • 举报
回复
你是否在触发器中删除了cold的数据?
meng_zi 2003-12-14
  • 打赏
  • 举报
回复
老大,把Commit放在
if sqlca.sqlcode<>0 then
messagebox("INSERT",sqlca.sqlnrows)
end if
的后面才能看到错误提示呀,因为Commit的本身也是语句会冲掉SQLCA.SQLErrText中的信息,
唉,不过看你的程序写的,我感觉再说也是浪费时间
GoldProgramer 2003-12-14
  • 打赏
  • 举报
回复
SELECT *
FROM c01d
WHERE c01d00=:ll_soucestorenum AND c01d09=:ll_soucegys
有数据吗?
cmaboy 2003-12-14
  • 打赏
  • 举报
回复
你以上的程序能编译过去吗?
klbt 2003-12-14
  • 打赏
  • 举报
回复
if tempcount>0 then
DELETE *
FROM TempC01d;
Commit;

以上语句对应的end if在哪里?

1,076

社区成员

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

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