none
アクセスよりSQLストアドプロシジャの呼出し RRS feed

  • 質問

  • アクセス2003 & SQLサーバー2005(WGE)にて、以下コードでストアドプロシジャを
    呼出しています。

    <コード>
    Public Function GetZaikoList(PrDate As Long) As Long
        '****************************************************
        '*  商品在庫リストを取得する
        '****************************************************

        Dim adoCon        As ADODB.Connection       ' ADO コネクション オブジェクト
        Dim sqlcmd        As ADODB.Command          ' ADO コマンドオブジェクト
        Dim lngCnt        As Long                   ' Stored Proc : Update Record Count
       
        On Error GoTo PROC_ERR

        ' Init
        GetZaikoList = False
        Set adoCon = CreateObject("ADODB.CONNECTION")
        Set sqlcmd = CreateObject("ADODB.Command")

        ' Connect SQL-Server
        adoCon.ConnectionString = "Provider=SQLOLEDB.1;User ID=sa;password=#xxxxxx;Initial Catalog=" & GLB_SQL_DB & ";Data Source=" & GLB_SQL_SERVER
        adoCon.Open
       
        ' StoredProc [User_Get_Zaiko]
        sqlcmd.ActiveConnection = adoCon
        sqlcmd.CommandText = "User_Get_ZaikoList"
        sqlcmd.CommandType = adCmdStoredProc
        sqlcmd.CommandTimeout = 180   ' 秒
        sqlcmd.Parameters.Append sqlcmd.CreateParameter("@Pr_TerminalID", adInteger, adParamInput)
        sqlcmd.Parameters("@Pr_TerminalID") = GLB_端末NO
        sqlcmd.Parameters.Append sqlcmd.CreateParameter("@Pr_Date", adInteger, adParamInput)
        sqlcmd.Parameters("@Pr_Date") = PrDate
        sqlcmd.Execute lngCnt

        ' Close
        adoCon.Close
        GetZaikoList = True
     
    PROC_Exit:
        Set sqlcmd = Nothing
        Set adoCon = Nothing
        Exit Function

    PROC_ERR:
        Call Err_Msg
        Resume PROC_Exit
    End Function
    <コードここまで>

    質問①
    ストアドプロシジャ自体は正常に処理されているようなのですが、
    上記プロシジャを抜けて(Exit Functionまでは実行されているようです)、
    呼出し元のモジュールへ戻ったとたんに
    「49:DLLが正しく呼出せません」のエラーが発生してしまいます。

    サーバーが「SQL2000」の場合には発生しておらず、2005へ
    アップして動作確認中にこの現象に遭遇してしまいました。

    サーバー2005のストアドプロシジャでも実行時間が比較的短いものに
    ついては同様のロジックで呼出してもエラーが発生しません。

    発生するストアドプロシジャは実行時間が約35秒ほどかかるやつです。

    タイムアウト関連で何かひっかかっているのか?とも思いますが
    解決できずにいます。

    解決方法等ご存知の方・同様の事象に遭遇された方、何か情報ありましたら
    ご教示いただけると幸いです。

    2007年8月8日 4:18

回答

  • ご回答ありがとうございました。

    ご指示いただいたとおり、2行コメントにして実行したところ、
    エラーが発生しませんでした。
    私には理由がわからないのですが、解決したことにします。

    2007年8月8日 23:59
  • 度々ありがとうございます。

    質問のコードについては、デバッグモードで追っかけて行くと

    On Error Goto ... には引っかからずに Exit Function で抜けていたため

    あえて Err_Msg は関係ないのかと思い詳細を記述していませんでした。

    あの後、コメントアウトした2行を復活させて実行してみたのですが、

    今度はエラーが発生しませんでした。

    再現させようといろいろやってみましたが、再現しません。

    不思議に思うのですが、メモリー使用状況によるのか...

    実用段階に移行した後で発生するのが怖いのですが、

    再現しないので今のところは静観します。


    2007年8月9日 23:33

すべての返信

  • 次の 2 行をコメントアウトして実行するとどうなりますか?

     

        On Error GoTo PROC_ERR
        Call Err_Msg

    2007年8月8日 10:11
  • ご回答ありがとうございました。

    ご指示いただいたとおり、2行コメントにして実行したところ、
    エラーが発生しませんでした。
    私には理由がわからないのですが、解決したことにします。

    2007年8月8日 23:59
  • 前回私がしたコメントは一応根拠があります。質問に貼られていたコードは ADO に関してはなんら問題ないように見えました。

    ところで、ラベル PROC_ERR: で Err_Msg を呼び出していますがこの Err_Msg が何をしているかは質問からはわかりませんでした。

    そのため、Err_Msg の中で問題がおきてるんじゃないのか?だとしたら On Error でここにジャンプするからこれもコメントアウトして Err_Msg を呼び出さないとどうなるか?と考えました。


    コメントアウトしてそこに飛ばないようにしたら問題がおきなくなったとのことなので、質問者のコードは質問内にはない Err_Msg の処理に問題があるようです。

    2007年8月9日 13:37
  • 度々ありがとうございます。

    質問のコードについては、デバッグモードで追っかけて行くと

    On Error Goto ... には引っかからずに Exit Function で抜けていたため

    あえて Err_Msg は関係ないのかと思い詳細を記述していませんでした。

    あの後、コメントアウトした2行を復活させて実行してみたのですが、

    今度はエラーが発生しませんでした。

    再現させようといろいろやってみましたが、再現しません。

    不思議に思うのですが、メモリー使用状況によるのか...

    実用段階に移行した後で発生するのが怖いのですが、

    再現しないので今のところは静観します。


    2007年8月9日 23:33