我在Excel中使用ADO連接到我的MSSQL服務器時有以下UDF。在那裏它應該執行標量udf「D100601RVDATABearingAllow」。ADODB打開記錄集失敗/「對象關閉時不允許操作」
由於某些原因,我嘗試附加的參數不會發送到sql服務器。僅在服務器上:
SELECT dbo.D100601RVDATABearingAllow
到達。
MY EXCEL UDF:
Function RVDATA(Fastener) As Long
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Cmd1 As ADODB.Command
Dim stSQL As String
Const stADO As String = "Provider=SQLOLEDB.1;Data ................"
'----------------------------------------------------------
Set cnt = New ADODB.Connection
With cnt
.ConnectionTimeout = 3
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 3
End With
'----------------------------------------------------------
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = cnt
Cmd1.CommandText = "dbo.D100601RVDATABearingAllow"
Cmd1.CommandType = adCmdStoredProc
'----------------------------------------------------------
Set Param1 = Cmd1.CreateParameter("Fastener", adInteger, adParamInput, 5)
Param1.Value = Fastener
Cmd1.Parameters.Append Param1
Set Param1 = Nothing
'----------------------------------------------------------
Set rst = Cmd1.Execute()
RVDATA = rst.Fields(0).Value
'----------------------------------------------------------
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing
'----------------------------------------------------------
End Function
當我使用adCmdStoredProc整個事情失敗,並在VBA調試器中記錄的屬性有很多「操作時對象被關閉是不允許的「(聽起來有點不同,該消息被翻譯)
當我不使用adCmdStoredProc我得到的消息是,變量緊固件是未提供。
我想這可能是我打開記錄集的方式有問題。 在其他的步驟中,我讀到了關於使用「SET NOCOUNT ON」選項,但那也不起作用。
有沒有人有想法? 問候Lumpi
我刪除了SELECT語句。在服務器上的類型爲Float時,將Param2定義爲adDouble是否正確? adChar = varchar(20)的同樣問題? – Lumpi
對於每個感興趣的人:我發佈了相同的問題:http://www.codeproject.com/Questions/265573/ADODB-open-recordset-fails-Operation-is-not-allowe,並得到了一些有趣的提示,但,問題仍然沒有解決.. – Lumpi