2017-01-18 3 views
0

VBAを使用してAccess 2013でストアドプロシージャを実行しようとしています。 64ビット版Windows 10(32ビット版Access 2013)(企業標準では変更できません)Microsoft Access:ストアドプロシージャを実行し、DAOを使用して結果を返す - エラー

SQL Serverへの接続2008

これはとても難しいですが、私はちょうどそれを動作させることができない理由はわかりません!

私はのSQLExecという名前の汎用機能があります:私は、パラメータを持つプロシージャ名を渡ししようとするが、それは常に失敗し

Public Function SQLExec(SQL as String) As DAO.Recordset 
    Dim Rs As DAO.Recordset 
    Dim MyDB As DAO.DATABASE 

    Debug.Print SQL 

    On Error GoTo SQLExecErr 

    Set MyDB = CurrentDb 
    Set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough) 

    Set SQLExec = Rs 

CleanUp: 
    Set Rs = Nothing 
    Set MyDB = Nothing 

Exit Function 

SQLExecErr: 
    Debug.Print Err.Number, Err.Description 
    MsgBox "Error " & Err.Number & " in SQLExec: '" & Err.Description & ".'", vbOKOnly + vbCritical, "Error in SQLExec" 

    If IsDeveloper() Then 
     Stop 
     Resume 
    Else 
     Resume CleanUp 
    End If 

End Function 

を。

sReplaceDevice 'AA000000', 1000, 'AA000000', 'AA000001', 19" 

エラー:

Error 3129 in SQLExec: 'Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'..'

は私がEXECUTEPROCEDUREを付加しようとした - 同じ結果を。私はクエリにパラメータIDを追加しようとしました(@ param1 = 'test'など)。 - 同じ結果です。

誰にも提案はありますか?私はこれがとても難しいと思っています。

EDIT:この質問は別の質問の重複としてマークされています。まず、他の質問へのリンクが提供されていればいいと思います。第2に、私はこの質問を検索して検索し、いくつかの解決策を考え出しました。StackOverflowのものからは、いくつかの解決法がありました。どんな入力も感謝します。

+0

重複はどこですか?私はスタックオーバーフローを検索し、他の同様の質問を見つけましたが、それらのソリューションはどちらも動作しません。 –

+1

質問の上部にある「重複」バナーには、[リンク](http://stackoverflow.com/questions/40530836/invalid-sql-statement-error-when-trying-to-execute-sql-server-ストアドプロシージャ)。 –

+0

'Set Rs = CurrentDb.OpenRecordset(SQL、dbOpenSnapshot、dbSQLPassThrough)'を実行することはできません。 - ODBC接続文字列はどこから来ますか? PassThroughクエリが必要です。 – Andre

答えて

0

sReplaceDeviceは値を返しますか?データを更新するだけですか?単に更新を実行しているのであれば、問題はレコードセットとして開こうとしている可能性が高いのに対して、ExecuteNonQueryを実行するだけでよいはずです。 Like this

+0

sReplaceDeviceは更新を実行し、値を返します。手続きはうまくいきますが、組み立てていたSQLは正しいですが、依然としてAccessにエラーがスローされました。 私は別のクエリを実行して、新しく作成したレコードのIDを取得しようとしました。アイデンティティ列を持つテーブルをクエリしていたので、私は 'dbSeeChanges'を使用しなければならないと私に言いました。 私の解決策は、関連するテーブルで作成された新しいレコードのIDを取得するために、MAX集約関数を持つクエリを使用することでした。その時点で、それはアイデンティティ列について不平を言うのを止め、私が望む値を返しました。 –

+0

DUH。私は上記の重複する質問へのリンクを逃した。謝罪いたします。 –

関連する問題