Excel Vba - 使用参数的类型不匹配错误

时间:2012-08-09 13:44:22

标签: sql excel vba ms-access excel-vba

我正在尝试将代码切换为使用参数。我在cmd.Execute rs行上遇到Type Mismatch错误。我认为这将是我的变量与他们访问的内容不匹配,但我已经检查并确保一切都是一样的。

    Public Sub AddProducts()

'Initialize all variables
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim stDB As String, stSQL As String, stSQLTwo As String, stProvider As String
Dim linkOID As Integer
Dim linkPID As Integer


stDB = "Data Source= " & ThisWorkbook.Path & "\obsDatabase.accdb"
stProvider = "Microsoft.ACE.OLEDB.12.0"

'Opening connection to database
With cn

    .ConnectionString = stDB
    .Provider = stProvider
    .Open

End With

cmd.ActiveConnection = cn

'Get OrderID to link to products
stSQL = "SELECT OrderID FROM Orders WHERE OrderNumber = " & txtOrderNum & ""

rs.Open stSQL, cn

linkOID = rs("OrderID").Value

rs.Close

'Get SupplierID to link to products
stSQL = "SELECT SupplierID FROM Suppliers Where SupplierName = '" & cboxCompName & "'"

rs.Open stSQL, cn

linkPID = rs("SupplierID").Value

rs.Close

stSQL = "SELECT * FROM Products WHERE ProductName = '" & cboxItemNum & "'"
rs.Open stSQL, cn

If rs.EOF Then

    'Link all product information together
    stSQL = "INSERT INTO Products (ProductName, ProductDescription, ProductUnit, SupplierID) " & _
            "Values (paramItemNum, paramDesc, paramUnit, paramPID)"

    cmd.CommandText = stSQL
    cmd.CommandType = adCmdText

    With cmd

        .Parameters.Append .CreateParameter("paramItemNum", adVarChar, adParamInput, 50, cboxItemNum)
        .Parameters.Append .CreateParameter("paramDesc", adVarChar, adParamInput, 50, txtDescription)
        .Parameters.Append .CreateParameter("paramUnit", adVarChar, adParamInput, 50, txtUnit)
        .Parameters.Append .CreateParameter("paramPID", adInteger, adParamInput, , linkPID)

    End With

    cmd.Execute rs

End If

rs.Close
cn.Close

End Sub

1 个答案:

答案 0 :(得分:1)

我从你的代码中删除了这3行:

Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
cmd.Execute rs

Command.Execute接受3个可选参数:RecordsAffected;参数;选项。这些都不是Recordset。您会收到类型不匹配错误,因为您没有向cmd.Execute提供合适的参数。