如何檢查欄位為空值? |
答題得分者是:Coffee
|
VICSYS
初階會員 ![]() ![]() 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
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 發送簡訊給我 |
|
VICSYS
初階會員 ![]() ![]() 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
後來想想用 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 發送簡訊給我 |
|
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |