VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点

Posted

技术标签:

【中文标题】VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点【英文标题】:VBA: Getting coma separator instead of dot for decimal number selected from SQL Server database 【发布时间】:2015-04-18 11:01:48 【问题描述】:

在用户表单上,我有一个价格文本框 (txtCena)。来自用户表单的数据保存在 SQL Server 数据库中。我可以将价格以“0,00”格式(抛光设置)输入到文本框中,但 SQL Server 仍然以“0.00”格式存储十进制值。

我想用从组合框列表中为所选产品输入的最新价格填充价格文本框。

我编写了一个更新后事件,它从数据库中获取价格值,但用点而不是逗号分隔符显示它。 txtCena 还有一个简单的更改事件,检查它是否为数字,如果不是,则将背景和标签颜色更改为红色。

我在寻找解决方案,在这里刷了 8 页搜索引擎出现了,我也用 Google 搜索了,但我没有找到。

当我在价格变化事件或更新产品事件中尝试以下更明显的解决方案时,我开始收到错误。

Me.txtCena = Format(txtCena, "0,00")
Me.txtCena = CDec(txtCena)

txtCena 在 userform_initialize 事件中被声明为 Double。

非常感谢您指出我做错了什么,因为我快疯了。

应该不会很复杂吧?

这是我用来从数据库中获取价格的代码:

On Error GoTo Cena_Initialize_Err:

rsCena.Open "SELECT MAX(Cena) AS Cena " & _
                "FROM [Produkt Usługa] AS P " & _
                "JOIN [Szczegóły transakcji] AS S " & _
                    "ON P.Prd_ID = S.Prd_ID " & _
                "WHERE P.[Produkt Usługa] ='" & Me.cboProdukt.Value & "';", _
                con, adOpenStatic

If rsCena.RecordCount = 0 Then
        rsCena.Close
        Set rsCena = Nothing
        Call txtCena_Change
    Else: rsCena.MoveFirst
            With Me.txtCena
                Do
                    .Value = rsCena.Fields("Cena")
                    rsCena.MoveNext
                Loop Until rsCena.EOF
            End With
End If
On Error GoTo 0

Cena_Initialize_Exit:
    On Error Resume Next
    rsCena.Close
    Set rsCena = Nothing

Cena_Initialize_Err:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
        rsCena.Close
        Set rsCena = Nothing
        con.Close
        Set con = Nothing

【问题讨论】:

我无法追随你的追求。您获得的分隔符基于环境设置。由于您在欧盟,因此小数点分隔符是 , 而不是 .。只要数据不被拆解,显示就无所谓了。 用户表单允许我将数据添加到 SQL Server 数据库。我可以根据欧盟设置(0,00) 将价格作为十进制数字输入到文本框中,并带有,。保存在数据库中时,它会转换为美国格式(0.00),并带有.。当我想使用数据库中的值并用价格填充文本框时,它会使用. 而不是, 插入到texbox。我想自动填写价格,这样用户就不必每次都为产品输入价格,如果它没有改变, 所以你能不能把MAX(Cena)改成REPLACE(MAX(Cena), '.', ',') AS Cena 谢谢,它有效。我感到很惭愧……我不会想到的。我会不会停止钻研问题,并在有如此简单的解决方案的情况下看到它们过于复杂? 【参考方案1】:

我发现您有一个TextBox 绑定到您的数据库,并且此绑定不允许您更改 TextBoxText,如果我的方法正确,我建议您更改您的途径:

使用Label 以自定义格式显示您的价值。

为此,您可以在TextBox 前面添加Label;或 隐藏您的TextBox 并仅显示Label 并在LabelClick 事件中显示TextBox 并隐藏Label 以及在Exit 事件中与之相反;

【讨论】:

文本框值是用于将数据添加到数据库的存储过程的参数。标签只是描述文本框。但 PaulFrancis 的解决方案有效。 @kkris77 我更喜欢使用Label 来显示我的自定义格式,而不是更改TextBox 您将拥有TextBox,在将其数据发送到任何地方时始终没有任何更改;)。跨度>

以上是关于VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点的主要内容,如果未能解决你的问题,请参考以下文章

Excel-VBA 访问 sql server 表进行选择和插入太慢

Excel VBA 连接各种数据库 VBA连接SQL Server数据库

访问 SQL Server 的 VBA 查询

MS ACCESS, VBA 将外部 MS Access 表导入 SQL server 表

使用 VBA 将 Excel 表连接到 SQL Server

从Excel vba中的SQL Server数据中检索/创建记录集