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

使用dbexpress+SQL資料庫如何輸入3.14159....

答題得分者是:sryang
ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-06-30 15:48:02 IP:59.127.xxx.xxx 訂閱
請教各位有經驗的前輩,敝人使用dbexpress連接SQL資料庫,
欄位型態設定Numeric(18,5)。
可是輸入3.14159,存進資料庫變成3.1416...
請問該如何輸入超過四位數小數的數值?
煩請有經驗的前輩不吝指教,謝謝!

GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-06-30 17:32:45 IP:59.120.xxx.xxx 訂閱
請問 Numeric(18,5) 這個欄位被識別為
TBCDField
還是
TFMTBCDField

這會影響所接受的值

以上
===================引 用 ESCAPE 文 章=================== 請教各位有經驗的前輩,敝人使用dbexpress連接SQL資料庫,
欄位型態設定Numeric(18,5)。
可是輸入3.14159,存進資料庫變成3.1416...
請問該如何輸入超過四位數小數的數值?
煩請有經驗的前輩不吝指教,謝謝!

ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-07-01 19:53:25 IP:59.127.xxx.xxx 訂閱
很謝謝您的回覆。
是TFMTBCDField。
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-07-02 07:06:18 IP:211.79.xxx.xxx 訂閱
輸入的方式是?
===================引 用 ESCAPE 文 章===================
很謝謝您的回覆。
是TFMTBCDField。
ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-07-02 14:30:16 IP:59.127.xxx.xxx 訂閱
您好!
使用DBEdit or Edit元件的方式輸入。
但如果使用SQL管理工具軟體直接編輯的話或者使用SQL語法輸入都是可以完整輸入3.14159...
只有使用元件的方式輸入就只能存入小數四位並自動四五入變成3.14160
===================引 用 GrandRURU 文 章===================
輸入的方式是?
===================引 用 ESCAPE 文 章===================
很謝謝您的回覆。
是TFMTBCDField。
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-07-02 15:54:52 IP:59.120.xxx.xxx 訂閱
我這邊使用 EMBT MSSQL DBX Driver 做測試:
1.DBEdit 沒有自動四捨五入的情形
2.Edit 勢必會用到轉型,請務必一律使用 Extended 型別來儲存,使用 Double 會有潛在溢位問題
3.Currency 精度只有小數四位,你的需求超過 Currency 能提供的範圍

以上
=================== 引 用 ESCAPE 文 章 ===================
您好!
使用 DBEdit or Edit 元件的方式輸入。
但如果使用 SQL 管理工具軟體直接編輯的話或者使用 SQL 語法輸入都是可以完整輸入 3.14159...
只有使用元件的方式輸入就只能存入小數四位並自動四五入變成 3.14160
=================== 引 用 GrandRURU 文 章 ===================
輸入的方式是?
=================== 引 用 ESCAPE 文 章 ===================
很謝謝您的回覆。
是 TFMTBCDField。
ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-07-02 18:04:22 IP:59.127.xxx.xxx 訂閱
很謝謝您的回覆!
我在網上找到類似的問題,
可是都是使用ADO,將EnabledBCD=False就可以輸入超過四位小數,
可是有的說可以,有的不行。
但因為我使用dbexpress,不曉得要在哪裡設定EnabledBCD...
想說delphi應該不可能只允許輸入小數四位吧。。。
繼續上網找答案。
===================引 用 GrandRURU 文 章===================
我這邊使用 EMBT MSSQL DBX Driver 做測試:
1.DBEdit 沒有自動四捨五入的情形
2.Edit 勢必會用到轉型,請務必一律使用 Extended 型別來儲存,使用 Double 會有潛在溢位問題
3.Currency 精度只有小數四位,你的需求超過 Currency 能提供的範圍

以上
=================== 引 用 ESCAPE 文 章 ===================
您好!
使用 DBEdit or Edit 元件的方式輸入。
但如果使用 SQL 管理工具軟體直接編輯的話或者使用 SQL 語法輸入都是可以完整輸入 3.14159...
只有使用元件的方式輸入就只能存入小數四位並自動四五入變成 3.14160
=================== 引 用 GrandRURU 文 章 ===================
輸入的方式是?
=================== 引 用 ESCAPE 文 章 ===================
很謝謝您的回覆。
是 TFMTBCDField。
leveon
資深會員


