none
ストアドプロシージャを実行するとAccessが強制終了する RRS feed

  • 質問

  • お世話になります。現在、下記の様な現象が起き困っております。助けて下さい。

    ■環境
    サーバー:SQL Server2012 Express
    OS:Windows7
    Office:Access2010

    ■現象
    VBA内でストアドプロシージャを実行する際にパラメータが文字列(char、ncharなど)だと
    Accessが強制終了されてします。
    文字列以外のパラメータの場合は正常に起動します。

    現在はAccess2010を使用していますが、Windows7 + Access2002でも同じ現象でした。また、同じ環境のパソコンがもう1台あるのですが、そちらの方では正常に起動しています。

    ■コード
    Dim Conn As New ADODB.Connection
    Dim Cmd As New ADODB.Command
    Dim Para As New ADODB.Parameter
    Dim Rst As New ADODB.Recordset

    Set Conn = CurrentProject.Connection

    With Cmd
        .ActiveConnection = Conn
        .CommandText = "usp_テスト"
        .CommandType = adCmdStoredProc
       
        Set Para = .CreateParameter(, adWChar, adParamInput, 5, "月曜日")
        .Parameters.Append Para
    End With

    Rst1.Open Cmd, , adOpenStatic, adLockReadOnly ← 文字列のパラメータの場合はここで強制終了されてしまう。

    Set Para = Nothing
    Set Cmd = Nothing
    Set Rst = Nothing
    Conn.Close
    Set Conn = Nothing

    2012年10月23日 4:27

回答

  • 最終手段として、Windowsの再セットアップを行いました。

    すると、正常にAccessが起動する様になりました。

    様々な設定を行っているうちにおかしくなった様です。原因は分かりませんでしたが、一安心しました。

    みなさん、ありがとうございました。

    • 回答としてマーク DK山科 2012年10月25日 6:24
    2012年10月25日 6:24

すべての返信

  • どのようなエラーが出ているのでしょうか? 以下のページを参考にして、エラーの内容を取得できませんか?

    接続結果やSQL実行結果のチェックをするサンプル
    http://www.happy2-island.com/access/gogo03/capter00701.shtml


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年10月23日 6:19
    モデレータ
  • 返信ありがとうございます。

    サンプルを参考にコードを実行しましたが、エラーは発生しません。

    サーバー内でのストアドプロシージャの実行はエラーが発生しない為、ADOに不備があるのではないかと考えています。(その原因が分かりません…)

    2012年10月23日 6:43
  • >ADOに不備があるのではないかと考えています。

    ツール-参照設定で、
    ActiveX Data Objects x.x Library
    を選択していると思います。
    おそらく、他のバージョンも一覧にあると思いますので
    x.xのバージョンを替えてみてはどうでしょう?

    2012年10月23日 7:42
  • CurrentProject.Connectionを利用されていますが、リンクテーブルを使用されているのでしょうか?
    ちなみに私の方で以下のコードで試してみましたが、問題なく挿入できました。一度、CurrentProject.Connectionを使わない方法で試されてみると、問題の切り分けができるかもしれません。

    Private Sub コマンド0_Click()
     Dim Conn As New ADODB.Connection
     Dim Cmd As New ADODB.Command
     Dim Para As New ADODB.Parameter
     Dim Rst As New ADODB.Recordset
     
    Conn.Open "Provider=SQLOLEDB; Data Source=.\sqlexpress; Initial Catalog=testdb; Integrated Security=SSPI"
    
    With Cmd
         .ActiveConnection = Conn
         .CommandText = "TESTinsert"
         .CommandType = adCmdStoredProc
         
         Set Para = .CreateParameter(, adWChar, adParamInput, 5, "月曜日")
         .Parameters.Append Para
     End With
     
     Rst.Open Cmd, , adOpenStatic, adLockReadOnly
     
     Set Para = Nothing
     Set Cmd = Nothing
     Set Rst = Nothing
     Conn.Close
     Set Conn = Nothing
    
    End Sub

    ADOの参照設定も一番バージョンの低い「Microsoft ActiveX Data Objects 2.0 Library」で試してみましたが、問題無く挿入されました。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年10月24日 1:51
    モデレータ
  • 返信ありがとうございます。

    他のバージョンも試してみましたが、ダメでした…

    • 回答としてマーク DK山科 2012年10月25日 6:20
    • 回答としてマークされていない DK山科 2012年10月25日 6:20
    2012年10月24日 2:17
  • 最終手段として、Windowsの再セットアップを行いました。

    すると、正常にAccessが起動する様になりました。

    様々な設定を行っているうちにおかしくなった様です。原因は分かりませんでしたが、一安心しました。

    みなさん、ありがとうございました。

    • 回答としてマーク DK山科 2012年10月25日 6:24
    2012年10月25日 6:24