Microsoft Access 掲示板

表形式フォーム同士の一括挿入の方法を教えてください。

5 コメント
views
4 フォロー

Win10
ACCESS2010

先日、ご教授いただいた者です。
ありがとうございました。

未熟な為、方法が分かりません。
もしできるのであれば方法をご教授願います。

表形式の[フォーム1]と[フォーム2]があります。

<現状>
フォーム2の「挿入」ボタンで1項目ずつ挿入しておりますが
フォーム2上に「一括挿入」というボタンを設け、
登録項目を一括で挿入したいと思っていますが可能でしょうか?
可能の場合は教えてください。宜しくお願い致します。

サンプルをアップロード致しました。
[フォーム2]の

「リンゴ」「120円」
「ブドウ」「800円」
「カキ」「120円」
「ミカン」「30円」

を[フォーム1]に一括挿入したい

現在の記述は(1項目毎の挿入)

   Forms![フォーム1].SetFocus
   
   DoCmd.GoToRecord acActiveDataObject, , acNewRec
   Forms![フォーム1]!項目 = Forms![フォーム2]!項目
   Forms![フォーム1]!金額 = Forms![フォーム2]!金額

としています。

suzu
作成: 2019/11/13 (水) 18:53:01
通報 ...
1
2

ファイルを見ました。
フォーム1のレコードソースは「クエリ1」です。
フォーム2のレコードソースは「テーブル2」です。

「フォーム2」のデータを一括で「フォーム2」に追加したいということは、
言い換えれば、「テーブル2」のデータを「クエリ1」(テーブル1と同じもの)に追加するということです。
追加クエリという機能がありますので、それを使えば簡単に一括追加できます。

「テーブル2」から「テーブル1」にデータを追加する追加クエリを作成してください。
一括ボタンのクリック時にその追加クエリを実行するコードを記述すればいいでしょう。
追加クエリを実行後に、フォーム1を再クエリするれば、追加データが表示されます。

3

hatena 様

ありがとうございます。
追加クエリを使わない方法はないでしょうか?
サンプルは簡素化しておりまして実際は複雑になっており
作り直しができない状態です。
コードではできないのでしょうか?

申し訳ありません。

4
hatena 2019/11/13 (水) 20:57:06 修正

どのように複雑なのでしょうか。
フォーム2のデータをフォーム1にそのまま追加するだけではないのですか。

データを追加するだけなら、追加クエリが一番簡単です。追加クエリをコードで実行して再クエリです。
コード例

Private Sub コマンド8_Click()
    CurrentDb.Execute "追加クエリ"
    Forms![フォーム1].SetFocus
    Forms![フォーム1].Requery
End Sub

追加クエリを作成したくないなら、コードにSQLを直接記述することも可能です。

Private Sub コマンド8_Click()
    CurrentDb.Execute "INSERT INTO テーブル1 SELECT [テーブル2].* FROM テーブル2;"
    Forms![フォーム1].SetFocus
    Forms![フォーム1].Requery
End Sub

一応、追加クエリ(SQL)を使わない別案も出しておきます。

Private Sub コマンド8_Click()
    Dim MeRs As DAO.Recordset
    Set MeRs = Me.Recordset
    If MeRs.RecordCount = 0 Then
        MsgBox "データがありません。"
        Exit Sub
    End If
        
    Forms![フォーム1].SetFocus
    Dim TargetRs As DAO.Recordset
    Set TargetRs = Forms![フォーム1].Recordset

    MeRs.MoveFirst
    Do Until MeRs.EOF
        TargetRs.AddNew
        TargetRs!項目 = MeRs!項目
        TargetRs!金額 = MeRs!金額
        TargetRs.Update
        MeRs.MoveNext
    Loop

End Sub

追加クエリの方がシンプルですし、処理も高速です。

5

hatena 様

ありがとうございます。
3通りとも確認し思っていた通りに動作しました。
追加クエリを使用することに致しました。
お手数をお掛け致しました。
勉強になりました。