Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在创建查询字段属性后,是否可以在VBA中设置其格式?_Vba_Ms Access - Fatal编程技术网

在创建查询字段属性后,是否可以在VBA中设置其格式?

在创建查询字段属性后,是否可以在VBA中设置其格式?,vba,ms-access,Vba,Ms Access,在Access中,当使用vba创建一个新查询时,我得到的一些数据是货币数据,但默认情况下是通用数字。我想改变它的格式,就像我们可以在属性表中做的那样,但我似乎找不到办法 我试过了 db.QueryDefs("TestQuery").Fields("SumOfSomething").Type = DAO.dbCurrency 但随后我得到:运行时错误“3219”:操作无效。 我四处搜索了一下,发现了一个类似的问题(但找不到),答案是在它被创建后,你不能改变它。我看不出,如果我们真的做不到的话,有

在Access中,当使用vba创建一个新查询时,我得到的一些数据是货币数据,但默认情况下是通用数字。我想改变它的格式,就像我们可以在属性表中做的那样,但我似乎找不到办法

我试过了

db.QueryDefs("TestQuery").Fields("SumOfSomething").Type = DAO.dbCurrency
但随后我得到:
运行时错误“3219”:操作无效。

我四处搜索了一下,发现了一个类似的问题(但找不到),答案是在它被创建后,你不能改变它。我看不出,如果我们真的做不到的话,有可能改变类型有什么意义


因此,最后,我们能否在创建查询后(在VBA中)更改字段的属性?

我们必须在这里明确目标。是否要“仅”强制转换或更改查询中返回的列类型,还是要修改数据库表中的实际列类型?这是两个截然不同的目标

要使用代码修改列类型,必须创建(添加)新列类型,传输数据,然后删除旧列,然后将列重新命名为旧类型

换句话说,您不能仅仅更改数据类型,因为Access随后必须将每一行更新为新的数据类型

UI系统实际上在幕后完成了上述工作

如果使用DAO代码,则需要以下代码:

然而,上面是相当多的代码。可以使用DDL命令代替DAO代码来添加列

(SQL数据定义语言)来修改类型。因此,在代码中可以执行以下操作:

Dim db         As dao.Database
Dim strSQL     As String

Set db = CurrentDb

strSQL = "ALTER TABLE dbo_tblHotels1 ALTER COLUMN MyAmount currency"
db.Execute strSQL, dbFailOnError

因此,在上面,我们将“MyAmount”列更改为货币类型。

您的问题看起来很简单,但正如您现在可能已经猜到的,它不是

format属性是字段的自定义属性。它们可以存在,如果存在,则应使用
字段.Properties
集合更改它们,如果不存在,则需要使用
字段.CreateProperty
方法创建它们,然后将它们附加到
字段.Properties
集合中

Const currencyFormat As String = "€ #,##0.00;€ #,##0.00-"'Dutch currency format, you need to set this for your locale
Dim qd As DAO.QueryDef
Set qd = CurrentDb.QueryDefs("TestQuery")
On Error Resume Next
qd.Fields("SumOfSomething").Properties!Format = currencyFormat
If Err.Number = 3270 Then 'Property not found, field had no format set
    qd.Fields("SumOfSomething").Properties.Append qd.Fields("SumOfSomething").CreateProperty("Format", dbText, currencyFormat)
End If
On Error GoTo 0

您可以通过设置要使用的字段,然后使用
?CurrentDb.querydfs(“TestQuery”).Fields(“SumOfSomething”).Properties,来获取区域设置的货币格式!格式

请不要问多重问题。更改变量类型与更改格式是完全不同的问题。某些属性可以更改,其他属性不能更改,对于那些不能更改的属性,有一些变通方法。但是请一次一个。为什么不在查询中更改它呢?
CCur([SumOfSomething])
-仅仅因为您可以看到该属性并不意味着您有权更改它-可能听说过只读?如果您决心在创建后更改qdf SQL,您也可以动态更改它。@ErikvonAsmuth抱歉,我现在只能将我的问题更改为主要问题。就我所知,查询定义中的舍入实际上做了同样的事情,所以我解决了这个问题。所以我现在的主要问题是在查询中将结果显示为货币。我可以通过进入“设计”视图并将格式更改为“货币”来手动更改它,但我想知道是否有办法在VBA中执行此操作。@CedL您的意思是将格式设置为货币还是将数据类型更改为货币?“这些都是非常不同的事情。”埃里克沃纳斯默斯,我会说,格式化它?比如说,你可以把数据显示成百分比或者欧元,或者,我喜欢的,货币。因此,这样它会用一个美元符号来显示值,只是为了确保,
“€#,##0.00;€#,###0.00-”
意味着我们允许2位小数,每3位数字(对不起,记不起术语)被逗号除,并且货币符号在前面?@CedL老实说,它对应于我所在地区下拉列表中的货币格式选项,但我还没有分析过。你可以在底部看到我是如何获得它的。它也与欧元格式选项相同。我建议您先打印出您所在地区的格式,然后使用它。除了#,其余的都很容易理解。左边是显示正值的方式,右边是显示负值的方式。钱应该在哪里的标志。零和你想的差不多。假设有0,21,但将格式设置为00.00,它将显示00,21