發表:30
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-07-02 19:01:35 IP:220.132.xxx.xxx 訂閱
在DBExpress的架構裡 從SQL server的欄位結構 要對應到Dataset的TFiled的哪個類別
都是定義在驅動程式中 驅動程式沒有參數可調整 沒有Source可修改 那就沒解
Delphi自帶的DBX driver 只有爛可形容

去找devart的產品吧
https://www.devart.com/dbx/sqlserver/
我沒用過 但我認為大部分的問題應該都解決了


===================引 用 ESCAPE 文 章===================
很謝謝您的回覆!
我在網上找到類似的問題,
可是都是使用ADO,將EnabledBCD=False就可以輸入超過四位小數,
可是有的說可以,有的不行。
但因為我使用dbexpress,不曉得要在哪裡設定EnabledBCD...
想說delphi應該不可能只允許輸入小數四位吧。。。
繼續上網找答案。
===================引 用 GrandRURU 文 章===================
我這邊使用 EMBT MSSQL DBX Driver 做測試:
1.DBEdit 沒有自動四捨五入的情形
2.Edit 勢必會用到轉型,請務必一律使用 Extended 型別來儲存,使用 Double 會有潛在溢位問題
3.Currency 精度只有小數四位,你的需求超過 Currency 能提供的範圍

以上
=================== 引 用 ESCAPE 文 章 ===================
您好!
使用 DBEdit or Edit 元件的方式輸入。
但如果使用 SQL 管理工具軟體直接編輯的話或者使用 SQL 語法輸入都是可以完整輸入 3.14159...
只有使用元件的方式輸入就只能存入小數四位並自動四五入變成 3.14160
=================== 引 用 GrandRURU 文 章 ===================
輸入的方式是?
=================== 引 用 ESCAPE 文 章 ===================
很謝謝您的回覆。
是 TFMTBCDField。
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-07-02 20:16:08 IP:182.235.xxx.xxx 訂閱
我這邊無法重現你的問題 能說說你的環境: Delphi 版本 資料庫及版本 測試資料結構 測試方式和 code 否則很難讓人幫得上忙
ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-07-03 11:31:12 IP:59.127.xxx.xxx 訂閱
您好!
我的環境如下,供您參考...
windows7專業版
Delphi XE6 update1
MS SQL Server2014
欄位型態Decimal(18,5)
SQLConnection, SQLDataSet, ClientDataSet

表單上放一個TEdit元件,輸入3.14159(或任意輸入小數四位以上的資料)
程式碼的部分就是很基本的append, post, applyupdates(0)

問題點是如果透過delphi沒辦法存入小數四位以上的資料,如果下sql指令insert, update等是就可以輸入小數四位以上的資料
===================引 用 GrandRURU 文 章===================
我這邊無法重現你的問題 能說說你的環境: Delphi 版本 資料庫及版本 測試資料結構 測試方式和 code 否則很難讓人幫得上忙
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-07-03 16:15:54 IP:59.120.xxx.xxx 訂閱
還真的有試出這個問題
不太清楚 AsExtended 為什麼會自動進位

你可以這麼做:

[code delphi]
cds.Append;
//cds.Fields[0].AsExtended := StrToFloat(Edit1.Text); // 得到 3.14159,卻意外的寫入 3.1416 的值到資料庫
cds.Fields[0].AsBCD := Data.FMTBcd.StrToBcd(Edit1.Text); // 方法一、正統做法,把字串轉成 BCD
cds.Fields[0].AsString := Edit1.Text; // 方法二、利用字串做轉型,但如果裡面有非數字將會出錯
cds.Post;
cds.ApplyUpdates(0);
[/code]

上述是用 XE6 sp1 EMBT 官方 DBX Driver 的做法,建議採用 Leveon 大的作法,買 3rd Driver 才是王道!

以上
===================引 用 ESCAPE 文 章===================
您好!
我的環境如下,供您參考...
windows7專業版
Delphi XE6 update1
MS SQL Server2014
欄位型態Decimal(18,5)
SQLConnection, SQLDataSet, ClientDataSet

表單上放一個TEdit元件,輸入3.14159(或任意輸入小數四位以上的資料)
程式碼的部分就是很基本的append, post, applyupdates(0)

