全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1364
推到 Plurk!
推到 Facebook!

請問有關numeric的資料型態

缺席
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-17 10:58:27 IP:220.130.xxx.xxx 未訂閱
請問各位大大: 我有個欄位是numeric(16,8),我在存檔的時候,可以把小數後的八 位寫入,可是select到變數的時候,卻會被截為小數後四位,我的變數 試過,設為Float、real、double…可是還是會被截… 請問有什麼方法可以解決這個問題嗎?
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-17 11:25:10 IP:218.170.xxx.xxx 未訂閱
我從help挖來的sample code,參考看看,也許你用    Dataset.Fields[i].AsBCD 是否能解決呢?    
    var      I: Integer;
  ListItem: string;
begin
  for I := 0 to Query1.ParamCount - 1 do
  begin
    ListItem := ListBox1.Items[I];
    case Query1.Params[I].DataType of
      ftString:
        Query1.Params[I].AsString := ListItem;
      ftSmallInt:
        Query1.Params[I].AsSmallInt := StrToIntDef(ListItem, 0);
      ftInteger:
        Query1.Params[I].AsInteger := StrToIntDef(ListItem, 0);
      ftWord:
        Query1.Params[I].AsWord := StrToIntDef(ListItem, 0);          ftBoolean:
        begin
          if ListItem = 'True' then
            Query1.Params[I].AsBoolean := True
          else
            Query1.Params[I].AsBoolean := False;
        end;
      ftFloat:
        Query1.Params[I].AsFloat := StrToFloat(ListItem);
      ftCurrency:
        Query1.Params[I].AsCurrency := StrToFloat(ListItem);
      ftBCD:
        Query1.Params[I].AsBCD := StrToCurr(ListItem);
      ftDate:            Query1.Params[I].AsDate := StrToDate(ListItem);
      ftTime:
        Query1.Params[I].AsTime := StrToTime(ListItem);
      ftDateTime:
        Query1.Params[I].AsDateTime := StrToDateTime(ListItem);
    end;
  end;
end;    
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-17 14:11:35 IP:220.130.xxx.xxx 未訂閱
QQ 我試了AsBcd…還是不行…會被截到小數第四位…
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-17 14:57:06 IP:202.62.xxx.xxx 未訂閱
您好﹗    會不會是這個原因﹕ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43701    ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-17 15:35:09 IP:218.170.xxx.xxx 未訂閱
你用BDE嗎?用BDE設定EnabledBCD會導致小數位數四位 改用ADO應該就不會有這樣的情況了
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-17 16:09:12 IP:220.130.xxx.xxx 未訂閱
@@ 那個…我用的是DataSnap的SocketConnection 還有DataAccess的ClientDataSet…
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-17 16:14:45 IP:218.170.xxx.xxx 未訂閱
就算是clientdataset,後端一定有datasetProvider連接的dataset, 查看看吧 BDEDataset(或其他)->DatasetProvider->...->SocketConnection->ClientDataset
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-17 16:47:41 IP:220.130.xxx.xxx 未訂閱
@@" 那個…我用的是ADO 不是用BDE...
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-17 17:06:32 IP:218.170.xxx.xxx 未訂閱
引言: 請問各位大大: 我有個欄位是numeric(16,8),我在存檔的時候,可以把小數後的八 位寫入,可是select到變數的時候,卻會被截為小數後四位,我的變數 試過,設為Float、real、double…可是還是會被截… 請問有什麼方法可以解決這個問題嗎?
你用 TVariantField(Field).asstring 應該就可以顯示全部的位數了 在不然,你重新拉一次feilddef的結構,也許是資料庫有經過修改欄位的過程,而你的前端ClientDataset內的fielddef的結構仍然是舊的
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-17 17:47:15 IP:220.130.xxx.xxx 未訂閱
QQ 嗯…真是抱歉啊…我在ClientDataSet找不到TVariantField… @@ 另外我用的是3-Tier的架構…
系統時間:2024-06-26 6:54:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!