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

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

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

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

Access

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

Q&A

解決済

4回答

7286閲覧

Access フォームからテーブルの登録について。

Yuyuu

総合スコア12

VBA

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

Access

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

0グッド

0クリップ

投稿2018/05/24 07:02

編集2018/05/24 07:10

前提・実現したいこと

言葉が足りず、状況が伝わりづらかったら申し訳ございません。

製品登録フォームから、必要事項を選択し、
登録ボタンを押すとテーブルに登録されるように作りました。

1つ目の登録フォームは問題なく動いています。

製品を作るための原反を登録するフォームも必要だったため、
1つ目のフォームと同じような登録フォームを作りました。

原反用のテーブルも作成し、登録するVBAコードも書き換えたのですが、
登録ができない状態です。

発生している問題・エラーメッセージ

登録ボタンを押しても、エラーは起きません。
登録用のコード以降のコードは作動しているみたいです。

該当のソースコード

Private Sub 登録_Click() Dim i As Long Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("T_K_GDate", dbOpenTable) With rs For i = 1 To 3 If Len(Me.Controls("副材料" & CStr(i)).Value & "") > 1 Then .AddNew .Fields("伝票").Value = Me.伝票.Value .Fields("日付").Value = Me.日付.Value .Fields("時間").Value = Me.終了時間.Value .Fields("B_ID").Value = Me.取引区分.Value .Fields("B_Name").Value = Me.取引区分2.Value .Fields("M_ID").Value = Me.機械.Value .Fields("M_Name").Value = Me.機械2.Value .Fields("K_Kakou_ID").Value = Me.原反ID.Value .Fields("K_Kakou_Item").Value = Me.原反名.Value .Fields("C_ID").Value = Me.カテゴリ.Value .Fields("C_Name").Value = Me.カテゴリ2.Value .Fields("K_Fuku_ID").Value = Me.Controls("副材料" & CStr(i)).Value .Fields("K_Fuku_Item").Value = Me.Controls("副材料1_" & CStr(i)).Value .Fields("数量").Value = Me.Controls("副材料1_1_" & CStr(i)).Value .Fields("入庫").Value = Me.入庫.Value .Update End If Next End With MsgBox "登録処理しました。" Call ClearControls DoCmd.Close acForm, "F_K_Kakou", acSaveNo DoCmd.OpenForm "F_K_Kakou", acNormal, "", "", , acNormal End Sub

試したこと

テーブルを参照できていないのかと思い、
.Fields("伝票").Value = Me.伝票.Value
→ .Fields("伝").Value = Me.伝票.Value
に変えてもエラーは起きませんでした。

伝票番号を自動的に新しいものを取得するように、
登録するテーブルを参照していますが、そちらは正常に作動しております。

Private Sub Form_Load() Me!伝票 = DMax("伝票", "T_K_GDate") + 1 End Sub

補足情報(FW/ツールのバージョンなど)

環境
Windows10
Access2016

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

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

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

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

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

Yuyuu

2018/05/24 07:11

ご指摘ありがとうございます!訂正させていただきました。
guest

回答4

0

Access - Access 一度の登録処理で、複数のレコード登録がしたい。(127368)|teratail
の続きだと思いますが、
現状は非連結のフォームで、VBAを使って複数のレコードを新規追加しています。

前回の回答でも書きましたが、現状のテーブル設計は、正規化ができていないものになっています。
このままでは、いずれ行き詰ると思います。

また、非連結フォームは、Accessの基本である連結フォームを理解して十分使えるようになってから、それでは対応しきれない状況で使うべきものです。スキルのない状況で使うといつかしっぺ返しをくらいます。

テーブルの正規化、連結フォームについて十分理解したうえで、スキルを要するが自由度の高い非連結フォームをあえて選択しているということならいいのですが、失礼ながら、今までのやり取り見る限りはそうは思えません。

