###概要
Access(2019)で予算管理データベースを作成しています。以下のようなサブフォーム付きフォームで予算を登録しているのですが、契約月だけを変えて同じ内容を入力することが多いため、「入力内容を複製」ボタンを押すと入力内容を複製できるようにしたいです。
ここで「入力内容を複製」ボタンを押すと、契約月以外の項目を複製して表示できるようにしたい。
イメージは↑です。
###データベース構造
フォーム名は「F_予算_新規登録」、サブフォーム名は「SF_予算明細_新規登録」です。
■メインテーブル:予算テーブル
・予算No:オートナンバー
・クライアント名
・契約月
・(create_at)
・(updated_at)
■サブテーブル:予算明細テーブル
・予算明細No:オートナンバー
・予算No:数値(メインテーブルとの外部キー)
・タスク名
・請求書項目名
・予算額
・(繰越判定)
・目標原価率
・(create_at)
・(updated_at)
###コード
そこで以下のようなコードを記述したのですが、「CurrentDb.Execute SQL」のところで「パラメーターが少なすぎます。1を指定してください。」となってしまいます。このエラーについてのいくつかのサイトを見たのですが、サイトによって原因が様々で、この場合何を解決すれば良いのかわからず質問させていただきました。こちらどのように解決すれば良いのでしょうか。
On Error GoTo exception 'エラー時はexceptionに飛ぶ 'まずは保存する Me.BeforeUpdate = "" DoCmd.RunCommand acCmdSaveRecord Me.BeforeUpdate = "[イベント プロシージャ]" '複製していいかメッセージボックス If MsgBox("内容のコピーを作成しますか?", vbYesNo + vbInformation, "確認") = vbNo Then MsgBox "キャンセルしました。" Exit Sub Else End If Dim No As Long Dim db As DAO.Database Dim rs As DAO.Recordset Dim SQL As String Set db = CurrentDb() Set rs = db.OpenRecordset("T_予算テーブル", dbOpenDynaset) '1.予算テーブルに追加 rs.AddNew No = rs![予算No] '新規レコードのユニークナンバーを取得 rs![クライアントID] = Me!クライアントID 'いったん契約月には翌月の1日を入れておく rs.Fields("契約月") = Format(DateSerial(Year(Me!契約月), Month(Me!契約月) + 1, 1), "yyyy/mm/dd") rs.Update '2.「T_予算明細テーブルにレコード追加(追加クエリを利用) SQL = "INSERT INTO T_予算明細テーブル (予算No,タスクID,請求書項目ID,予算額,目標原価率) " SQL = SQL & "SELECT " & No & " as 予算No, T_予算明細テーブル.タスクID as タスクID, T_予算明細テーブル.請求書項目ID as 請求書項目ID, T_予算明細テーブル.予算額 as 予算額, T_予算明細テーブル.目標原価律 as 目標原価率 " SQL = SQL & "FROM T_予算明細テーブル " SQL = SQL & "WHERE T_予算明細テーブル.予算No=" & No & ";" CurrentDb.Execute SQL rs.Close Set rs = Nothing Set db = Nothing '複製したレコードを表示し、「契約月」欄を空にする DoCmd.OpenForm "F_予算_新規登録用", , , "予算No= " & No Me.契約月 = "" Exit Sub exception: DoCmd.Echo True DoCmd.SetWarnings True '警告文の表示 MsgBox "エラー:" & Err.Description & vbCrLf & "処理はキャンセルされました。"
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。