我正在尝试向Access 2016表添加一系列字段,但仍然遇到错误:
Runtime error '3259'
Invalid field data type
我最初将数据类型指定为dbNumeric,但将其更改为dbDecimal以查看是否有所不同。虽然我没有尝试SQL,但为CreateFields提供here的解决方案并没有解决我的问题。它没。这是代码:
Sub BOD_Variables()
Dim myDBS
Dim myTable As TableDef
Dim myTableName As String
myTableName = "BOD_Data"
Set myDBS = CurrentDb
Set myTable = myDBS.TableDefs(myTableName)
Dim myField As Field
Dim myVariableNames As Variant
myVariableNames = Array("Blank_4_SampleVol", ... "BOD_ Concentration _OUT")
Dim iCount As Integer
For iCount = LBound(myVariableNames) To UBound(myVariableNames)
Debug.Print myVariableNames(iCount)
Set myField = myTable.CreateField(myVariableNames(iCount), dbDecimal) 'Originally specified dbNumeric for data type.
myTable.Fields.Append myField
Next
End Sub
我试图用以下代码替换对Array(index)的调用:
Set myField = myTable.CreateField("Blank_4_SampleVol", dbNumeric)
仍然得到同样的错误。
我尝试将长度指定为discussed here,但这并没有解决问题。关于CreateField的文档说它在字段类型为dbNumberic时忽略字段长度。
我缺少什么想法?提前致谢。
答案 0 :(得分:1)
虽然DAO似乎没有公开创建Decimal
字段所需的属性,但即使我们尝试使用DAO.Field2
对象,以下ADOX代码确实会创建{{1 }(使用Access 2010测试):
Decimal
或者,我们可以使用DDL查询......
Option Compare Database
Option Explicit
Sub AddNewDecimalField()
Dim cat As New ADOX.Catalog
cat.ActiveConnection = CurrentProject.Connection
Dim tbl As ADOX.Table
Set tbl = cat.Tables("MyTable")
Dim col As New ADOX.Column
col.Name = "MyNewDecimalField"
col.Type = adNumeric ' note: not adDecimal
col.Precision = 18
col.NumericScale = 8
tbl.Columns.Append col
End Sub
......正如安德烈在答案中所说的那样。
答案 1 :(得分:0)
关注相关问题中的link,并阅读DECIMAL脚注#7:
[7]在Access查询界面或DAO中不可用。使用ADO执行DDL查询语句。
所以你要使用这样的东西:
strSQL = "ALTER TABLE myTable ADD COLUMN " & myVariableNames(iCount) & " DECIMAL (20,6);"
CurrentProject.Connection.Execute strSQL
小数字段有(见下面的评论)他们的问题,请参阅Avoid Using Decimal Field Size in Microsoft Access Tables
或http://allenbrowne.com/bug-08.html
长或双或货币可能是更好的选择。