VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

奇怪的 ICASE 函數

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
dkfdtf



註冊時間: 2005-02-05
文章: 31
來自: guangzhou,china

第 1 樓

發表發表於: 星期四 五月 03, 2007 11:11 am    文章主題: 奇怪的 ICASE 函數 引言回覆

一條長長的 SQL 語句在測試時總是齣現 C0000005 錯誤,一直簡化到最后才髮現是 ICASE 函數造成!但此 ICASE 函數並沒有錯誤 !!!

下麵是簡化后的重現過程:

CREATE CURSOR test ( id N(2) )
FOR m.ii = 1 TO 10
INSERT INTO test( id ) VALUES ( m.ii )
ENDFOR

SELECT ICASE( id==1, 'A', id==2, 'B', 'D' ) FROM test && 這條語句居然齣 C0000005

如果將 D 改為 C 則不會齣現! 簡直暈S了。

環境:Windows XP SP2 + vfp9 SP1, 其它環境下不知情況如何?
回頂端
檢視會員個人資料 發送私人訊息
impotence



註冊時間: 2005-02-21
文章: 135
來自: Hong Kong

第 2 樓

發表發表於: 星期四 五月 03, 2007 12:10 pm    文章主題: 引言回覆

已測試 , 所得結果和你一樣 !
_________________
一個常常忘記 Command 的人 !
回頂端
檢視會員個人資料 發送私人訊息
marvin



註冊時間: 2004-06-01
文章: 321


第 3 樓

發表發表於: 星期四 五月 03, 2007 12:12 pm    文章主題: 引言回覆

我試過, 確實有 C0..0005

問題是這指令不應該這樣用
select 後亦不可這方式選擇要列出的欄位.
回頂端
檢視會員個人資料 發送私人訊息
Abel



註冊時間: 2005-03-14
文章: 189
來自: 鹿港小鎮

第 4 樓

發表發表於: 星期四 五月 03, 2007 1:04 pm    文章主題: 引言回覆

select 在vfp 中有兩種用法
一個是 單純只能在 vfp 中的 select
一種是 sql 的查詢程序

SQL 已经是大型資料庫中相關廠商中幾近較接近且相同的語言了,大多數廠商慢慢向 sql 標準程序看齊,
而且在我所接觸的 vfp 中 的 sql 也有一些的變動,這些 sql 程序都有越來越向 sql 標準程序靠攏的樣子,
當然對 vfp user 可能會有越變越不好用的情形,原本一個式就可以,現在搞得要好多式子才能做一樣功,
不過如果將 vfp 想成可以進出大多數資料庫的程式語言,那麼就應該慢慢接受 open share 的觀念,
多做一點功可以更 容易與人接觸,才不會使 vfp 更冷門。

您看就連 M$ 的 office 2007 也都推出能共用 xml 格式的相關檔案。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
dkfdtf



註冊時間: 2005-02-05
文章: 31
來自: guangzhou,china

第 5 樓

發表發表於: 星期四 五月 03, 2007 1:44 pm    文章主題: 引言回覆

marvin 寫到:
我試過, 確實有 C0..0005

問題是這指令不應該這樣用
select 後亦不可這方式選擇要列出的欄位.


我並非選擇要列出的欄位。
原程序中是有一數據表存放了單據的單頭數據(其中有一整型欄位代表單據的類型);表單中將符合一定條件的單號列出供用戶挑選,每種不同的單據顯示不同的顔色(使用 grid 顯示)。為了以后容易維護和理解,所以在生成 grid 的 recordsource 時希望用一個字母來表示單據類型,這樣在編寫的 dynamicforecolor 屬性中可以清楚看到顔色與單據類型的對應關繫,其中一例便是用 'D' 代表已被冲紅的單據,沒想到......最后改用 K(illed) 代表。

那條語句的原型如下:

INSERT INTO curHeads ;
 SELECT bh.id, 'B', ;
  ICASE( ;
   1 == bh.billtype, 'G', ;
   2 == bh.billtype, 'P', ;
   10 == bh.billtype, 'R', ;
   11 == bh.billtype, 'S', 'D ' ), ;
  Thisform.billmark1 + TRANSFORM( bh.billno, '@R 999999.9999' ), ;
  '', bh.d_gen, TTOD( bh.dt_cfm ), ;
  '', cu.cname, bh.notes ;
  FROM bkvend_h bh ;
  LEFT JOIN curUsers cu ON bh.operid == cu.id ;
  WHERE !EMPTY( bh.dt_cfm ) AND ( bh.vendorid == Thisform.vendorid ) ;
 UNION ;
 SELECT bh.id, 'S', ;
  ICASE( ;
   1 == bh.billtype, 'G', ;
   2 == bh.billtype, 'P', ;
   10 == bh.billtype, 'R', ;
   11 == bh.billtype, 'S', 'D' ), ;
  Thisform.billmark2 + TRANSFORM( bh.billno, '@R 999999.9999' ), ;
  bh.vendbillno, bh.d_gen, TTOD( bh.dt_cfm ), ;
  cu1.cname, cu2.cname, bh.notes ;
  FROM orders_h bh ;
  LEFT JOIN curUsers cu1 ON bh.mapoutid == cu1.id ;
  LEFT JOIN curUsers cu2 ON bh.operid == cu2.id ;
  WHERE !EMPTY( bh.dt_cfm ) AND ( bh.vendorid == Thisform.vendorid ) ;
 ORDER BY d_gen

提取那么多的欄位是因為這個 cursor 還有其它用途。


dkfdtf 在 星期四 五月 03, 2007 3:58 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2158


第 6 樓

發表發表於: 星期四 五月 03, 2007 3:01 pm    文章主題: 引言回覆

我測試過,
只要ICASE的最後的一個參數的最後一個字,
不要是D 就不會出錯,
更奇怪的是,
如果你用一個變數代替 'D' 就不會出錯,
看誰能把這個VFP9的BUG 提報給MicroSoft 吧.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
BIN



註冊時間: 2004-07-22
文章: 94
來自: Tainan, Taiwan

第 7 樓

發表發表於: 星期四 五月 03, 2007 5:19 pm    文章主題: 引言回覆

SELECT IIF(id==1, 'A',IIF( id==2, 'B', 'D' )) FROM test

暫時用IIF()解決吧...
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作