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

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

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

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

Access

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

SQL

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

Q&A

2回答

8590閲覧

Access VBA SQL文 実行時エラー3075 日付の構文エラーについて

uokaokabebe

総合スコア1

VBA

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

Access

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

SQL

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

0グッド

0クリップ

投稿2021/12/22 14:13

編集2021/12/22 14:53

現在Access VBAを勉強しております。
こちらのテーブルのレコードにSQL文のINSERT INTO VALUESを利用してレコードを追加しようとしております。
その際に下記のSQL文が表題にある通りエラーを起こしており、解決方法がよくわかりません。
問題のSQL文は下記のとおりです。

Private Sub Touroku()
Dim DB As DAO.Database
Dim strSQL As String

Set DB = CurrentDb

関連行 strSQL = "INSERT INTO G顧客情報(登録番号, 氏名, カナ氏名, 生年月日, 性別コード, 関係コード, 都道府県コード, 郵便番号, 住所, 勤務先, 電話番号, 携帯電話番号, PCメールアドレス, 携帯メールアドレス, 備考) " & _
"VALUES(" & _
DMax("登録番号", "G顧客情報") + 1 & " , " & _
" ' " & Me.Tx氏名.Value & " ' , " & _
" ' " & Me.Txカナ氏名.Value & " ' , " & _
エラー該当行 " # " & Me.Tx生年月日 & "#, " & _
Me.Cb性別コード.Value & " , " & _
Me.Cb関係コード.Value & " , " & _
Me.Cb都道府県コード.Value & " , " & _
" ' " & Me.Tx郵便番号.Value & " ' , " & _
" ' " & Me.Tx住所.Value & " ' , " & _
" ' " & Me.Tx勤務先.Value & " ' , " & _
" ' " & Me.Tx電話番号.Value & " ' , " & _
" ' " & Me.Tx携帯電話番号.Value & " ' , " & _
" ' " & Me.Txメールアドレス.Value & " ' , " & _
" ' " & Me.Tx携帯メールアドレス.Value & " ' , " & _
" ' " & Me.Tx備考.Value & " ' ) ; "
DB.Execute strSQL

DB.Close Set DB = Nothing

End Sub

全文はこれですが、実際のエラーを起こしている部分は上記のエラー該当行のみとなっております。
この部分と関連行と書かれている行の生年月日を削除すると問題なく追加が可能となっております。
エラー文は
実行時エラー"3075"
クエリ式 '# 'の日付の構文エラーです。
と表示されております。
お忙しいところ恐縮ですが、何卒エラーの原因と解決方法をご教授のほどよろしくお願いいたします

追記:

ご指摘を受けまして、イミディエイトウィンドウにstrSQLの中身を表示しました。
イミディエイトウィンドウには長いですが、
INSERT INTO G顧客情報(登録番号, 氏名, カナ氏名, 生年月日, 性別コード, 関係コード, 都道府県コード, 郵便番号, 住所, 勤務先, 電話番号, 携帯電話番号, PCメールアドレス, 携帯メールアドレス, 備考) VALUES(25 , ' 岡 ' , ' オカ ' , # 2021/12/04#, 1 , 1 , 1 , ' 1111111 ' , ' 東京 ' , ' かながわ ' , ' 000000 ' , ' 000000 ' , ' 000000 ' , ' 00000 ' , ' 00000 ' ) ;
と表示されました。
また、日付をフォームのコントロール(Me.Tx生年月日)の中に正しく入力してみたところ問題なく追加できました。
どうやら空欄のまま追加ボタンを押下して生年月日フィールドにnull値が入ったことがエラーの原因らしいです。

しかし私の中でなぜnull値が入るとエラーになるのかわからないことに加えて、null値であってもエラーなくそのまま空欄で先に進んでほしいのですがどうすればよろしいのでしょうか?

お時間ございましたら何卒ご教授のほどよろしくお願いいたします。

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

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

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

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

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

cx20

2021/12/22 14:23

まずは発行している SQL 文がどうなっているかを確認してみて下さい。 ----------------------- Debug.Print strSQL -----------------------
uokaokabebe

2021/12/22 14:38

cx20様 以前にも同じご指摘を受けておきながらまず一番先にやるべきことを忘れておりました。 申し訳ございません。 質問欄に内容を追記しました。 お時間ございましたら何卒ご確認のほどよろしくお願いいたします。
cx20

2021/12/22 14:50

質問欄の修正ありがとうございます。ただ質問文が重複していて読みづらいので再編集をお願いします。。
uokaokabebe

2021/12/22 14:54

cx20様 度々申し訳ございませんでした。 内容の重複修正しました。 ご指摘ありがとうございます。
guest

回答2

0

エラー該当行 " # " & Me.Tx生年月日 & "#, " & _

エラーの原因は、Me.Tx生年月日がNullの場合、##という文字列になり、SQLとしてはそのような値はないのでエラーになります。

対処法はいろいろありますが、例えば上記の行を下記に変更すればいいでしょう。

vba

1 IIf(IsDate(Me.Tx生年月日),"#" & Me.Tx生年月日 & "#","Null") & _

蛇足かも知れませんが、レコードを1件追加するだけなら、Recordset.AddNew で追加したほうがシンプルで読みやすいと思います。

vba

1Private Sub Touroku() 2 Dim rs As DAO.Recordset 3 Set rs = CurrentDb.OpenRecordset("G顧客情報") 4 5 rs.AddNew 6 rs!登録番号 = DMax("登録番号", "G顧客情報") + 1 7 rs!氏名 = Me.Tx氏名.Value 8 rs!カナ氏名 = Me.Txカナ氏名.Value 9 rs!生年月日 = Me.Tx生年月日.Value 10 rs!性別コード = Me.Cb性別コード.Value 11 rs!関係コード = Me.Cb関係コード.Value 12 rs!都道府県コード = Me.Cb都道府県コード.Value 13 rs!郵便番号 = Me.Tx郵便番号.Value 14 rs!住所 = Me.Tx住所.Value 15 rs!勤務先 = Me.Tx勤務先.Value 16 rs!電話番号 = Me.Tx電話番号.Value 17 rs!携帯電話番号 = Me.Tx携帯電話番号.Value 18 rs!PCメールアドレス = Me.Txメールアドレス.Value 19 rs!携帯メールアドレス = Me.Tx携帯メールアドレス.Value 20 rs!備考 = Me.Tx備考.Value 21 rs.Update 22 23 rs.Close 24 Set rs = Nothing 25End Sub

こちらだと、 Me.Tx生年月日.Value がNullの場合でも、フィールドにNullがそのまま入力されます。

投稿2021/12/23 01:51

編集2021/12/23 02:12
hatena19

総合スコア33782

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

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

0

似たような質問がありました。下記の回答を参考にしてみて下さい。

■ 日付の値をNullでAccessに書き込みたい
https://teratail.com/questions/121034

投稿2021/12/22 15:15

cx20

総合スコア4633

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問