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

当然,用IDPersonDate等标识符保存值!

【讨论】:

以上是关于Excel VBA将数组变量插入到访问中的单个字段中的主要内容,如果未能解决你的问题,请参考以下文章

Excel-VBA - 在数据字段数组中插入新的第一列,无需循环或 API 调用

使用VBA将VBA模块从Access项目导出到Excel项目

Vba for Excel 宏中的集合数组

从 excel 导入到具有更多字段的访问表 (vba)

使用 vba 将 xls/csv 文件插入到 access 2007 表中

访问 VBA 如何将新工作表添加到 Excel?