提问人:hydctrl 提问时间:10/26/2023 最后编辑:marc_shydctrl 更新时间:10/26/2023 访问量:54
记录集始终关闭。VB Excel 从存储过程作为记录集返回数据
Record set always closed. VB Excel returning data from stored procedure as record set
问:
在Excel vb中运行时,我不断收到此错误。
当对象关闭时,不允许操作。
我可以在 SSMS 中执行存储过程并返回良好的数据。我还可以在 Excel vb 中运行简单的字符串查询并正常返回数据。什么会导致记录集关闭?
我尝试在 VB 中手动串起查询,结果相同。一旦我这样做了,我就打印并复制了vb查询并将其粘贴到SQL查询中,它返回了数据。
Sub ExecuteStoredProcedureAndRetrieveData()
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = ""
conn.Open
Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "ProcedureStored"
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
rs.Open cmd
Sheets("Sheet1").Range("A1").CopyFromRecordset rs
rs.Close
Set rs = Nothing
cmd.ActiveConnection = Nothing
conn.Close
Set conn = Nothing
End Sub
这是存储过程:
CREATE PROCEDURE ProcedureStored
AS
BEGIN
DECLARE @day_date DATE = '1973-12-25';
DECLARE @date_start DATETIME;
DECLARE @date_end DATETIME;
SET @date_start = CAST(CONVERT(VARCHAR, @day_date) + ' 06:00:00' AS DATETIME);
SET @date_end = CAST(CONVERT(VARCHAR, @day_date) + ' 16:30:00' AS DATETIME);
DECLARE @Hours TABLE (Date DATETIME, Hour INT);
DECLARE @i INT;
DECLARE @j INT;
DECLARE @loop_count INT;
DECLARE @date_change_flag INT;
SET @i = CONVERT(INT, DATEPART(HOUR, @date_start));
SET @j = CONVERT(INT, DATEPART(HOUR, @date_end));
SET @loop_count = 0;
SET @date_change_flag = 0;
WHILE @loop_count < 11
BEGIN
IF @i < 24 AND @date_change_flag = 0
BEGIN
INSERT INTO @Hours
VALUES (@date_start, @i);
END
ELSE IF @i >= 24 AND @date_change_flag = 0
BEGIN
SET @date_change_flag = 1;
SET @i = 0;
INSERT INTO @Hours
VALUES (DATEADD(DAY, 1, @date_start), @i);
END
ELSE IF @date_change_flag = 1
BEGIN
INSERT INTO @Hours
VALUES (DATEADD(DAY, 1, @date_start), @i);
END
SET @loop_count = @loop_count + 1;
SET @i = @i + 1;
END
SELECT 'ID 19' AS [ID], [Date], [Hour],
SUM(ISNULL([Errors (Delays)], 0)) AS [Errors (Delays)]
FROM
(
SELECT 'ID' AS [ID], FORMAT([time_stamp], 'yyyy-MM-dd') AS [Date], DATEPART(HOUR, [time_stamp]) AS [Hour], COUNT(*) AS [Errors (Delays)]
FROM [error_events]
WHERE [error_type] = 0 AND [time_stamp] BETWEEN @date_start AND @date_end
AND [source] LIKE '%Filter1%'
AND ([trace_path] LIKE '%/Filter2%'
OR [trace_path] LIKE '%/Filter3%'
OR [trace_path] LIKE '%/Filter4%'
OR [trace_path] LIKE '%/Filter5%')
GROUP BY FORMAT([time_stamp], 'yyyy-MM-dd'), DATEPART(HOUR, [time_stamp])
UNION ALL
SELECT 'ID' AS [ID], FORMAT(DATE, 'yyyy-MM-dd') AS [Date], Hour AS [Hour], NULL
FROM @Hours
) AS Data
GROUP BY [Date], [Hour]
ORDER BY [ID];
END
答: 暂无答案
上一个:未找到映射 JSON 列
评论
ConnectionString