PR

【Access VBA】SQLの実行方法

Access
記事内に広告を含む場合があります。

AccessのVBAにて、直接SQLを実行する方法をご説明いたします。

AccessのVBAを書籍でコツコツ学習したい方はこちら

参照(SELECT)

以下のようなテーブル[社員マスタ]を、SELECT文で読み取る方法をご説明します。

結論としては、DAOまたはADOを使えば実行可能です。
以下の記事も合わせてご覧ください。

例1:普通に読み取る場合

以下の「CurrentDb.OpenRecordset」の引数で、テーブル名だけを指定しても同じ結果になりますが、SQL文も記述可能です。

'レコードセットオブジェクトを定義
Dim objRs1 As DAO.Recordset

'レコードセットにテーブル[社員マスタ]をセット
Set objRs1 = CurrentDb.OpenRecordset("SELECT * FROM 社員マスタ")

'レコードセットを全件読み込むまでループ
Do Until objRs1.EOF
    'レコードセットを参照する処理
    Debug.Print objRs1!社員番号 & "," & objRs1!氏名
    
    '次のレコードに移動
    objRs1.MoveNext
Loop

'最後にお作法として、オブジェクトを解放
objRs1.Close: Set objRs1 = Nothing

実行結果

101,テスト 一郎
102,テスト 次郎
103,テスト 三郎
204,テスト 史郎
205,テスト 吾郎
206,テスト 六郎

例2:抽出(WHERE句)・ソート(ORDER BY句)を行う場合

以下のように、「CurrentDb.OpenRecordset」の引数にWHERE句やORDER BY句を記述することも可能です。
※「CurrentDb.OpenRecordset」以外の箇所は、先ほどの「例1」と同様です。

Set objRs1 = CurrentDb.OpenRecordset("SELECT * FROM 社員マスタ WHERE 役職 = '主任' ORDER BY 生年月日 DESC")

実行結果

205,テスト 吾郎
204,テスト 史郎

更新系(INSERT, UPDATE, DELETE)

更新系のSQL文は、「DoCmd.RunSQL」で実行できます。
DAO・ADOの記事でご説明したサンプルのように、該当レコードが複数件存在しても、ループさせる必要がありませんので、簡単な処理では、以下の例のようにSQL文を直接実行したほうがシンプルにコーディングできます。
なお、「DoCmd.RunSQL」を実行する都度ワーニングが出ますので、「DoCmd.SetWarnings」でワーニングを非表示にすることを推奨します。

レコード追加(INSERT)の例

先ほどのテーブル[社員マスタ]に、レコードを1件追加してみます。

DoCmd.SetWarnings False     'ワーニングを非表示にする
DoCmd.RunSQL "INSERT INTO 社員マスタ(社員番号, 氏名, 生年月日) VALUES(207, 'テスト 七子', #2005/7/7#)"
DoCmd.SetWarnings True      'ワーニングを表示する状態に戻す

レコード追加(INSERT)の実行結果

社員番号「207」のレコードが追加されました。

レコード更新(UPDATE)の例

社員番号「204」の役職を、「係長」に更新してみます。

DoCmd.SetWarnings False     'ワーニングを非表示にする
DoCmd.RunSQL "UPDATE 社員マスタ SET 役職 = '係長' WHERE 社員番号 = 204"
DoCmd.SetWarnings True      'ワーニングを表示する状態に戻す

レコード更新(UPDATE)の実行結果

社員番号「204」の役職が「係長」に更新されました。

レコード削除(DELETE)の例

役職がNullのレコードを、削除してみます。
今度は該当データが複数件存在しますが、DAOやADOの時のようなループ処理は不要です。

DoCmd.SetWarnings False     'ワーニングを非表示にする
DoCmd.RunSQL "DELETE FROM 社員マスタ WHERE 役職 IS NULL"
DoCmd.SetWarnings True      'ワーニングを表示する状態に戻す

レコード削除(DELETE)の実行結果

役職がNullのレコードが削除されました。

AccessのVBAを書籍でコツコツ学習したい方はこちら
VBAをガッツリ学べるスクールはこちら

コメント

タイトルとURLをコピーしました