我在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