【问题标题】:Run-time error '13' Type Mismatch MS Access VBA array运行时错误“13”类型不匹配 MS Access VBA 数组
【发布时间】:2020-07-13 16:40:56
【问题描述】:

一直试图在表格中插入街道、郊区和邮政编码,但不断收到

运行时错误“13” 类型不匹配

代码如下:

Sub arrayData()

Dim CustomerNames() As Variant
Dim num As Long, dbs As Database, InsertReocrd As String
Dim CustomerID As Long, num1 As Long
Dim CustomerName As String
Dim Street As String, Suburb As String, Postcode As Integer

Set dbs = CurrentDb()
CustomerID = 0
For num1 = 0 To 50000
CustomerID = CustomerID + 1
CustomerNames = Array(...)

Street = Array("Short", "Lygon", "Flinders", "Elizabeth", "King") //ERROR OCURRS HERE

Suburb = Array("Sandringham", "Brighton", "St Kilda", "Melbourne", "Carlton") //ERROR OCURRS HERE

Postcode = Array("3165", "3298", "3145", "3144", "3000") //ERROR OCURRS HERE

num = Int((250 - 0 + 1) * Rnd + 0)
CustomerName = CustomerNames(num)
InsertRecord = "INSERT INTO CUSTOMER (CustomerID , CustomerName, StreetName, Suburb) VALUES (" & "'" & CustomerID & "'" & "," _
                                                                   & "'" & CustomerName & "'" & "'" & StreetName & "'" & ")"

dbs.Execute InsertRecord
Debug.Print CustomerID, CustomerName, Street, Suburb
Next

End Sub

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    应该保存数组的变量需要声明为 Variant,而不是 String。

    所以:

    Dim Street As Variant, Suburb As Variant, Postcode As Variant
    

    请注意,您的 INSERT 语句缺少 Suburb 的值。

    使用DAO.Recordset.AddNew 等可能会更快,可读性更好。

    【讨论】:

    • 你能告诉我你的意思吗,当我正在努力处理连接时,在编写 INSERT 语句时。
    【解决方案2】:

    作为shown yesterday,简化你的连接,你还需要一个CustomerID数组和一个循环:

    For n = 1 To 5     
        InsertRecord = "INSERT INTO CUSTOMER (CustomerID , CustomerName, StreetName, Suburb) VALUES (" & CustomerID(n) & ",'" & CustomerName(n) & "','" & StreetName(n) & "','" & Suburb(n) & "')"
    

    如果您真的希望以这种方式插入 50000 个客户(?)(您不会),请遵循 André 的建议并使用 DAO。

    【讨论】:

    • 我不断收到“预期数组”是什么原因造成的?当我为此生成随机数时。
    • 在我的代码中,CustomerID 也是一个数组。所以修改你的代码以采用。
    【解决方案3】:

    对不起,如果这不完全符合主题。以防万一任何其他可怜的傻瓜花费数小时试图找出他们在 VBA 记录集上得到“类型不匹配”的原因。添加新,请检查表中字段/列的 [默认值]。我将 TEXT 字段更改为 DATE 字段,但忽略了删除 [默认值] 中的“”。 (尝试将任何文本值设置为日期字段是不行的)。

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多