この問題を解決する助けが必要です。ちなみにVB初心者です。現在、3 つのパラメーターを受け取り、実行すると一時テーブルを返すストアド プロシージャがあります。手順を SQL でテストしたところ、期待どおりに動作しています。
フロントエンドとして Access フォームを使用しています。3 つのテキスト ボックス コントロールを介して 3 つのパラメーターを受け入れ、「クリック時」に手順を実行します (ユーザーは検索ボタンをクリックして SQL を実行および起動します)。以下のコードは、テーブルにレコードセットを表示するまで、これを実現します。ADO プロパティを使用して、プロシージャの結果をテーブルに表示する方法に行き詰まっています。レコードセットをデータシート フォームに表示するか、テーブルに挿入しても問題ありません。
コードは、レコードセットを表示しようとしている次の行で詰まっているようです。
rs.Open cmd
VB コードへのアクセス
Private Sub cmdExecuteQuery_Click()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim accessionno As String
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={SQL Server};Server=***;Database=***;Uid=****;Pwd=***;"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.NameofStoredProcedure"
cmd.Parameters.Append cmd.CreateParameter("@worksheetno", adVarChar,
adParamInput, 10, Forms!RepeatForm!txtEnterWrkSheetno)
cmd.Parameters.Append cmd.CreateParameter("@name", adVarChar,
adParamInput, 10, Forms!RepeatForm!txtEnterName)
cmd.Parameters.Append cmd.CreateParameter("@year", adVarChar,
adParamInput, 4, Forms!RepeatForm!txtEnterYear)
With rs
.ActiveConnection = conn
.CursorType = adOpenForwardOnly
.CursorLocation = adUseServer
End With
Set rs = cmd.Execute()
DoCmd.OpenForm "frmRepeats", acViewNormal
rs.Open cmd
rs.Close
conn.Close
Set rs = Nothing
Set cmd = Nothing
Set conn = Nothing
End Sub
SQL
CREATE PROCEDURE [dbo].[NameofStoredProcedure] @worksheetno varchar(10),
@name varchar(10), @year varchar(4)
AS
BEGIN
CREATE TABLE #Temp (accessionno varchar (100),
No varchar (100),
worksheetno varchar (10),
name varchar(100),
location varchar (10),
Result varchar (100),
year varchar (4))
INSERT INTO #Temp
SELECT DISTINCT
a.accessionno,
e.name + substring(a.Year, 3,2) + '-' + convert(varchar(10),
c.SampleTestNum) AS No,
a.worksheetno,
b.name,
c.platetext AS Location,
d.finalcomment AS Result,
a.Year
FROM
tb_sample a (nolock), tb_patient b (nolock), tb_plate c (nolock),
tb_finalresult d (nolock), tb_testcode e (nolock)
WHERE
a.sample_id = b.sample_id
and a.sample_id = c.sample_id
and a.sample_id = d.sample_id
and a.test_id = e.test_id
and finalcomment like '%1061%'
and worksheetno = @worksheetno
and e.name = @name
and a.year = @year
ORDER BY No
END
select distinct * from #Temp
drop table #Temp
GO