2012-08-09 94 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