Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

SQLの実行方法 - DAOのExcuteメソッド : SQL入門講座



DAOを用いてSQLを実行する場合、定型のプロシージャを記述することで対処できます。思いのほか、簡単です。但し、以下の点に十分注意して下さい。

Excuteメソッドはアクションクエリのみ

選択クエリは、Excuteメソッドを用いることはできません。アクションクエリのみ、Excuteメソッドで実行が可能です。

この場合は、CreateQueryDefメソッドでQueryDefオブジェクトを新規作成します。つまり、新しいクエリを作成し、そのクエリを実行する訳です。 *レコードセットを用いてテーブルレコードを取り込み、クエリを作成する方法もあります。

一時的なクエリの作成

新規クエリを作成する場合、CreateQueryDefメソッドの引数にクエリ名を指定します。この時、クエリ名を空白("")にすると、一時的なクエリ(実行はできますが、保存はされない)になります。

事例 : DAOのExcuteメソッド

Exceuteメソッドを用いたサンプルプロシージャ を作成します。なお、以下のプロシージャはテーブルレコードを全て削除しますから、コピーを手元においておきましょう。

Sub MySQLDelete()

    Dim db As DAO.Database
    Dim mySQL As String
    
    Set db = CurrentDb()

    ' 全レコードを削除するSQLを記述します。
    mySQL = "DELETE * FROM 出張管理;"
    ' SQLを実行します。
    db.Execute mySQL dbFailOnError
                
    db.Close: Set db = Nothing
    
End Sub
解説
  1. DAOを用いるには、「参照設定」ダイアログで、Microsoft DAO 3.6 Object Library が有効になっているか確認します。
  2. 上記のプロシージャは、Excuteメソッドを用いる際の定型文です。
  3. Exceuteメソッドは、アクションクエリのみ実行することができます。選択クエリを実行すると、下記のようなエラーメッセージが表示されます。

 

  1. ExceuteメソッドでSQLステートメントを実行すると、Access所定の警告メッセージ は表示されません。よって、できれば下記のようにIf構文を交えた構成が望ましいです。
    db.Execute mySQL
    If MsgBox("全レコードを削除します。", vbCritical + vbOKCancel) = vbOK Then
        db.Execute mySQL
    End If
解説
  • 定数 dbFailOnError は、オプション定数です。
    更新、削除クエリを実行する際、クエリによって操作されるレコードが 1 つでもロックされていて、更新または削除が不可能な場合には実行時エラーが発生し、既に成功していた変更はすべてロールバックされます。

事例 2 : DAOのExcuteメソッド

DAOのExcuteメソッドには、下記のような使い方もあります。参考までに載せておきます。

Sub MySQLDelete2()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    
    Set db = CurrentDb()
    Set qdf = db.CreateQueryDef("")
    
    ' 全レコードを削除するSQLを記述します。
    qdf.SQL = "DELETE * FROM 出張管理;"
    ' SQLを実行します。
    If MsgBox("全レコードを削除します。", vbCritical + vbOKCancel) = vbOK Then
    	qdf.Execute dbFailOnError
    End If      
    db.Close: Set db = Nothing
    
End Sub
解説
  1. qdf.SQLのSQLの文字は SQL プロパティです。
    このプロパティは、QueryDef オブジェクトが実行するSQL ステートメントを設定、または返します。

事例 : CreateQueryDefメソッド

選択クエリを実行する場合は、CreateQueryDefメソッドで明示的、または黙示的にクエリを作成します。

Sub MySQLDelete()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim mySQL As String
    
    Set db = CurrentDb()
    
    ' 全レコードを削除するSQLを記述します。
    mySQL = "SELECT * FROM 出張管理;"
        
    ' クエリを作成します。
    Set qdf = db.CreateQueryDef("Q_出張管理", mySQL)
    DoCmd.OpenQuery qdf.Name
                
    db.Close: Set db = Nothing
    
End Sub
解説
  1. このプロシージャを実行すると、直ちにSQLステートメントが実行されてクエリが開きます。そして、明示的に「Q_出張管理」クエリが自動作成されます。
  2. なお、CreateQueryDef メソッドの引数に、空白の文字列("")を下記のように指定すると、黙示的に一時的なクエリが作成されます。*保存されませんので注意して下さい。
    Set qdf = db.CreateQueryDef("", mySQL)

関連ページ

2004/08/08

ページの先頭へ 前ページへ戻る

 


SQLの実行方法 - DAOのExcuteメソッド : SQL入門講座


-Microsoft Access Club-

アダルト・ゲーム配信可能なPLESKパネル付属の専用・共有レンタルサーバーを提供しています。
アダルトやゲーム配信が可能です。
全専用/共有レンタルサーバーにPLESKパネルをインストール済み。