问题描述
下面的存储过程在 sql Server 中运行良好,但从 VB 6.0 调用它会给我一个错误
Create PROCEDURE spEnvioCorreoCoberturaBoveda
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
CREATE TABLE #tmp(
iId INT IDENTITY,cAgeCod VARCHAR(3),cAgeDescripcion VARCHAR(100)
)
DECLARE @viIterador INT = 1
DECLARE @viNumRegistros INT = 0
DECLARE @vcConsulta NVARCHAR(2000)
DECLARE @vcParametros NVARCHAR(100)
DECLARE @vcAgeCod VARCHAR(3)
SET NOCOUNT OFF;
INSERT INTO #tmp(cAgeCod,cAgeDescripcion)
SELECT cAgeCod,cAgeDescripcion FROM DBComunes.dbo.Agencias WHERE nestado = 1
SET @viNumRegistros = ScopE_IDENTITY()
-- Borrar table
delete from dbrepstage.dbo.CapSobrantesFaltantesConsolidado
WHILE @viIterador <= @viNumRegistros
BEGIN
SET @vcAgeCod = (SELECT cAgeCod FROM #tmp WHERE iId = @viIterador)
SET @vcConsulta = ' execute dbcmact'+ @vcAgeCod+'.dbo.CapSobrantesFaltantesConsolidado ' + '''' + @vcAgeCod +''''
--PRINT @vcConsulta
EXEC SP_EXECUTEsql @vcConsulta
SET @viIterador = @viIterador + 1
END
drop table #tmp
END
VB 6.0
Dim ssql As String,nSumaSoles As Currency,nSumaDolares As Currency
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
ssql = "DBRepStage.dbo.spEnvioCorreoCoberturaBoveda" & vbCrLf
rs.Open ssql,dbCmact,adOpenStatic,adLockBatchOptimistic,adCmdText
rs.Close
Set rs = nothing
有人可以告诉我我失败的地方。干杯
解决方法
错误在第 rs.Open ...
行或 rs.Close
行?
以防万一,你可以试试
set rs = dbCmact.Execute(sSql)
代替
rs.Open sSql,dbCmact,adOpenStatic,adLockBatchOptimistic,adCmdText
,
我建议使用带有 CommandType = adCmdStoredProc
的 ADODB.Command 对象来执行 SP:
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = dbCmact ' Assuming this is a properly initialized ADODB.Connection object
.CommandType = adCmdStoredProc
End With
cmd.CommandText = "DBRepStage.dbo.spEnvioCorreoCoberturaBoveda"
Set rs = cmd.Execute
正如上面@MarkL 建议的那样,确保您的 ADODB.Connection 对象已正确初始化
[已添加]
至于您的 rs.Close
语句,请养成这样做的习惯:
If Not rs Is Nothing Then
If Not rs.State = adStateClosed Then
rs.Close
End If
End If
Set rs = Nothing