よろしくお願いいたします。
ひとつのボタンクリックイベント時に、下記箇条書きの順番でアクションクエリを実行するロジックについて試行錯誤中です。
・更新クエリ(変数upSQL)①
↓
・追加クエリ(変数addSQL)②
↓
・削除クエリ(変数delSQL)③
テーブルの任意の行の値を2倍にして(更新)、2倍にした行のうちチェック(True)がついているものだけを結果テーブルに追加して(追加)、
追加した分は元のテーブルから削除する(削除)という流れです。
変数の中には、この仕組みに沿ったSQL文が代入されています。
ここで本題ですが、この3つを順番に実行していく方法がわからない為、とりあえず3つを
ただ順番に記述していったところ、アクションクエリ実行のコードは無視され、初めのメッセージと
最後のテーブルを開くコードのみが実行されました(もちろん、結果テーブルには内容は反映されず空の状態)。
なので、②と③を一旦コメントアウトして①の更新クエリのみ実行したところ、エラーが出ました。
【実行時エラー3073
更新可能なクエリであることが必要です。】
3つのアクションクエリを順に実行できるやり方と、更新アクションクエリ実行部分のコードの
エラーの解決策を教えていただけませんか。
色々と試行錯誤した結果解決が出来なかった為、
有職者の皆様、どうぞよろしくお願いいたします。
Private Sub 更新追加削除_Click() If MsgBox("チェックのついたデータを更新して結果テーブルに追加しますか?", vbOKCancel) = vbOK Then If MsgBox("元のチェックデータは消えますがよろしいですか?", vbOKCancel) = vbOK Then ①更新クエリ DoCmd.RunSQL upSQL //②と③をコメントアウトした場合、エラー ②追加クエリ DoCmd.RunSQL addSQL ③削除クエリDoCmd.RunSQL delSQL End If DoCmd.OpenTable "アクションクエリ結果テーブル", , acAdd End If End Sub
~追記~
各クエリの内容は以下です。
upSQL
1taddSQL = "INSERT INTO アクションクエリ結果テーブル ( 番号, 名前, 売上 ) SELECT テーブル名番号, テーブル名.名前, テーブル名.売上 FROM テーブル名 WHERE (((テーブル名.結果)=True))" 2delSQL = "DELETE テーブル名.結果 FROM テーブル名 WHERE (((テーブル名.結果)=True))" 3bkSQL = "SELECT テーブル名.番号, テーブル名.名前, テーブル名.分類, テーブル名.日付, テーブル名.売上, テーブル名.結果 INTO バックアップ_テーブル名 FROM テーブル名"
※ためしに作った下記コードのテーブル作成クエリのイベントがうまくいったので、
それを元に本題のコードを作っています。
~成功例~ ※変数bkSQLには、テーブル作成アクションクエリのSQL文を代入しています。 If MsgBox("バックアップテーブルを作成します。", vbYesNo) = vbYes Then DoCmd.RunSQL bkSQL MsgBox "テーブルを作成しました。" End If

回答3件
あなたの回答
tips
プレビュー