我新建了一張TABLE表單
原本檢查是否有重覆的欄位部分,4gl的程式是有寫入的
由於公司需要,所以我必須得將,檢查是否有重覆值的給拿掉
目前也是拿掉的狀況
但拿掉之後,當我按單身他會一直重覆上個值得顯示,但當我退出單身值又是正常的
所以我有找到有一段程式,感覺是這個部分會引響到這塊
但我有點改不出來,想尋求協助該如何修改才行
原始程式段:
LET g_forupd_sql = " SELECT mmc01,mmc02,mmc04,mmc05,mmc06,mmc07,mmcacti
FROM mmc_file ",
" WHERE mmc01= ? FOR UPDATE NOWAIT "
看不懂你的問題? 貼出你的單身段喔!
BEFORE FIELD mmc01
IF g_mmc[l_ac].mmc01 IS NULL OR g_mmc[l_ac].mmc01 = 0 THEN
SELECT max(mmc01)+1
INTO g_mmc[l_ac].mmc01
FROM mmc_file
IF g_mmc[l_ac].mmc01 IS NULL THEN
LET g_mmc[l_ac].mmc01 = 1
END IF
END IF
AFTER FIELD mmc01 #check 編號是否重複
IF g_mmc[l_ac].mmc01 IS NOT NULL THEN
IF g_mmc[l_ac].mmc01 != g_mmc_t.mmc01 OR
(g_mmc[l_ac].mmc01 IS NOT NULL AND g_mmc_t.mmc01 IS NULL) THEN
SELECT COUNT(*) INTO g_cnt FROM mmc_file
WHERE mmc01 = g_mmc[l_ac].mmc01
END IF
END IF
AFTER FIELD mmc02
IF g_mmc[l_ac].mmc01 IS NULL THEN NEXT FIELD mmc01 END IF
因為我把這段mark之後,他不會檢查我的編號是否重覆
但我點單身進去時,變成假設我的第一條有4個欄位
編號 名稱 序號 內容
1 A A A
1 B B B
當我mark的狀況下,可允許上述狀況發生,但會產生一個額外問題
當我點選單身之後,我的第二條 1BBB若還沒點選到他那條她依舊是1BBB,但當我點選到的時候他會變成1AAA,但是當我查詢全部時又是1AAA、1BBB分別兩條正常的狀況。
你可以看看FUNCTION xxx_b()
是否有BEFORE INSERT 新增做INITIALIZE
BEFORE INSERT
LET l_n = ARR_COUNT()
LET p_cmd = 'a'
INITIALIZE g_tc_poe[l_ac].* TO NULL
LET g_tc_poe_t.* = g_tc_poe[l_ac].*
CALL cl_show_fld_cont()
NEXT FIELD tc_poe01
這個問題有很多地方要看.
查詢時,可以看到二筆單身是 程式代編_FILL_B() 這段程式在控管.
在單身輸入時上一筆下一筆時會亂SHOW : 應該是單身的 INPUT ARRAY 中的AFTER ROW 或是AFTER INSERT 或是 ON ROW CHANGE (因為這些地方都會重show 單身資料)
從某些角度來看:程式這樣改會害死後人.因為"項次"可以重覆,資料很容易搞錯而且其他程式要來用這個table的資料時,也容易撈錯資料也會撈到多筆資料.
因為目前公司發票類行改成電子發票後,我需要抓實際出貨發票的虛擬序號,而每次執行完之後虛擬序號由於會重跑,所以我才想說那若產生發票檔案時,就把這些訊息INSERT INTO 到我的TABLE表內使我的TABLE表有實體紀錄,但問題來了我允許序號重覆的狀況下,又希望他能撈取正確資料,但由於我的發票號碼欄位都是重覆的狀況下,取值確實出了問題
及時我給了,我要查詢的條件依發票號碼、料號,需要這兩個條件成立才能過抓取資料
select mmc01 into l_mmc01 from mmc_file where mmc02=g_ohb.ohb30 and mmc04=g_ohb.ohb04
但這樣查詢的結果 l_mmc01竟然為空值....
我是希望她和axmt700退貨那做對應
我進sqlplus 輸入SELCET選線
select mmc01 from mmc_file,ohb_file
where mmc02=ohb30 and mmc04=ohb04;
可以查得出mmc01=2
但進到4gl內這樣寫,就會NULL
這是select 方向錯誤還是?
這段select 解決,我的條件下錯