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

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

ただいまの
回答率

90.52%

  • VBA

    1794questions

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

  • Access

    431questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 640

Yuyuu

score 6

 前提・実現したいこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dit.

    2018/05/24 16:08

    コードの部分を選択して、<code>ボタンを押してコードブロックにしてください。https://teratail.com/help/question-tips#questionTips3-5-1 teratailではソースコードをシンタックスハイライトすることができます。

    キャンセル

  • Yuyuu

    2018/05/24 16:11

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

    キャンセル

回答 4

+2

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 09:17

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

    キャンセル

checkベストアンサー

+1

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/24 16:41 編集

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

    キャンセル

  • 2018/05/24 17:06

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

    キャンセル

  • 2018/05/24 17:12

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

    キャンセル

  • 2018/05/24 17:17

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

    キャンセル

  • 2018/05/24 17:18

    はい。
    登録先です。

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

    キャンセル

  • 2018/05/24 17:23

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

    キャンセル

  • 2018/05/24 17:24

    T_K_GDateテーブルに”伝”フィールドはないので、エラーが起きるはずなのですが、
    起きてはいないです。

    ブレークポイントの設定のやり方はわかるのですが、
    どこにポイントを置いて、ステップインしていいのかはわからないです。

    キャンセル

  • 2018/05/24 17:32

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

    キャンセル

  • 2018/05/24 17:45

    Accessの不具合だったのでしょうか?
    今試しに登録してみたところ、登録できました。

    お騒がせしてしまい、申し訳ございません。
    ありがとうございました!

    キャンセル

  • 2018/05/24 17:55

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

    キャンセル

  • 2018/05/25 09:01

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

    キャンセル

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/28 09:02

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1794questions

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

  • Access

    431questions

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