2016-05-03 15 views
0

Access 2012を使用して、2012年後半のSQL Serverの古いアプリケーションをアップグレードしています。私は呼び出す必要があり、フォームとレポートに割り当てる必要があるパラメータを持つ複数のストアドプロシージャを持っています。エラー "入力したオブジェクトは有効なレコードセットプロパティではありません"アクセス2013割り当てレコードをフォームに割り当てる

私が午前問題は、私はエラーを取得することである「7965」私は、フォームのオープンイベントを使用して、次のコード ます。Private Sub FORM_OPEN(AMフォーム に割り当てられて返されたレコードセットにしようとするたびに私も同じ結果に

set me.Recordset= recs1 

を試してみました)整数として

Dim cmd1 As ADODB.Command 
    Dim recs1 As New ADODB.Recordset 
    Dim prm1 As ADODB.Parameter 
    Dim prm2 As ADODB.Parameter 
    Dim prm3 As ADODB.Parameter 
    Set cnn = CreateObject("ADODB.Connection") 

    cnn.ConnectionString = "DRIVER={SQL Server Native Client  11.0};SERVER=192.168.0.12;DATABASE=SavingsPlusCorp;Trusted_Connection=yes;" 


    cnn.Open cnn.ConnectionString 
    Set cmd1 = New ADODB.Command 


    Set cmd1.ActiveConnection = cnn 


cmd1.CommandText = "dbo.iNVENSOLDSp" 
cmd1.CommandType = adCmdStoredProc 

Set prm1 = cmd1.CreateParameter("@branchid", adInteger, adParamInput, 2) 
cmd1.Parameters.Append prm1 

Set prm2 = cmd1.CreateParameter(" @Beginning_Date", adDate, adParamInput) 
cmd1.Parameters.Append prm2 

Set prm3 = cmd1.CreateParameter(" @Ending_Date", adDate, adParamInput) 
cmd1.Parameters.Append prm3 

Set prm4 = cmd1.CreateParameter("@vENDORID", adInteger, adParamInput, 2) 
cmd1.Parameters.Append prm4 

Set prm5 = cmd1.CreateParameter("@catID", adInteger, adParamInput, 2) 
cmd1.Parameters.Append prm5 



prm1.Value = Form_ReportGenerator.Branches 
prm2.Value = Form_ReportGenerator.Begin_Date 
prm3.Value = Form_ReportGenerator.Ending_Date 
prm4.Value = Form_ReportGenerator.Vendors 
prm5.Value = Form_ReportGenerator.Category 


Set recs1 = CreateObject("ADOdB.recordset") 
recs1.CursorType = adOpenKeyset 
recs1.CursorLocation = adUseClient 
'Set recs1 = cmd1.Execute 
'recs1.Open 
Set Me.Recordset = cmd1.Execute 

をキャンセル にとして特定のスレッド内の溶液を助けてください可能性は私の試行とほとんど同じです 実際に私は試行を構築するために使用しました 私はコマンドを使用しました。実行し、それはエラー を返します。このラインである私のフォーム

Set me.RecordSet = cmd1.execute 

にそれを割り当てられ、それが に動作していない理由を私は理解していない私は を接続するために使用していますプロバイダとの問題が

を助けてくださいされています
+0

可能重複http://stackoverflow.com/questions/4784820/bind-access-form-to-the-results-from- a-stored-procedure) –

答えて

-1

ADO.RecordsetオブジェクトのOpenメソッドを呼び出す必要があります。

これを実証するには、まずSQL Serverで単純なストアドプロシージャを作成します。

USE AdventureWorks2016CTP3; 
GO 

CREATE PROCEDURE dbo.up_TestPerson 
AS 
    SELECT BusinessEntityID, FirstName, LastName 
     FROM Person.Person; 

このコードを含むMicrosoft Accessフォームを作成します。

Private Sub Form_Open(Cancel As Integer) 

    Dim cnn As New ADODB.Connection 
cnn.ConnectionString = "DRIVER={SQL Server Native Client 11.0};SERVER=V-SQL16-R;DATABASE=AdventureWorks2016CTP3;Trusted_Connection=yes;" 
    cnn.Open 

    Dim cmd1 As New ADODB.Command 
    Set cmd1.ActiveConnection = cnn 
    cmd1.CommandText = "dbo.up_TestPerson" 
    cmd1.CommandType = adCmdStoredProc 

    Dim rst As New ADODB.Recordset 
    rst.Open cmd1, , adOpenKeyset, adLockPessimistic 

    Set Me.Recordset = rst 

End Sub 

フォームを開くと、データが表示されます。

enter image description here

このようなストアドプロシージャを作成し、パラメータを使用して実証するために。 (それは、パラメータおよび句を有する以外は、最初のストアドプロシージャと同じ。)

CREATE PROCEDURE dbo.up_TestPerson2 
(
    @PersonType nchar(2) 
) 
AS 
SELECT BusinessEntityID, FirstName, LastName 
    FROM Person.Person 
    WHERE PersonType = @PersonType; 

後ろこのコードの別のAccessフォームを作成します。 (パラメータを作成して設定するブロックを除いて、最初のフォームと同じです。)

Private Sub Form_Open(Cancel As Integer) 

    Dim cnn As New ADODB.Connection 
    cnn.ConnectionString = "DRIVER={SQL Server Native Client 11.0};SERVER=V-SQL16-R;DATABASE=AdventureWorks2016CTP3;Trusted_Connection=yes;" 
    cnn.Open 

    Dim cmd1 As New ADODB.Command 
    Set cmd1.ActiveConnection = cnn 
    cmd1.CommandText = "dbo.up_TestPerson2" 
    cmd1.CommandType = adCmdStoredProc 

    ' This is new 
    Dim prm1 As ADODB.Parameter 
    Set prm1 = cmd1.CreateParameter("@PersonType", adWChar, adParamInput, 2) 
    cmd1.Parameters.Append prm1 
    prm1.Value = "EM" 

    Dim rst As New ADODB.Recordset 
    rst.Open cmd1, , adOpenKeyset, adLockPessimistic 

    Set Me.Recordset = rst 

End Sub 

フォームを開くと、パラメータに一致するレコードが表示されます。

enter image description here

([ストアドプロシージャの結果にバインドAccessフォーム]の
+0

ありがとうございました。私はオープンメソッドを使用しているが、adopenKeySetとlocktypeを使わないで、コードのバージョンを持っています。 「クラスが自動化または予想されるインターフェイスをサポートしていません」という別のエラーが表示される –

+0

現在使用している更新されたコードとエラーが発生したステートメントを示す新しい質問を開く方が簡単かもしれません。 – RichardCL

関連する問題