Excel VBA将数组变量插入到访问中的单个字段中

时间:2016-05-25 22:23:11

标签: sql excel vba access

在我的项目中,我试图将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)"

它会说运行错误“13”类型不匹配。

数据库字段是否可以接受列表或数组作为数据类型?所以当我调用数据时,我可以使用索引来调用列表中的变量吗?

1 个答案:

答案 0 :(得分:1)

MS Access没有这样的数据类型,更原始的类型,如string,boolean,long。但是考虑使用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字符限制,因此请使用长文本类型(以前称为备忘录 )没有声明的限制。

但是,对于最佳实践,宽表(多列)和字段中的数组等存储对象比长表(多行)和链接对象更昂贵。所以只需迭代地保存数据:

For Each item in SN
    strSQL = "INSERT INTO [TableName] ([FieldName]) Values (" & item & ")"
    ...
Next item

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