Excel VBA将数组变量插入到访问中的单个字段中
Posted
技术标签:
【中文标题】Excel VBA将数组变量插入到访问中的单个字段中【英文标题】:Excel VBA insert array variable into single field in access 【发布时间】:2016-05-25 22:23:10 【问题描述】:在我的项目中,我试图将 excel 表中的无限期条目保存到数据库中(访问)。我正在尝试使用 vba 来做到这一点。但是,因为我不知道条目会有多长时间,而且我无法在数据库中创建这么多字段来适应未知数量的条目。而且我无法将数组变量插入表中的一个字段。我该怎么做?
说我有下面。
Dim SN(100) As String
SN(0)=123 'value of each entry
SN(1)=2412
'so on and so many entries
然后在SQL语句中,
"INSERT INTO [TableName] ([FieldName]) Values (SN)"
它会说 RunTime Error "13" Type mismatch.
数据库字段有什么方法可以接受列表或数组作为数据类型?那么当我调用数据时,我可以使用索引来调用列表中的变量吗?
【问题讨论】:
【参考方案1】:MS Access 没有这样的数据类型,更原始的类型,如字符串、布尔值、长整数。但考虑使用Join
将数组中的所有项目连接成一个字符串并将该字符串保存到数据库表中。然后根据需要使用Split
拉回数组:
Sub ArrayIntoSQL()
Dim SN(100) As String, TN() As String
Dim SNstr As String,
SN(0) = 123 'value of each entry'
SN(1) = 2412
SNstr = Join(SN, "|") ' PIPE DELIMITER '
'123|2412|||||||||||||||||||||||||||||||||||||||||||||_
||||||||||||||||||||||||||||||||||||||||||||||||||||||'
strSQL = "INSERT INTO [TableName] ([FieldName]) Values ('" & SNstr & "')"
...
End Sub
Sub ArrayOutofSQL()
Dim SN() As String
Dim SNstr As String
strSQL = "SELECT [FieldName] FROM [TableName]"
...
Do While Not rst.EOF
SN() = Split(rst!FieldName, "|")
rst.MoveNext
Loop
...
End Sub
由于数组项可能超过 Access 对 短文本 数据类型的 255 个字符限制,请使用 长文本 类型(以前称为 memo ) 没有声明的限制。
但是,对于最佳实践,宽表(多列)和存储对象(如字段中的数组)比长表(多行)和链接对象更昂贵。所以简单地迭代保存数据:
For Each item in SN
strSQL = "INSERT INTO [TableName] ([FieldName]) Values (" & item & ")"
...
Next item
当然,用ID
、Person
、Date
等标识符保存值!
【讨论】:
以上是关于Excel VBA将数组变量插入到访问中的单个字段中的主要内容,如果未能解决你的问题,请参考以下文章
Excel-VBA - 在数据字段数组中插入新的第一列,无需循环或 API 调用
使用VBA将VBA模块从Access项目导出到Excel项目