線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2782
推到 Plurk!
推到 Facebook!

如何檢查欄位為空值?

答題得分者是:Coffee
VICSYS
初階會員


發表:21
回覆:64
積分:32
註冊:2002-10-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-01 22:22:20 IP:219.68.xxx.xxx 訂閱
ClientDataSet的 "標準元件"(非第三方) 有個文字欄位, 測試結果, 跟預期的不一樣
procedure TForm2.Button1Click(Sender: TObject);
var
s:string;
cc, c,cn,ce,cs1, cs2:boolean;
iamnull:boolean;
begin

c:= cdsCustomersState.IsNull;
cn:= VarIsNull(cdsCustomersState.AsVariant);
ce:= VarIsEmpty(cdsCustomersState.AsVariant);

cs1:= VarIsNull(cdsCustomersState.value);
s:= cdsCustomersState.Value;
cs2:= VarIsNull(s);
cc:= VarIsClear(S);
if S='' then
iamNull:= True
else
iamNull:= False;
c:=c; <- 中斷點
end;

Watch List 視窗
Watch Name Value
cdsCustomersState.Value ''
cdsCustomersState.IsNull False
....

ClientDataSet 如何判斷欄位是否為空白? 只好轉成字串後來判斷?

1.當 cdsCustomersState.value 原來有值
2.清空cdsCustomersState 後, 執行 Post
3.以上的 Boolen, 除了 iamnull 是 True; 其他都是 False,

我是問題是一定要轉成文字來判斷嗎?

再來的問題更大, 如果該欄位為數值型的欄位!
1.原來有值假設為 0 (BCDField)
2.後來清空
3.這時如果只能轉成數字來判斷, 那轉成數字的結果是 0 如何區分?
VICSYS
初階會員


發表:21
回覆:64
積分:32
註冊:2002-10-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-01 22:41:57 IP:219.68.xxx.xxx 訂閱
對不起! BCDField 可以用 VarIsNull 來檢查
ex.
VarIsNull(cds00MAXQTY.AsVariant);

為什麼我要用 asVariant 來檢查, 因為我想用 cds.Fields[I].Value 來檢查欄位是否存在資料! 現在只剩下 TStringField...
VICSYS
初階會員


發表:21
回覆:64
積分:32
註冊:2002-10-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-01 23:19:03 IP:219.68.xxx.xxx 訂閱
後來想想用 cds.Fields[I].Value 來檢查也不太好, 因為 cds.Fields[I].Value 會真正去讀取,
而只作為判斷空值的成本似乎太高, 如果 文字欄位有 32K 大小, 那麼每次判斷時都要把 32K 的資料讀入!

不過很奇怪的是 bcdField 的 IsNull, 驗正結果就是我要的! 不會有下列的定義
null的意思是該欄位內重來沒有過值(也就是從未使用過),而零長度表示使用過了

這讓我想到一件事件, 如果 BcdField IsNull 的結果是正常的話! 那麼如果我把 TStringField 加工, 結果可能會得到我想要的!

TStringField.Value:= ''; // IsNull 為 False
TStringField.AsVariant:= Null; // IsNull 為 True
TStringField.Clear; // IsNull 為 True

太好了, 解決了!
VICSYS
初階會員


發表:21
回覆:64
積分:32
註冊:2002-10-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-02 00:03:10 IP:219.68.xxx.xxx 訂閱
要求結案已過 1 天?

那要怎麼把結案給 Ktop_Robot?
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-02 01:08:06 IP:203.73.xxx.xxx 訂閱
結缺席。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-05-19 1:15:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!