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

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回答

11858閲覧

Access オートナンバー型フィールドへの追加クエリ VBA

access

総合スコア9

VBA

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

Access

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

SQL

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

0グッド

0クリップ

投稿2020/07/05 06:22

Accessにて以下のようなテーブルがあります。

テーブル名:Tヒヤリハット
連番(オートナンバー型)
社員コード(短いテキスト型)
社員名(短いテキスト型)
部署名(短いテキスト型)
課名(短いテキスト型)
発生日(日付型)null可
詳細(短いテキスト型)null可

このテーブルに次のようなInsert文を実行したところ、「クエリの値と出力するフィールドの数が一致しません」というエラーが発生します。

Insert Into T資格管理 values('0082' , 'テスト 太郎' , 'ネットワーク部' , '技術', #2020/3/14# , Null);

調べたところ、オートナンバー型のフィールドはValuesで指定しなくても良いとのことなのですが違うのでしょうか。
ちなみに、以下のように連番(オートナンバー型)も指定すると上手く実行されます。

Insert Into T資格管理 values(2709,'0082' , 'テスト 太郎' , 'ネットワーク部' , '技術', #2020/3/14# , Null);

このテーブルには複数人が同時に接続してこういう追加クエリを実行しますので、
連番の数値をDmaxで指定すると連番の衝突が起きそうで良くない気がします。
以前、こういう場合にはトランザクション処理を行うと良いと教えてもらいましたが、
自分のレベル的に難しそうなのでそれ以外の方法はありますでしょうか。
よろしくお願い致します。

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

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

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

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

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

Orlofsky

2020/07/05 06:31

半角カタカナを使うと能力と良識を疑われるから全角に直しては?
guest

回答2

0

INSERT INTO ステートメント (Microsoft Access SQL)

AutoNumber フィールドがあるレコードをテーブルに追加するときに、追加したレコードの番号を再割り当てしたい場合、クエリには AutoNumber フィールドは入れないでください。AutoNumber フィールドは、フィールドの元の値を維持したい場合のみ含めるようにしてください。

上記に伴い、AutoNumber フィールドを省略する場合は、以下のルールに従う必要があります。

別のテーブルから既存のレコードを追加する代わりに、VALUES 句を使用して 1 つの新しいレコードに各フィールドの値を指定できます。**フィールド一覧を省略した場合、VALUES 句にはテーブル内のすべてのフィールドの値を含める必要があります。**そうしないと、INSERT 操作は失敗します。

要は、Valuesで指定する値が、テーブルの定義に対し列の並びとその項目数が合っている場合だけ、フィールド一覧を省略できるという事です。

投稿2020/07/05 07:05

sazi

総合スコア25327

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

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

access

2020/07/05 07:10

そういうルールだったのですか。 有難うございます!
guest

0

ベストアンサー

列名書けばいいと思います。

sql

1Insert Into T資格管理(社員コード, 2社員名, 3部署名, 4課名, 5発生日, 6詳細) 7values('0082' , 'テスト 太郎' , 'ネットワーク部' , '技術', #2020/3/14# , Null);

投稿2020/07/05 06:37

sousuke

総合スコア3830

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

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

access

2020/07/05 07:09

お世話になります。 insertにそんな書き方があったとは知りませんでした。 有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問