Access + VBA:货币变化。区域设置

Posted

技术标签:

【中文标题】Access + VBA:货币变化。区域设置【英文标题】:Access + VBA: Currency change. Regional-settings 【发布时间】:2012-05-06 22:00:16 【问题描述】:

Access 使用货币类型的区域/国家/地区设置。

如何更改货币类型的符号?

Dim DBTable as ADOX.Table
Dim DBCatalog as ADOX.Catalog
Dim DBConnection as ADODB.Connection


DBTable.Name = "TableName"
DBTable.Columns.Append "Currency", adCurrency
DBCatalog.Tables.Append DBTable

Dim C as Double
C = 30.42
DBConnection.Execute "INSERT INTO TableName VALUES (" + "'" + Str(C) + "'" + " ) "

【问题讨论】:

当我创建数据库时,如何覆盖列的Format 属性?请帮忙。 DBTable.Columns.Item("Currency").Properties("Format") ?它不起作用:\ 【参考方案1】:

Currency 数据类型不存储任何货币符号信息。它只是一种特殊的数字类型,最适合用于准确的货币相关存储。

Access 文档将货币数据类型定义为:

货币变量以整数格式存储为 64 位(8 字节)数字,按 10,000 缩放以给出小数点左侧 15 位和右侧 4 位的定点数。此表示提供 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 的范围。 Currency 的类型声明字符是 at 符号 (@)。

货币数据类型对于涉及货币的计算和对准确性尤为重要的定点计算非常有用。

所以并不是因为它被称为Currency 数据类型,它实际上与任何特定的世界货币有任何关系。 您在货币字段中存储的值的含义取决于您。

格式化

当显示Currency 数据类型时,Access 将默认显示您当前区域设置的货币符号。当然,只有当您在该字段中存储的是来自您自己国家的钱时,这才有意义。

最好在设计表格时覆盖此行为,这样格式就会在您使用该字段的任何地方传播。 例如,突出显示的 CurrencyRate 字段设置为使用 Currency 格式,因此它将使用 $,因为这是我所在地区的货币符号:

只需覆盖该格式即可将该字段格式化为其他内容。 例如,作为具有 3 位小数的标准数字或欧元:

在表单或数据表中显示数据时,您还可以覆盖控件的Format 属性:

总结

因此,货币符号不是数据库中存储什么值的问题,而是该值对您的应用程序意味着什么以及如何向用户显示它的问题。

【讨论】:

有帮助,谢谢!但是我如何在 vba 中覆盖 Format 属性?我像在我的问题中一样创建数据库。我必须在哪里覆盖这个属性? (以及如何?)【参考方案2】:

您可以使用 api 设置本地计算机设置。

Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long 

Public Sub SetCurrencyFormat(format As String)
    Dim lngIdentifier As Long
    lngIdentifier = GetUserDefaultLCID()
    If SetLocaleInfo(lngIdentifier, LOCALE_SCURRENCY, format) = False Then
        MsgBox "Error occured while trying to change the setting."
    End If
End Sub

Call SetCurrencyFormat("$")

【讨论】:

好吧,这个方法很难。但如何改变格式?我不想更改本地设置,只是格式化,使用 vba

以上是关于Access + VBA:货币变化。区域设置的主要内容,如果未能解决你的问题,请参考以下文章

使用AHK关闭Access应用程序时未设置对象变量(错误91)

在 Access 2013 VBA 中从 Subform 动态设置 SourceObject 和 RecordSource

如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?

如何在 vba(access) 中将变量设置为我的表单列表框之一?

从vba中的表填充列表框

MS Access 中的拼写检查 VBA 子程序已停止工作