我最近从MySQL迁移到了MariaDB,我的价格下降了两位小数。我已经进行了检查,价格列将其类型设置为十进制(19,4),这样如果我需要,我可以有四个小数点。
所以我得出结论,通过ADO和ODBC连接器连接有一些东西。
我看了,我发现如果我将我的sql语句转换为十进制(6,2),那么小数就会正确显示,所以我直接在mariadb中重新构建表。
但是我注意到所有价格都显示正确,除了小数位上有两个零的价格。
值为5.00,返回的是0.05
我不确定我的错误在哪里,但这意味着任何一个整数或零都不会保留它们的位置。我该如何解决这个问题?它是我的列的方式,或者vba:ado解释它收到的方式,还是odbc连接器返回的方式?
这是我正在使用的代码,以尝试调试此问题:
Public Sub decimalcheck()
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constring As String
constring = "DSN=my_dsn;"
db.Open constring, "user", "pass"
rs.ActiveConnection = db
rs.Source = "select Prices FROM my_table "
rs.Source = "select cast(my_prices as decimal(6,2) ) FROM my_table"
rs.Open
rs.MoveFirst
Do While Not rs.EOF And Not rs.BOF
Debug.Print rs.Fields(0)
Debug.Print CDec(rs.Fields(0))
rs.MoveNext
Loop
rs.Close
end sub
我将某些结果投射为双倍,所以我不需要研究它是否值得将其保持为十进制或者加倍。
答案 0 :(得分:0)
好的,这是我的结果:
所以我的假设是ado,(或vba)更习惯使用double,并且不能正确解释十进制。所以这给我们留下了一个问题:
其次,将列保留为小数,然后在select语句中将其与ADO一起使用时将其转换为double。示例代码:
SELECT CAST(column_name AS DOUBLE(19,4))FROM my_table
很抱歉只是问了一个问题,过了一会儿。希望它能帮助其他人,如果不是......那就删除吧。