質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

9523閲覧

Access サブフォームの複製 「パラメーターが少なすぎます、1を指定してください」のエラー

ryoya_access

総合スコア34

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/01/29 07:47

###概要
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 & "処理はキャンセルされました。"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

SQL文の下記がタイプミスだと思います。

T_予算明細テーブル.目標原価律 as 目標原価率                ↓ T_予算明細テーブル.目標原価率 as 目標原価率

あと、Dim No As Longですか、Noは予約語なので、変数名に使うのは避けたほうがいいでしょう。


メインフォームはT_予算テーブルとの連結フォームだと思いますので、わざわざ別にT_予算テーブルを開くのは無駄だと思います。

フィールド名は変更する必要がないので、T_予算明細テーブル.目標原価率 as 目標原価率などとする必要はないです。下記でOKです。こうすれば、タイプミスにもすぐ気が付くでしょう。

vba

1 SQL = "INSERT INTO T_予算明細テーブル (予算No,タスクID,請求書項目ID,予算額,目標原価率) " 2 SQL = SQL & "SELECT " & No & " as 予算No, タスクID, 請求書項目ID, 予算額, 目標原価率" 3 SQL = SQL & "FROM T_予算明細テーブル " 4 SQL = SQL & "WHERE T_予算明細テーブル.予算No=" & Me.予算No & ";"

あと、現在のフォームのデータを複写するので、WHERE条件は、フォームの予算No(Me.予算No)にする必要があります。

投稿2021/01/29 08:17

編集2021/01/29 08:36
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

コードを見て疑問に思う部分

「目標原価律」になっている。存在しない。

あと複製には「新規(複製先)の予算NO」と「複製元の予算NO」の両方が必要なはず。

「複製元の予算NO」を使っている形跡がない。

使っているなら「Me!予算NO」のような参照が必要だが提示のコードには存在しない。

本来ならここらへんで使っていないとおかしい。

vba

1 SQL = "INSERT INTO T_予算明細テーブル (予算No,タスクID,請求書項目ID,予算額,目標原価率) " 2 SQL = SQL & "SELECT " & No & " as 予算No, T_予算明細テーブル.タスクID as タスクID, T_予算明細テーブル.請求書項目ID as 請求書項目ID, T_予算明細テーブル.予算額 as 予算額, T_予算明細テーブル.目標原価律 as 目標原価率 " 3 SQL = SQL & "FROM T_予算明細テーブル " 4 SQL = SQL & "WHERE T_予算明細テーブル.予算No=" & Me!予算NO & ";"

投稿2021/01/29 08:16

編集2021/01/29 08:17
sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問