dw_1的資料源為table_1(qy_code,qy_name,zsxm_ds,sfssqq,sfssqz,sl,ynse),通過dw_1輸入資料,保存的時候,我想要table_1的資料同時復制到table_2(qy_code,qy_name,zsxm_ds,sfssqq,sfssqz,ynse),使table_2也有相應的資料,我用insert into 陳述句時,只能保存資料的最后一行,請教一下,怎樣才能讓多行資料同時保存到另外一張表
uj5u.com熱心網友回復:
insert into table2(qy_code,qy_name,zsxm_ds,sfssqq,sfssqz,ynse)select qy_code,qy_name,zsxm_ds,sfssqq,sfssqz,ynse from table2 where qy_cod in ('1', '2')
'1', '2'為需要匯入的資料
uj5u.com熱心網友回復:
還是沒有理解到那個1,2,我舉個例子吧,如下圖:根據這個1,2是什么呢
uj5u.com熱心網友回復:
寫個回圈。。uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
求賜教啊!!!!!uj5u.com熱心網友回復:
用資料庫觸發器,業務邏輯也有問題,
為啥要保存兩份呢?
uj5u.com熱心網友回復:
table_2是建立起來做圖表分析的,它要把所有的都匯總在一起,table_1只是table_2資料來源的一部分,不管我怎么弄,就只能保存上圖所示的第三行,其他兩行資料都不能保存
uj5u.com熱心網友回復:
建議使用觸發器。uj5u.com熱心網友回復:
在資料視窗里插入資料,只能是一行一行的插入,如果是這樣的話,保存的時候只能是保存最新的一行資料了,lz可以試試一行一行的輸入資料!uj5u.com熱心網友回復:
你可以在界面上做2個dw,一個dw1資料源連結table_1,另一個dw2連接table_2,這樣,你在保存的時候,將dw1中所有記錄便利后,插入dw2,最后,兩個dw一起update就好了。uj5u.com熱心網友回復:
我做的是一個納稅申報的系統,不同的納稅人它所交稅種是不一樣的,納稅人自己本身是沒有輸入資料的權利,唯一能輸入的就只有ynse、sfssqq、sfssqz,至于上圖所示其他的這幾項都是系統根據納稅人的資訊自動生成的,所以不能一條一條的輸入或者如樓上所說建兩個DW。就只能填完資料后直接保存。uj5u.com熱心網友回復:
我想再問哈,樓上所說的資料庫觸發器是什么,還有我聽說也可以用指標來解決這個問題,請問指標又是什么uj5u.com熱心網友回復:
觸發器是個特殊的存盤程序,是系結在表上的,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行uj5u.com熱心網友回復:
如果要建立資料庫觸發器,應該在哪里創建啊uj5u.com熱心網友回復:
現在我改用for回圈,代碼如下(g_id,g_name為全域變數,q,z為區域變數):dw_grid.accepttext()
r_row_count=dw_grid.rowcount()
for i = 1 to r_row_count
r_xm=dw_grid.getitemstring(i,'zsxm_ds')
r_ynse=dw_grid.getitemdecimal(i,'ynse')
insert into ywxxb_sz(qy_code,qy_name,sfssqq,sfssqz,zsxm_ds,ynse) values (:g_id,:g_name,:q,:z,:r_xm,:r_ynse);
next
為什么還是只保存一行資料呢,而且這次保存的不是最后一行了,變成第一行了,但是我在除錯程式的時候發現r_xm,r_ynse會因為行數的改變而變成不同的內容,還是我的代碼還差點什么
uj5u.com熱心網友回復:
建立資料庫觸發器。uj5u.com熱心網友回復:
rowscopy,兩個DW之間的行拷貝,這個很簡單了,只是你在做dw_2的時候盡量把欄位名定義和dw_1一樣。。比如dw_1查詢陳述句是select qy_code,qy_name,zsxm_ds,sfssqq,sfssqz,sl,ynse from table1,那dw_2的查詢陳述句就是selectqy_code,qy_name,zsxm_ds,sfssqq,sfssqz,'0'as sl,ynse from talbe2
dw_2在update的時候不用包含sl列即可....
下面是rowscopy的用法
datawindowchild dwc
dw_3.GetChild("state_id", dwc)
dw_1.RowsCopy(dw_1.GetRow(), &
dw_1.RowCount(), Primary!, dwc, 1, Primary!)
uj5u.com熱心網友回復:
現在我改用for回圈,代碼如下(g_id,g_name為全域變數,q,z為區域變數):dw_grid.accepttext()
r_row_count=dw_grid.rowcount()
for i = 1 to r_row_count
r_xm=dw_grid.getitemstring(i,'zsxm_ds')
r_ynse=dw_grid.getitemdecimal(i,'ynse')
insert into ywxxb_sz(qy_code,qy_name,sfssqq,sfssqz,zsxm_ds,ynse) values (:g_id,:g_name,:q,:z,:r_xm,:r_ynse);
next
為什么還是只保存一行資料呢,而且這次保存的不是最后一行了,變成第一行了,但是我在除錯程式的時候發現r_xm,r_ynse會因為行數的改變而變成不同的內容,還是我的代碼還差點什么
/////////////////////////////////////////////////////////
每次insert之后,好像都要commit一下。你試試看,我也忘記了。
uj5u.com熱心網友回復:
按你的需求其實table_2可以用一個view來代替就行了,觸發器也是不錯的選擇
至于你用for回圈來插入資料的地方在insert陳述句后面判斷一下SQLCA.SQLCode,謹慎懷疑是主鍵重復一類的問題
uj5u.com熱心網友回復:

回復完了才發現這是一年前的帖子,誰這么無聊把它頂起來的?
uj5u.com熱心網友回復:
資料庫的話,用觸發器就可以了程式的話,通過dw_1.getitemstring()來獲取對應資料賦值給dw_2
uj5u.com熱心網友回復:
還是用據庫觸發器最方便,不過用PB也可以。用rowscopy從dw_1到dw_2, dw_1與dw_2的dataobject一樣。之后dw_2.update()uj5u.com熱心網友回復:
先獲取行數,然后通過FOR回圈就可以實作了。uj5u.com熱心網友回復:
你這樣操作的話需要每INSERT一條資料后資料視窗都需要插入一個空行才行的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/31442.html
標籤:腳本語言
上一篇:新手,請教些問題
下一篇:PB如何實作兩臺列印機同時列印?
