access
ACCESS2010
AccessVBA

AccessVBAで直接SQLを叩きたいとき

自分用備忘録

内包しているAccessデータベースへの直接アクセスしたいとき


取得

DAOを使用する

レコードセット内のデータ取得は、レコードセットオブジェクト!カラム名 という感じで行う

Private Sub 取得ボタン_Click()

Dim db As DAO.Database
Dim rs As DAO.Recordset

Dim sql As String

sql = "SELECT ID, 氏名, 電話番号 FROM 従業員マスタ"
Set db = CurrentDb
Set rs = db.OpenRecordset(sql)

Do Until rs.EOF

Debug.Print rs!ID & " " & rs!氏名 & " " & rs!電話番号

rs.MoveNext
Loop

Set rs = Nothing
Set db = Nothing
End Sub


挿入、更新、削除

戻り値が必要ない場合は、RunSQLを使用できる

挿入、更新時に、都度確認画面が表示されるので、

DoCmd.SetWarnings にてワーニング表示を抑止している。

Private Sub 保存ボタン_Click()

Dim sql As String
Dim 数量 As Integer

数量 = テキスト1.Value

sql = "INSERT INTO テストテーブル(数量) VALUES (" & 数量 & ");"

Debug.Print sql

' データ挿入
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True

End Sub


補足

Access VBAで " をエスケープするには、 "" と重ねればよい

Access SQLでの日付時刻を扱う際は、 # で囲う。 #2018/10/22 12:34:56# など。