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

判斷不出 Null 值?

 
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-06 16:40:40 IP:211.22.xxx.xxx 未訂閱
小弟遇到一個怪怪的問題, 用 TQuery 去 Select 一個欄位的值 該欄位的值可能為 0, 1 或 Null 結果小弟用第一種寫法就得不到 Null 值 此時若值為 Null 時(以 DBExplorer 來觀看結果), 判斷是否為 0 時總是會 True 用第二種寫法就可以, 所以請教大家。 第一種:
if not Query1.IsEmpty then begin
  if (Query1.FieldByName('Value').AsInteger = 0) then begin
    Memo.Lines.Add('Value = 0');
    Result := True;
  end else begin
    if Query1.FieldByName('Value').IsNull then begin
      Memo.Lines.Add('Value Is Null');
      Result := True;
    end else
      Memo.Lines.Add('Value = '   IntToStr(Query1.FieldByName('Value').AsInteger));
    end;
  end else
    Memo.Lines.Add('No Record Return');
end;
第二種:
if not Query1.IsEmpty then begin
  if Query1.FieldByName('Value').IsNull then begin
    Memo.Lines.Add('Value is null');
    Result := True;
  end else begin
    if (Query1.FieldByName('Value').AsInteger = 0) then begin
      Memo.Lines.Add('Value = 0');
      Result := True;
    end else
      Memo.Lines.Add('Value = '   IntToStr(Query1.FieldByName('Value').AsInteger));
    end;
  end else
    Memo.Lines.Add('No Record Return');
end;
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-06 17:05:14 IP:203.204.xxx.xxx 未訂閱
引言: 小弟遇到一個怪怪的問題, 用 TQuery 去 Select 一個欄位的值 該欄位的值可能為 0, 1 或 Null 結果小弟用第一種寫法就得不到 Null 值 此時若值為 Null 時(以 DBExplorer 來觀看結果), 判斷是否為 0 時總是會 True 用第二種寫法就可以, 所以請教大家。 第一種:
if not Query1.IsEmpty then begin
  if (Query1.FieldByName('Value').AsInteger = 0) then begin
    Memo.Lines.Add('Value = 0');
    Result := True;
  end else begin
    if Query1.FieldByName('Value').IsNull then begin
      Memo.Lines.Add('Value Is Null');
      Result := True;
    end else
      Memo.Lines.Add('Value = '   IntToStr(Query1.FieldByName('Value').AsInteger));
    end;
  end else
    Memo.Lines.Add('No Record Return');
end;
第二種:
if not Query1.IsEmpty then begin
  if Query1.FieldByName('Value').IsNull then begin
    Memo.Lines.Add('Value is null');
    Result := True;
  end else begin
    if (Query1.FieldByName('Value').AsInteger = 0) then begin
      Memo.Lines.Add('Value = 0');
      Result := True;
    end else
      Memo.Lines.Add('Value = '   IntToStr(Query1.FieldByName('Value').AsInteger));
    end;
  end else
    Memo.Lines.Add('No Record Return');
end;
那是因為AsInteger時,Delphi把null轉成0的關係,你可用Value或AsVariant試試,不然AsInteger傳回null就會不同型態了。 TJSQRBuild (簡易報表建立元件) http://freehomepage.taconet.com.tw/This/is/taconet/top_hosts//jieshu/delphi.htm#JSQRBuild 經由元件屬性設定,可不用自己拖拉QuickReport元件,即可建立簡單的QuickReport報表,可在設計階段預覽。亦可將建立的報表存成 Delphi 的 Form (類似 QuickReport Wizard 所產生的程式),再做複雜的設定使用,免除一一拖拉元件的困擾。
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-06 17:10:27 IP:211.22.xxx.xxx 未訂閱
引言: 那是因為AsInteger時,Delphi把null轉成0的關係,你可用Value或AsVariant試試,不然AsInteger傳回null就會不同型態了。
懂了! 又承蒙 jieshu 的教導啦! 謝謝。 :)
系統時間:2024-11-23 7:12:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!