使用dbexpress+SQL資料庫如何輸入3.14159.... |
答題得分者是:sryang
|
ESCAPE
一般會員 發表:37 回覆:47 積分:16 註冊:2005-02-15 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
ESCAPE
一般會員 發表:37 回覆:47 積分:16 註冊:2005-02-15 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
ESCAPE
一般會員 發表:37 回覆:47 積分:16 註冊:2005-02-15 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
我這邊使用 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 發送簡訊給我 |
很謝謝您的回覆!
我在網上找到類似的問題, 可是都是使用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 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
在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
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
ESCAPE
一般會員 發表:37 回覆:47 積分:16 註冊:2005-02-15 發送簡訊給我 |
您好!
我的環境如下,供您參考... 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
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
還真的有試出這個問題
不太清楚 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 發送簡訊給我 |
您好!
很謝謝您提供的辦法,我目前將欄位型態改為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
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
已提交QC
http://qc.embarcadero.com/wc/qcmain.aspx?d=132353 但這問題能否修正就不知道了 ===================引 用 P.D. 文 章=================== 換個想法, 以 String 方式存入, 取出時再自己轉換 ===================引 用 ESCAPE 文 章=================== 請教各位有經驗的前輩,敝人使用dbexpress連接SQL資料庫, 欄位型態設定Numeric(18,5)。 可是輸入3.14159,存進資料庫變成3.1416... 請問該如何輸入超過四位數小數的數值? 煩請有經驗的前輩不吝指教,謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |