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

时间:2012-05-06 22:00:17

标签: ms-access vba regional-settings

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) + "'" + " ) "

2 个答案:

答案 0 :(得分:4)

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字段设置为使用货币格式,因此它将使用$,因为这是我的区域设置的货币符号:

editing the currency field format

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

Standard format with 3 decimals enter image description here

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

Changing the control's format property

总结

因此,货币符号不是数据库中存储的值的问题,而是该值对您的应用程序的意义,以及您如何将其显示给用户。

答案 1 :(得分:0)

您可以使用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("$")