2012-08-09 157 views
1

我想切换我的代码以使用参数。我在cmd.Execute rs行中遇到类型不匹配错误。我想这将是我的变量不匹配他们在访问,但我已经检查并确保一切都是一样的。Excel VBA - 使用参数的类型不匹配错误

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 
+0

ItemNum和Unit是否真的是数据库中的文本? – Fionnuala 2012-08-09 14:03:32

+0

是的某些商品号码中包含字母,单位表示它们是如何销售的。 (Kits,Boxes,Each等)。 – Reznor 2012-08-09 14:06:10

回答

1

我掏出从您的代码这3行:

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

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

+0

我在执行后删除了rs参数,并且它工作正常。我不确定执行命令的参数。感谢HansUp和Remou的帮助 – Reznor 2012-08-09 15:48:38