|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
sthuang66
註冊時間: 2014-04-27 文章: 171
第 1 樓
|
發表於: 星期一 十一月 30, 2015 6:39 pm 文章主題: 當利用sql語法創立新欄位時被自動設定NOT NULL!想取消該如何試好? |
|
|
R1表為 seq_n,name,item,fee_N,CHECK_NO,payment它們資料型態是N(6), c(10), C(25), N(6), c ( 8 ) ,C(3)
R2表是 CH_P,payment 它們資料型態是c(6), c(3)
當我把
SELECT R1.seq_n,R1.name,R1.item,R1.fee_N,R1.payment,ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no) as CHECK_N FROM R1 LEFT JOIN R2 ON R1.payment = R2.payment INTO TABLE DATA
這時候新產生的CHECK_N 欄位會被自動設成NOT NULL格式,我知道是可以用modify structure改正, 我用CAST()函數不行,用set null on 放在select 之前也不行,懇請各位高手指正
---------------------------------------------------------------------------------
我會有這樣需求是因為R1是利用form取的數據!在check_no支票號碼不想每次key快十個字所以利用R2的檔來把資料完備,因為有時的資料不會有key check_no,當利用left join 就會跳出null |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 2 樓
|
發表於: 星期一 十一月 30, 2015 6:54 pm 文章主題: |
|
|
我是有想過就ALTER TABLE R1 ADD COLUMN CHECK_N C(12)
接下來把ALLTRIM(CHECK_NO) ----->R1
ALLTRIM(CH_P)-------->R2
兩個表中的兩個欄位相加填入新欄位的傳統VFP語法我就不會了
懇請各位高手教導 |
|
回頂端 |
|
|
perry
註冊時間: 2014-07-20 文章: 203
第 3 樓
|
發表於: 星期一 十一月 30, 2015 7:01 pm 文章主題: |
|
|
試試
SELECT R1.seq_n,R1.name,R1.item,R1.fee_N,R1.payment,left(ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no)+spac(12),12) as CHECK_N FROM R1 LEFT JOIN R2 ON R1.payment = R2.payment INTO TABLE DATA
ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no) 這個寫法會造成欄位長度不確定 |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 4 樓
|
發表於: 星期一 十一月 30, 2015 7:53 pm 文章主題: |
|
|
我試過CAST()!以下不行
SELECT R1.seq_n,R1.name,R1.item,R1.fee_N,R1.payment,CAST(ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no) AS C(12) NULL) CHECK_N FROM R1 LEFT JOIN R2 ON R1.payment = R2.payment INTO TABLE DATA
TO perry
left(ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no)+spac(12),12) as CHECK_N 也是會造成新欄位不允許NULL |
|
回頂端 |
|
|
perry
註冊時間: 2014-07-20 文章: 203
第 5 樓
|
發表於: 星期一 十一月 30, 2015 8:00 pm 文章主題: |
|
|
您 po 的 Select SQL ,VFP 6.0 測不會產生問題!!!
當 r1=r2 時,新欄位有資料,r1#r2 則新欄位出現 .NULL. |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 6 樓
|
發表於: 星期二 十二月 01, 2015 11:59 am 文章主題: |
|
|
真的是太厲害了!謝謝perry的指導!
因為我的總表有支票也有現金欄位 現金是不填入Check_no的所以正如你所說的當r1<>r2時會跳null |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 7 樓
|
發表於: 星期二 十二月 01, 2015 1:11 pm 文章主題: |
|
|
就直接清掉就好了.
代碼: |
****************** DENULL
* 將 alias 中,文數字欄位有 .null. 清為空字串或是0
*
* 傳入值: 字串 cALIAS 欲處理的資料表別名
* 傳回值: 無
* 使用方式: DENULL("ADS")
*
PROCEDURE DENULL
PARAMETER cALIAS
SELECT &cALIAS
FCOUNT=AFIELDS(FARRAY,cALIAS)
FOR I=1 TO FCOUNT
cSQL="UPDATE "+cALIAS+" SET "
DO CASE
CASE FARRAY(I,2) = 'C'
cSQL=cSQL+ALLTRIM(FARRAY(I,1))+"=IIF(ISNULL("+ALLTRIM(FARRAY(I,1))+"),'',"+ALLTRIM(FARRAY(I,1))+")"
&cSQL
CASE FARRAY(I,2) $ 'NFIBY'
cSQL=cSQL+ALLTRIM(FARRAY(I,1))+"=IIF(ISNULL("+ALLTRIM(FARRAY(I,1))+"),0,"+ALLTRIM(FARRAY(I,1))+")"
&cSQL
OTHERWISE
ENDCASE
NEXT
ENDPROC
|
CUSROR 唯讀? 請自己搜尋解法. XD
也可以變化一下,用 ALTER TABLE XXXX ALTER COLUMN OOOO NULL 調整
代碼: |
SELECT R1.seq_n,R1.name,R1.item,R1.fee_N,R1.payment,ALLTRIM(R2.ch_p)+ALLTRIM(R1.check_no) as CHECK_N FROM R1 LEFT JOIN R2 ON R1.payment = R2.payment INTO TABLE DATA
=DENULL("DATA")
|
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
perry
註冊時間: 2014-07-20 文章: 203
第 8 樓
|
發表於: 星期二 十二月 01, 2015 3:25 pm 文章主題: |
|
|
若真的不想顯示 .Null.
Set NullDisplay to '' |
|
回頂端 |
|
|
oldbb
註冊時間: 2007-02-28 文章: 83
第 9 樓
|
發表於: 星期二 十二月 01, 2015 3:45 pm 文章主題: |
|
|
NVL(R2.ch_p-R1.check_no, "") as CHECK_N |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|