I'm trying to switch my code to use parameters. I'm getting a Type Mismatch error on the cmd.Execute rs line. 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:
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
cmd.Execute rs
Command.Execute
accepts 3 optional arguments: RecordsAffected; Parameters; Options. None of those can be a Recordset
. You get type mismatch error because you're not feeding cmd.Execute
a suitable argument.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.