三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Access サブフォーム 内訳レコードを親フォームのデータから作成したい DoCmd.RunSQLでINSERT INTO文を発行 その他処理のタイミングをデバッグしてみた

f:id:ken3memo:20220325002742j:plain
#Access 親フォームから
INSERT INTO テーブル ( F1, F2, F3 ) values (1,2,3)

SQL を作り、
#サブフォーム で使用する子テーブルデータを作成

処理のタイミング、イベントのタイミング

迷いながら #デバッグ する姿を笑ってください・・・

youtu.be
https://youtu.be/D9UqaBjVH9k
↑文字が小さい時、YouTubeでフルスクリーンで見てください。
00:00 挨拶、質問内容の説明
03:30 SQL INSERT INTO のテスト実行
10:53 処理のタイミング イベントにコードを書く

データ作成条件
ア.親フォームで端数が発生しない時、
イ.子の出荷データが入っていない時

1.ボタンを作成してSQL INSERT INTOのテスト

    Dim strSQL As String
    
    strSQL = "INSERT INTO 出荷内訳テーブル ( 出荷ID,個数2,箱の個数 )"
    strSQL = strSQL & "values ("
    strSQL = strSQL & " " & Me.出荷ID
    strSQL = strSQL & ", " & Me.個数
    strSQL = strSQL & ", " & Me.箱の個数
    strSQL = strSQL & ")"
    
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
    
    '子フォームを更新
    Me.SUB子出荷内訳.Requery
||<    

2.処理を親フィールドの個数 入力後 ※フォーカース喪失
 などに入れテスト
>|vb|
'データ作成条件
'ア.親フォームで端数が発生しない時、

    '内訳が必要な時は、何もしない
    If (Me.個数 Mod Me.箱の個数) > 0 Then
        Exit Sub
    End If

'イ.子の出荷データが入っていない時

    Dim n As Integer
    
    n = DCount("*", "出荷内訳テーブル", "出荷ID=" & Me.出荷ID)
    If n > 0 Then  '既にデータがあったら、登録したくないので
        Exit Sub
    End If

'内訳TABALに登録
    Dim strSQL As String
    
    strSQL = "INSERT INTO 出荷内訳テーブル ( 出荷ID,個数2,箱の個数 )"
    strSQL = strSQL & "values ("
    strSQL = strSQL & " " & Me.出荷ID
    strSQL = strSQL & ", " & Me.個数
    strSQL = strSQL & ", " & Me.箱の個数
    strSQL = strSQL & ")"
    
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
    
    '子フォームを更新
    Me.SUB子出荷内訳.Requery

勝手なストーリーを自分で作り、自分でハマる・・・ぉぃぉぃ

2.1 規定値で一箱個数が30なので、気が付きにくいが、
  個数90 一箱45 の時、、、個数入力後に処理すると、
  90,30で作成されるかな
  まぁ、そこまで、気にしなくても?

2.2 個数1800の大口さん?で、
  始め180と一ケタ少なく入力
  あっ、やっちゃつたね、気が付いて1800に直す。
  ※既に180入力後に180,30の組み合わせで子テーブルに追加されていたり。

処理を入れるタイミングって、むずかしいですね。

今、親レコード追加時に気が付かないのを防止したいから、
レコード挿入後かな?

あっ、ヤバイ私が勝手に 親フィールドの個数 入力後とか言い出したんだ・・・
入れるタイミングは、質問者が考えているでしょう。

質問が子テーブルの作成なんだから、
それ以外の懸念事項やバグを勝手に作るなって・・・・

失礼しました、何か、参考になるといいな・・・



Private Sub どこかのタイミング()

'データ作成条件
'ア.親フォームで端数が発生しない時、

    '内訳が必要な時は、何もしない
    If (Me.個数 Mod Me.箱の個数) > 0 Then
        Exit Sub
    End If

'イ.子の出荷データが入っていない時

    Dim n As Integer
    
    n = DCount("*", "出荷内訳テーブル", "出荷ID=" & Me.出荷ID)
    If n > 0 Then  '既にデータがあったら、登録したくないので
        Exit Sub
    End If

'内訳TABALに登録
    Dim strSQL As String
    
    strSQL = "INSERT INTO 出荷内訳テーブル ( 出荷ID,個数2,箱の個数 )"
    strSQL = strSQL & "values ("
    strSQL = strSQL & " " & Me.出荷ID
    strSQL = strSQL & ", " & Me.個数
    strSQL = strSQL & ", " & Me.箱の個数
    strSQL = strSQL & ")"
    
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True
    
    '子フォームを更新
    Me.SUB子出荷内訳.Requery
End Sub

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)