简体   繁体   English

Excel Vba-使用参数键入不匹配错误

[英]Excel Vba - Type Mismatch Error using parameters

I'm trying to switch my code to use parameters. 我正在尝试将代码切换为使用参数。 I'm getting a Type Mismatch error on the cmd.Execute rs line. 我在cmd.Execute rs行上收到类型不匹配错误。 I figured it would be my variables no matching up with what they are in access but I've checked and made sure that everything is the same. 我认为这将是我的变量与访问中的变量不匹配,但是我已经检查并确保所有内容都相同。

    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

I pulled out these 3 lines from your code: 我从您的代码中提取了以下3行:

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

Command.Execute accepts 3 optional arguments: RecordsAffected; Command.Execute接受3个可选参数:RecordsAffected; Parameters; 参数; Options. 选项。 None of those can be a Recordset . 这些都不是Recordset You get type mismatch error because you're not feeding cmd.Execute a suitable argument. 因为不cmd.Execute所以出现类型不匹配错误。执行适当的参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM