3

ストアド プロシージャ "sp_Missingdata" を使用してデータを取得し、MSFlexGrid に表示してい ますが、オブジェクトが閉じているときに実行時エラー '3704' 操作が許可されていないというエラーが発生しています。Google で たくさん検索しました。これらを変更しました-1.ストアドプロシージャにNOCOUNT ONを設定します。
2. ストアド プロシージャの SET ANSI_WARNINGS OFF を設定します。

Private Sub Command2_Click()
Dim cmd As ADODB.Command
  Dim sqlnew, dd
Set cmd = New ADODB.Command
 cmd.ActiveConnection = ArtmConn
 cmd.CommandType = adCmdStoredProc
 cmd.CommandText = "sp_missingData"

  Dim rsnew As ADODB.Recordset
  Set rsnew = New ADODB.Recordset
  Set rsnew = cmd.Execute


  If Not rsnew.EOF Then  <-- Error is occuring here
    Set tblSop.DataSource = rsnew
  End If
  rsnew.Close
  Set rsnew = Nothing

End Sub

注-私のSPは一時テーブルを使用しています-これが私のSPです

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO
SET ANSI_WARNINGS OFF
GO

ALTER procedure [dbo].[sp_missingData] --exec [sp_missingData]
as begin
delete from tbl_missingData
select ol_code as outletNo, start as StartreceiptNo into #temp  from
(select l.s_ol_code as ol_code, l.sno + 1 as start
from vSalesNo as l
  left outer join vSalesNo as r on l.sno + 1 = r.sno and l.s_ol_code = r.s_ol_code
where r.sno is null) as tmpa inner join
(select s_ol_code, max(s_no) as s_no from sales group by s_ol_code) as tmpb
on s_ol_code = ol_code and start <= substring(s_no, 0, 11) where start!=0
union all
select ol_code as outletNo, start as EndreceiptNo   from
(select l.s_ol_code as ol_code, l.sno - 1 as start
from vSalesNo as l
  left outer join vSalesNo as r on l.sno - 1 = r.sno and l.s_ol_code = r.s_ol_code
where r.sno is null) as tmpa inner join
(select s_ol_code, max(s_no) as s_no from sales group by s_ol_code) as tmpb
on s_ol_code = ol_code and start <= substring(s_no, 0, 11) where start!=0
order by ol_code, start;
insert into tbl_missingData
SELECT * FROM
    (SELECT ROW_NUMBER() 
        OVER (ORDER BY outletNo) AS rownumber, 
        * 
    FROM #temp) AS Documents

select *,dbo.countOfIds(outletNo,rowNumber) as rpNo into #temp1 from tbl_missingData where outletno!='9163'
select * from #temp1
end

SPを実行すると、次の結果セットが表示されます。MSFlexGridに表示したい

1   101 6381    p1
2   101 6472    p2
3   101 6534    p3
4   101 6565    p4
5   102 292 p1
6   117 234 p1
7   121 385 p1
8   121 6874    p2
9   121 6917    p3
10  121 6936    p4
11  121 6941    p5
12  121 6953    p6
13  121 6963    p7
14  121 7044    p8
15  121 7047    p9
16  124 14  p1
17  126 279 p1
18  127 5685    p1
19  127 5693    p2
20  139 650 p1
21  139 652 p2
22  401 942 p1
23  401 946 p2
24  401 951 p3
25  401 951 p4
26  401 953 p5
27  401 953 p6
28  401 956 p7
29  401 965 p8
30  401 972 p9
31  401 972 p10
32  401 974 p11
33  401 975 p12
34  401 980 p13
35  401 986 p14
36  401 999 p15
37  401 1000    p16

これから私を親切に助けてください、どんな提案/助けも大歓迎です。

4

1 に答える 1

4

SET NOCOUNT ONストアド プロシージャを変更する場合にのみ適用される宣言の外ではなく、最初の行として、プロシージャの本体に必要です。

于 2013-02-20T18:31:31.807 に答える