本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[XL]XLODBCアドイン関数(エラー処理)

文書番号: 401672

最終更新日: 1998/02/10


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP401672


概要

本文書は、 Microsoft(R) Visual Basic(R) Programming System Applications
Edition (以下 VBA) で XLODBC アドイン関数を使用する際のエラー処理につい
て、サンプル モジュールと共に解説しています。

詳細

XLODBC アドイン関数使用時のエラー処理は、それぞれの XLODBC 関数が返すリ
ターン値で判定する方法と、SQLError 関数を使用する方法があります。
XLODBC アドイン関数は実行に失敗すると、それぞれ次のようなリターン値を
返します。
  SQLOpen       #N/A(2042)      接続に失敗
  SQLExecQuery  #N/A(2042)      クエリーを実行できない
                #VALUE(2015)    接続 ID が有効でない
  SQLRrtrieve   #N/A(2042)      結果を検索できない、待機中の結果がない
                0               データが見つからない
                #VALUE(2015)    接続 ID が有効でない
  SQLClose      #VALUE(2015)    接続 ID が有効でない
このリターン値をそれぞれ検査することによって失敗した時の判定をすることが
できます。
その他の XLODBC アドイン関数のリターン値についての詳細は、[?] - [目次]
コマンド -<検索> ボタン - [ODBC 関数アドイン] を参照してください。
また、XLODBC アドイン関数のひとつである、SQLError 関数を呼び出すと、
詳細なエラー情報を返すことができます。SQLError 関数は 2 次元配列で詳細
なエラー情報を返します。この配列には 3 つのフィールドがあり、
  • ODBC エラーのクラスとサブクラスを示す文字列
  • データソース内で使われるエラーコードを示す数値
  • エラーを説明するテキストメッセージ
を返します。

使用例

サンプル モジュールは「 SQL Server 」に対するものを用意しました。プログラム
実行環境は次の通りです。
  SQL Server
    プログラム実行環境
        サーバー        SQLServer
        ODBC ドライバ   SQLServerODBC ドライバ (Excel5.0 添付)
        データソース名  TstSQL
    TstSQL の内容
        サーバー名      serversql1
        ユーザー ID     sa
        データベース    pubs
        パスワード      Excel
XLODBC アドイン関数を使用したサンプル モジュールは次の通りです。
モジュールの記述で、次の記述で囲まれている部分は、紙面上では改行されていま
すが、実際のモジュール シートへの入力の際は改行してはいけないコードを
示しています。ご注意ください。
    '以下の 2 行は改行せずにコードを入力してください。
    '上の 2 行は改行せずにコードを入力してください。

サンプル

次のサンプル モジュールでは XLODBC アドイン関数実行時全て エラーチェック
プロシージャー ErrorCheck を実行しています。
  Dim site As String
  Sub GetErrorSQL()
  Dim con As Variant
  Dim execresult, retriresult, closeresult As Variant
  'データソースとの接続
  '以下の 2 行は改行せずにコードを入力してください。
  con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs;
  PWD=Excel", , 1)
  '上の 2 行は改行せずにコードを入力してください。
      If IsError(con) Then site = "接続": ErrorCheck (con): Exit Sub
  'クエリーの実行
  execresult = SQLExecQuery(con, "SELECT * FROM 書店")
      If IsError(execresult) Then _
      site = "クエリー実行": ErrorCheck (execresult): Exit Sub
  '結果の取得と貼り付け
  retriresult = SQLRetrieve(con, Range("Sheet2!A1"), , , True)
      If IsError(retriresult) Then _
      site = "クエリー結果取得": ErrorCheck (retriresult): Exit Sub
  'データソースとの接続を切断
  closeresult = SQLClose(con)
      If IsError(closeresult) Then _
      site = "切断": ErrorCheck (closeresult): Exit Sub
  End Sub
  'エラーチェック
  Sub ErrorCheck(CheckValue As Variant)
  Dim errmsg As Variant
  MsgBox "エラー処理開始"
  errmsg = SQLError()
  'SQLError で 3 つのフィールドのエラーが返った時の処理
  If UBound(errmsg, 1) = 3 Then
  MsgBox "発生した場所: " & site & Chr(10) _
  & errmsg(1) & Chr(10) & errmsg(2) & Chr(10) & errmsg(3)
  'それ以外の個別のエラー判定処理
  Else
      Select Case site
      Case "接続"
          If CInt(CheckValue) = 2042 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) _
              & "データソースとの接続が取り消されました"
          End If
          'Exit Sub
      Case "クエリー実行"
          If CInt(CheckValue) = 2042 Then
            MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) & "クエリーを実行できません"
          ElseIf CInt(CheckValue) = 2015 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) _
              & "データソースとの接続 ID が有効ではありません"
          End If
      Case "クエリー結果取得"
          If CInt(CheckValue) = 2042 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) _
              & "データソース上で結果を検索できないか" _
              & Chr(10) & "待機中の結果がありません"
          ElseIf CInt(CheckValue) = 0 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) & "データが見つかりません"
          ElseIf CInt(CheckValue) = 2015 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所 :" _
              & site & Chr(10) _
              & "データソースとの接続 ID が有効ではありません"
          End If
      Case "切断"
          If CInt(CheckValue) = 2015 Then
              MsgBox CStr(CheckValue) & Chr(10) & "発生した場所: " _
              & site & Chr(10) _
              & "データソースとの接続が有効ではありません"
          End If
      End Select
  End If
  End Sub

詳細

  • データソースに接続する前に SQLOpen の第一引数 DSN= で使用するデータソー スを定義しておく必要があります。
  • サンプルプログラムで使用する SQLOpen、SQLExecQuery、SQLRetrieve、 SQLRetrieveToFile、SQLClose は XLODBC アドインに含まれます。この関数を 使用可能にするには、[ツール] - [参照設定] コマンドで XLODBC.XLA の参照 を設定しておく必要があります。
  • XLODBC アドイン関数についての詳細は、[?] - [キーワードで検索] コマン ド - [ODBC 関数アドイン] を参照して下さい。
  • SQLOpen の第一引数で指定する接続文字列 ("DSN=・・・・・PWD=・・・") は、ご使用 になっている ODBC ドライバにより異なります。
  • 接続文字列についての詳細は、ご使用になっている ODBC ドライバのオンラ イン ヘルプを参照して参照していていただくか、ODBC ドライバ メーカーに お問い合わせ下さい。
        SQLServer
        「 Microsoft Query 」の [?]-[目次] コマンド - [リファレンス  ODBC
          ドライバ] - [SQL Server] - [上級ユーザー向け  接続文字列 (上級)]
        その他
          ODBC ドライバ メーカーにお問い合わせ下さい
    

Keywords: KBINFO KB401672
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch

inserted by FC2 system