【问题标题】:Excel VBA insert array variable into single field in accessExcel VBA将数组变量插入到访问中的单个字段中
【发布时间】: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.

数据库字段有什么方法可以接受列表或数组作为数据类型?那么当我调用数据时,我可以使用索引来调用列表中的变量吗?

【问题讨论】:

    标签: sql excel vba ms-access


    【解决方案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等标识符保存值!

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 2011-11-22
      • 2021-01-09
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多