关于pb中往表中插入数据的问题!!!!请高手帮忙了!!!谢谢!!

chnan222 2007-10-10 11:34:00
请pb高手帮忙阿!!!
我使用的是pb8,数据库是access
目前想通过数据窗口导入数据,但是想显示导入后更新了的数据条数
导入的数据为dbase3的,由于有可能导入的数据比系统中的数据多添加了或者更新了数据。所以,想通过某些途径将更新后的数据挑出来(与原数据库的表对比),并统计数目。
其中导入按钮的脚本如下:
其中dw_1为显示数据导入过程数据窗口
dw_2为接受导入数据窗口,提交到数据库中的cjk_info_temp中
dw_1.settransobject(sqlca)
dw_1.retrieve()
//删除临时表中的数据
delete from cjk_info_temp using sqlca;
dw_1.object.compute_1.visible=true
dw_1.object.t_2.visible=true
dw_2.settransobject(sqlca)
if dw_2.importfile(docname)<=0 then
messagebox("警告:",'执行importfile函数时出错...')
end if
dw_2.accepttext()
if dw_2.update()<>1 then
messagebox("警告:",'保存数据时出错:'+sqlca.sqlerrtext+'...')
rollback using sqlca;
else
commit using sqlca;
end if
dw_1.object.compute_2.visible=true
dw_1.object.t_3.visible=true

long ks_cj,zy_cj,ps_cj,sum,i
string db_nj,db_jxd,db_xj,db_xh,db_xm,db_zy,db_kc
sum=dw_2.rowcount()
for i=1 to sum
//将成绩导入的成绩大于原数据库中的成绩的数据插入到一个临时表中(db_temp)
//以便统计人数
insert into db_temp
select cjk_info_temp.nj,cjk_info_temp.jxd,cjk_info_temp.xjdm,cjk_info_temp.xh,cjk_info_temp.xm,cjk_info_temp.bzdm,cjk_info_temp.kcdm,cjk_info_temp.kscj2,cjk_info_temp.zycj2,cjk_info_temp.pscj2 from cjk_info_temp,t_cjk_temp
where cjk_info_temp.xh=t_cjk_temp.xh and cjk_info_temp.kcdm=t_cjk_temp.kcdm and cjk_info_temp.kscj2<>t_cjk_temp.kscj2;
next
就是以上的步骤完成不了,db_temp中插入不进数据
请高手帮忙阿!!谢谢了!!
...全文
335 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chnan222 2007-10-24
  • 打赏
  • 举报
回复
实际上,是由于我本来的正是表中的kscj2一栏没有任何数据,所以不能比较,将他们都改成0后就可以执行了。无论如何都谢谢大家了!
chnan222 2007-10-12
  • 打赏
  • 举报
回复
我想错了,不用循环,恍然大悟阿!谢谢您的提醒。不过我觉得应该还是我的查询条件有问题,如果我去掉cjk_info_temp.kscj2>t_cjk_temp.kscj2这一句就可以提交成功!但是加上就不行了,什么也没有哦。
chnan222 2007-10-12
  • 打赏
  • 举报
回复
那个循环是为了让两个表的每个数据比较,然后找出成绩大的,从新改写数据库中的正是表。
我现在就是不太清楚应该怎样对比两个表中的数据,就是学号和课程相同的学员在两个表中作成绩对比,就是这个地方我觉得有毛病,但不知道怎么修改!
chnan222 2007-10-12
  • 打赏
  • 举报
回复
insert into db_temp
select cjk_info_temp.nj,cjk_info_temp.jxd,cjk_info_temp.xjdm,cjk_info_temp.xh,cjk_info_temp.xm,cjk_info_temp.bzdm,cjk_info_temp.kcdm,cjk_info_temp.kscj2,cjk_info_temp.zycj2,cjk_info_temp.pscj2 from cjk_info_temp,t_cjk_temp
where cjk_info_temp.xh=t_cjk_temp.xh and cjk_info_temp.kcdm=t_cjk_temp.kcdm and cjk_info_temp.kscj2>t_cjk_temp.kscj2;
if sqlca.sqlcode<>0 then
messagebox("警告:","将数据插入到正式表失败!"+sqlca.sqlerrtext)
rollback using sqlca;
end if
commit using sqlca;
我已经这样做了,按照您所说的,但是没有错误提示!呵呵!不过好感谢您啊!还不断的帮我找问题。我在试试!嘻嘻~
winstonsu 2007-10-11
  • 打赏
  • 举报
回复
1、是不是
select cjk_info_temp.nj,cjk_info_temp.jxd,cjk_info_temp.xjdm,cjk_info_temp.xh,cjk_info_temp.xm,cjk_info_temp.bzdm,cjk_info_temp.kcdm,cjk_info_temp.kscj2,cjk_info_temp.zycj2,cjk_info_temp.pscj2 from cjk_info_temp,t_cjk_temp
where cjk_info_temp.xh=t_cjk_temp.xh and cjk_info_temp.kcdm=t_cjk_temp.kcdm and cjk_info_temp.kscj2 < >t_cjk_temp.kscj2
没有结果,单独执行一下试试

2、是不是执行完没有提交,commit试试

3、下面的循环是什么作用?
for i=1 to sum
//将成绩导入的成绩大于原数据库中的成绩的数据插入到一个临时表中(db_temp)
//以便统计人数
insert into db_temp
select cjk_info_temp.nj,cjk_info_temp.jxd,cjk_info_temp.xjdm,cjk_info_temp.xh,cjk_info_temp.xm,cjk_info_temp.bzdm,cjk_info_temp.kcdm,cjk_info_temp.kscj2,cjk_info_temp.zycj2,cjk_info_temp.pscj2 from cjk_info_temp,t_cjk_temp
where cjk_info_temp.xh=t_cjk_temp.xh and cjk_info_temp.kcdm=t_cjk_temp.kcdm and cjk_info_temp.kscj2 < >t_cjk_temp.kscj2;
next

chnan222 2007-10-11
  • 打赏
  • 举报
回复
试过了,没有错误,郁闷!不知是不是条件写的不对,所以导致插不进数据。
chnan222 2007-10-11
  • 打赏
  • 举报
回复
谢谢您的提醒,我试试!
sbks 2007-10-11
  • 打赏
  • 举报
回复
如果提交出错,sqlerrtext肯定要有内容的

楼主之所以没有内容,看看sqlca.autocommit是不是已经设置成true了?设成true时,pb会自动把它commit或rollback,此时的sqlerrtext的值只会是commit或rollback成功后的值,当然没有内容了

把它设成false,再在你自己的语句后查看sqlerrtext
winstonsu 2007-10-10
  • 打赏
  • 举报
回复
把sqlcode 和 sqlerrtext打出来找原因

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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