問題點是如果透過delphi沒辦法存入小數四位以上的資料,如果下sql指令insert, update等是就可以輸入小數四位以上的資料
ESCAPE
一般會員


發表:37
回覆:47
積分:16
註冊:2005-02-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-07-03 16:55:01 IP:59.127.xxx.xxx 訂閱
您好!
很謝謝您提供的辦法,我目前將欄位型態改為float,
因為有進度問題,也沒辦法在這個問題卡太久。
我也有在網路上搜尋是否有相關問題,發現這個問題似乎已經存在很久了。但他們都是使用ADO的方式,必須將屬性EnabledBCD:=False。
但結果也是兩極化,有的說可以有的說不可以...
雖然說有其他辦法可以做到將小數四位以上的資料存入資料庫,
但我感到很好奇,delphi不可能做不到直接輸入小數四位以上的資料吧,難道沒有delphi的用戶反應這樣的問題?
只好繼續在網路上搜尋答案囉
===================引 用 GrandRURU 文 章===================
還真的有試出這個問題
不太清楚 AsExtended 為什麼會自動進位

你可以這麼做:

[code delphi]
cds.Append;
//cds.Fields[0].AsExtended := StrToFloat(Edit1.Text); // 得到 3.14159,卻意外的寫入 3.1416 的值到資料庫
cds.Fields[0].AsBCD := Data.FMTBcd.StrToBcd(Edit1.Text); // 方法一、正統做法,把字串轉成 BCD
cds.Fields[0].AsString := Edit1.Text; // 方法二、利用字串做轉型,但如果裡面有非數字將會出錯
cds.Post;
cds.ApplyUpdates(0);
[/code]

上述是用 XE6 sp1 EMBT 官方 DBX Driver 的做法,建議採用 Leveon 大的作法,買 3rd Driver 才是王道!

以上
===================引 用 ESCAPE 文 章===================
您好!
我的環境如下,供您參考...
windows7專業版
Delphi XE6 update1
MS SQL Server2014
欄位型態Decimal(18,5)
SQLConnection, SQLDataSet, ClientDataSet

表單上放一個TEdit元件,輸入3.14159(或任意輸入小數四位以上的資料)
程式碼的部分就是很基本的append, post, applyupdates(0)

問題點是如果透過delphi沒辦法存入小數四位以上的資料,如果下sql指令insert, update等是就可以輸入小數四位以上的資料
sryang
尊榮會員


發表:38
回覆:742
積分:876
註冊:2002-06-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-07-03 17:12:06 IP:59.127.xxx.xxx 訂閱
:= 的左邊要用 ".Value"
:= 的左邊要用 ".Value"
:= 的左邊要用 ".Value"
很重要,所以要說三次
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2015-07-03 18:12:03, 註解 無‧
P.D.
版主


發表:571
回覆:3884
積分:3672
註冊:2006-10-31

發送簡訊給我
#14 引用回覆 回覆 發表時間:2015-07-05 10:40:57 IP:118.160.xxx.xxx 未訂閱
換個想法, 以  String 方式存入, 取出時再自己轉換
===================引 用 ESCAPE 文 章=================== 請教各位有經驗的前輩,敝人使用dbexpress連接SQL資料庫,
欄位型態設定Numeric(18,5)。
可是輸入3.14159,存進資料庫變成3.1416...
請問該如何輸入超過四位數小數的數值?
煩請有經驗的前輩不吝指教,謝謝!

GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#15 引用回覆 回覆 發表時間:2015-07-07 15:52:22 IP:59.120.xxx.xxx 訂閱
已提交QC
http://qc.embarcadero.com/wc/qcmain.aspx?d=132353

但這問題能否修正就不知道了
===================引 用 P.D. 文 章===================
換個想法, 以 String 方式存入, 取出時再自己轉換
===================引 用 ESCAPE 文 章=================== 請教各位有經驗的前輩,敝人使用dbexpress連接SQL資料庫,
欄位型態設定Numeric(18,5)。
可是輸入3.14159,存進資料庫變成3.1416...
請問該如何輸入超過四位數小數的數值?
煩請有經驗的前輩不吝指教,謝謝!

系統時間:2017-11-19 18:15:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!