請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中插入不進資料
請高手幫忙阿!!謝謝了!!
uj5u.com熱心網友回復:
把sqlcode 和 sqlerrtext打出來找原因uj5u.com熱心網友回復:
謝謝您的提醒,我試試!uj5u.com熱心網友回復:
試過了,沒有錯誤,郁悶!不知是不是條件寫的不對,所以導致插不進資料。uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
如果提交出錯,sqlerrtext肯定要有內容的樓主之所以沒有內容,看看sqlca.autocommit是不是已經設定成true了?設成true時,pb會自動把它commit或rollback,此時的sqlerrtext的值只會是commit或rollback成功后的值,當然沒有內容了
把它設成false,再在你自己的陳述句后查看sqlerrtext
uj5u.com熱心網友回復:
insert into db_tempselect 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;
我已經這樣做了,按照您所說的,但是沒有錯誤提示!呵呵!不過好感謝您啊!還不斷的幫我找問題。我在試試!嘻嘻~
uj5u.com熱心網友回復:
那個回圈是為了讓兩個表的每個資料比較,然后找出成績大的,從新改寫資料庫中的正是表。我現在就是不太清楚應該怎樣對比兩個表中的資料,就是學號和課程相同的學員在兩個表中作成績對比,就是這個地方我覺得有毛病,但不知道怎么修改!
uj5u.com熱心網友回復:
我想錯了,不用回圈,恍然大悟阿!謝謝您的提醒。不過我覺得應該還是我的查詢條件有問題,如果我去掉cjk_info_temp.kscj2>t_cjk_temp.kscj2這一句就可以提交成功!但是加上就不行了,什么也沒有哦。uj5u.com熱心網友回復:
實際上,是由于我本來的正是表中的kscj2一欄沒有任何資料,所以不能比較,將他們都改成0后就可以執行了。無論如何都謝謝大家了!轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/117862.html
標籤:數據庫相關
