运行时错误'13'类型不匹配MS Access VBA阵列

问题描述 投票:0回答:3

一直试图将街道,郊区和邮政编码插入表中,但一直在努力

运行时错误'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
vba access-vba
3个回答
1
投票

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

所以:

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

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

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


0
投票

作为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。


0
投票

很抱歉,如果这不完全符合主题。为了防止任何其他可怜的傻瓜花费数小时试图弄清楚为什么他们在VBA recordset.addnew上得到'Type Mismatch',请检查表中字段/列的[Default Values]。我将TEXT字段更改为DATE字段,但忽略了删除[Default Value]中的“”。 (尝试将任何文本值设置为日期字段是禁止的)。

© www.soinside.com 2019 - 2024. All rights reserved.