SBMJOB
ボタンを押すとADOでSQLを発行してテーブルを更新する仕組みを作ってみます。更新・削除系のSQLなら物凄く簡単に処理できます。
目次
画面設計と概要
売上テーブルの各レコードを更新するサンプルプログラムです。実務の場合はバッチ処理か売上入力時の対話型のトランザクション内で処理されるべき処理となります。
なお画面上にはレコードのIDを表示されており、売上レコードが一つだけ表示されていますが、サンプルコードでは売上テーブルの前レコードを一括で更新します。(学習用なのでご容赦ください)
サンプルコードでは、コマンド28「全レコード売上金額を計算セット」、コマンド29「全レコード売上金額0セット」をSQLで処理しています。
サンプルコード
Private Sub コマンド23_Click()
Dim args As String
If IsNull(Me.txt_ID) = False Then
args = Me.txt_ID
End If
DoCmd.OpenForm "f_売上_個別入力", acNormal, , "ID =" & Me.txt_ID, , acDialog, args
End Sub
Private Sub コマンド27_Click()
DoCmd.Close acForm, Me.Name
End Sub
Private Sub コマンド28_Click()
Dim ct As New ADODB.Connection
Dim stSQL As String
Set ct = CurrentProject.Connection
strSQL = "update t_売上 set 売上金額= 数量*単価"
strSQL = strSQL & ";"
ct.Execute strSQL
Set ct = Nothing
DoCmd.Requery
End Sub
Private Sub コマンド29_Click()
Dim ct As New ADODB.Connection
Dim stSQL As String
Set ct = CurrentProject.Connection
strSQL = "update t_売上 set 売上金額= 0"
strSQL = strSQL & ";"
ct.Execute strSQL
Set ct = Nothing
DoCmd.Requery
End Sub
Private Sub コマンド30_Click()
On Error Resume Next
DoCmd.GoToRecord acDataForm, "f_売上", acNext
End Sub
Private Sub コマンド31_Click()
On Error Resume Next
DoCmd.GoToRecord acDataForm, "f_売上", acPrevious
End Sub
解説
Private Sub コマンド28_Click()
Dim ct As New ADODB.Connection
Dim stSQL As String
Set ct = CurrentProject.Connection '①
strSQL = "update t_売上 set 売上金額= 数量*単価" '②
strSQL = strSQL & ";"
ct.Execute strSQL '③
Set ct = Nothing
DoCmd.Requery
End Sub
特に難しいことはなく、①でコネクションを作成②でSQL文を作成③でSQLを実行しているだけです。
SQL文自体で処理を完結させるならとても簡単に処理できるはいいですね。Update Delete系のSQLだとレコードセットを使う必要がないのでこのような記述となります。
比較
ADOでSQLでレコードセット作って一行ずつ処理する方法
Access VBAでテーブルを操作・参照するときはADO接続でSQL発行した方がロジックがわかりやすいと思われます。あと外部のサーバに接続して開発する場合もADOの方がすんな…
上記の記事はSQLを発行して読み込んだレコードセットを一行ずつ舐めて処理していますが、今記事では舐める処理はしていないので完結な記述で処理が完結します。
コメント