今回も解決しそうだし、取りあえずは、現状のままでもいいとは思いますが、将来的には、Accessの基本、正規化などについて学習して、テーブル設計から検討されることもお勧めします。

投稿2018/05/24 09:55

hatena19

総合スコア33620

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

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

Yuyuu

2018/05/25 00:17

仰る通りで、前回の続きでした。 正直に、まだ正規化がわかっておらず、 非連結フォーム?といった状態です。 勉強しながらの作業のため、見直しや作り直しは視野に入れております。
guest

0

ベストアンサー

リレーションシップで参照整合性にチェックが入っていませんか?
リレーションシップを作成、編集、または削除する
または、そのフォームのプロパティで[追加の許可]=はい、になっているでしょうか?

投稿2018/05/24 07:19

編集2018/05/24 08:05
sazi

総合スコア25138

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

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

Yuyuu

2018/05/24 07:46 編集

フォームからテーブルへの登録のみなので、 リレーションシップの参照整合性をいじれませんでした。 1つ目の正常に作動しているフォームとテーブルをコピーしているのは関係ありそうでしょうか。
sazi

2018/05/24 08:06

意識されていないなら関係ないかもしれませんね。 とりあえず、回答にリンク追記しました。
Yuyuu

2018/05/24 08:12

ありがとうございます! 勉強させていただきます!
sazi

2018/05/24 08:17

「T_K_GDate」はこのフォームでの登録先のテーブルですか?
Yuyuu

2018/05/24 08:18

はい。 登録先です。 正常に動いているほうのコード内容の、 登録テーブル名、コンボボックス名のみの変更しかしていない状態です。
sazi

2018/05/24 08:23

.Fields("伝").Value = Me.伝票.Value 上記はエラーになるはずなんですよね? ブレークポイントを設定してデバッグはできますか?
Yuyuu

2018/05/24 08:24

T_K_GDateテーブルに”伝”フィールドはないので、エラーが起きるはずなのですが、 起きてはいないです。 ブレークポイントの設定のやり方はわかるのですが、 どこにポイントを置いて、ステップインしていいのかはわからないです。
sazi

2018/05/24 08:32

forで回している部分ではそういった考慮は見られないので、T_K_GDateの主キーはオートナンバーですよね? 取り敢えず.addnewにブレークポイント設定してF8でステップ実行してみて下さい。 ※多分.Updateでエラーになるんでしょうけど。
Yuyuu

2018/05/24 08:45

Accessの不具合だったのでしょうか? 今試しに登録してみたところ、登録できました。 お騒がせしてしまい、申し訳ございません。 ありがとうございました!
sazi

2018/05/24 08:55

「閉じる時に最適化する」にはチェックが付いていますか? accessはサイズが2Gまでです。 データを削除してもサイズは減りませんので、増える一方です。 2gに近くなるとほとんど破損します。 最適化によってのみ圧縮されます。 ファイル→オプション→現在のデータベース→(真ん中くらい)
Yuyuu

2018/05/25 00:01

「閉じる時に最適化する」にはチェックが入っていませんでした。 詳しくありがとうございます!
guest

0

時間をおいて再度作動させたところ、
正常に動作しました。

お騒がせして申し訳ございません。

投稿2018/05/28 00:04

Yuyuu

総合スコア12

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

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

0

テーブルを参照できていないのかと思い、

.Fields("伝票").Value = Me.伝票.Value
→ .Fields("伝").Value = Me.伝票.Value
に変えてもエラーは起きませんでした。

との事ですが、そのロジックを通っていない可能性はありませんか?

Len(Me.Controls("副材料" & CStr(i)).Value & "")

の値をdebug.printで表示しながらステップ実行して正しい値を持ってきているか確認してみてください

投稿2018/05/26 06:13

imprezza

総合スコア61

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

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

Yuyuu

2018/05/28 00:02

ご回答いただき、ありがとうございます! 最適化したら動き出しましたので、また同じようなあことがあったらやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問