別のテーブルから別のテーブルへデータを保存する方法

このQ&Aのポイント
  • Access2002で、二つのコンボボックスを利用して絞り込みを行い、新しい項目を登録したいです。新規登録時には選択されている大の番号を自動で取得し、小のテーブルに入れる方法を知りたいです。
  • 大テーブルと小テーブルを作成し、コンボボックスを使って絞り込み機能を実装しています。新たに項目を登録する際に、選択されている大の番号を自動で取得し、小のテーブルに追加したいです。
  • Access2002で、絞り込み機能を持つ二つのコンボボックスを使用しています。新規項目を登録する際には、選択されている大の番号を取得し、小のテーブルに追加したいです。方法を教えてください。
回答を見る
  • ベストアンサー

別のテーブルから別のテーブルへデータを保存する方法

Access2002です。 二つのコンボボックス、大・小でそれぞれ絞り込みを行なうようにしています。 大で絞り込んだ結果が小に反映されるのですが、追加で新しい項目も登録させたいです。 その際に、次に絞り込みを行なうときに新規で小に追加された項目が、大を選んだ後にきちんと表示されるようにしたいのですが、その処理をどうすればいいのか分かりません。 それぞれ番号を振ってあるので、小に新規登録するときに、その時点で選択されている大の番号を自動で取得し、小のテーブルに入れられればと思っています。 大テーブル ・大項目コード(オートナンバー型) ・大項目(テキスト型) 小テーブル ・小項目コード(オートナンバー型) ・小項目(テキスト型) ・大項目コード(数値型:ここに大テーブルの「大項目コード」を入れたい) テーブルは上記のようになっています。 絞り込みは下記のように、大・小ふたつ分記載してあります(名前以外は同じです) Private Sub コンボ大_NotInList(NewData As String, Response As Integer) Dim strmsg As String strmsg = "登録されていない語句です。保存しますか?" If 1 <> MsgBox(strmsg, 1) Then Response = acDataErrContinue Me.コンボ大.Undo Else DoCmd.SetWarnings False DoCmd.OpenQuery "追加クエリ" Response = acDataErrAdded DoCmd.SetWarnings True MsgBox "登録しました。" End If End Sub 追加クエリはフィールドに『式1: Forms!入力フォーム!コンボ.text』、レコードの追加には『大項目』としています。小も同様です。 現在は別のテキストボックスに大の『大項目コード』を表示させ、そこから小のテーブルに入れられないかと思ってます。テキストボックスに表示させるのは出来ました。 その値を、小に新規で項目を登録する際に、一緒に小テーブルに入れられればと思っていますが、実際にどうすればいいのか、、ネットや本で調べてみましたがさっぱり分かりません。 望む結果になれば方法は問わないので、お知恵を拝借できればと思います。 分かりづらい文章かもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> 追加クエリはフィールドに『式1: Forms!入力フォーム!コンボ.text』、 > レコードの追加には『大項目』としています。小も同様です。 でしたら、『小テーブル』用の追加クエリに、もうひとつ列(フィールド)を追加すれば、 コードの方は特に触らなくても対応できるかと思います。 そのクエリをデザインビューで開いたら、以下のように「式2」の列を追加します:    フィールド: 式1: (下記参照) 式2: (下記参照)     テーブル:     並べ替え: レコードの追加: 小項目      大項目コード ・「式1:」の式部分:   Forms!入力フォーム!コンボ小.Text ・「式2」の式部分:   Forms!入力フォーム!大コード   (大項目コードを表示させたテキストボックスの名前が「大コード」の場合) ・・・以上です。 要するに、 > 新規で項目を登録する際に、一緒に小テーブルに入れられればと思っています という場合は、上記のように、必要なフィールド群を順次横に並べてやればOKだと いうことです。 ・・・質問の趣旨を誤解していたらすみません(汗)

関連するQ&A

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 質問1. 下記のコードで、リレーションの張ってあるテーブルの削除でエラーになります。 でも、DoCmd.SetWarnings Falseの状態で、手動で削除するとエラーになりません。 だったらと思い、コードにDoCmd.SetWarnings Falseを追加したのですが、やはりエラーになります。 対処法はないでしょうか? 質問2. テーブルの中に「~TMP******」という勝手に作られたテーブルは、削除してもいいものなのでしょうか? 質問3. 削除後にインポートをしたいのですが。 手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK これを実現するVBの記述は、どんなコードになるのでしょうか? --------------------------------------------------------------------- Private Sub 旧バージョンからデータ移動_Click() Dim i As Integer Dim tbls As DAO.TableDefs Dim tbl As DAO.TableDef '開いているフォーム全てを閉じる For i = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(i).Name Next i Set tbls = CurrentDb.TableDefs DoCmd.SetWarnings False  '追加-------------------    ’全テーブル削除 For Each tbl In tbls If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 And InStr(1, tbl.Name, "~TMP", vbBinaryCompare) = 0 Then tbls.Delete (tbl.Name) End If Next DoCmd.SetWarnings True   '追加----------------   ’旧バージョンからのデータインポート   ’VBコードがわかりません End Sub ------------------------------------------------------------------------- ※旧バージョンとはアクセス本体ではなく、自分でつくったDBの旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • エクセルテーブルをアクセステーブル取込む

    エクセルで作成したテーブルデータを取り込むときに余分に空白のレコードが取り込まれてしまうんですが原因が分かりません。 下記コードで処理してます。 Dim strac As String Dim strxls As String Dim strrange As String Dim strMsg As String strac = "T_障害票マスタ" 'Accessテーブルを指定します。 strxls = テキスト0 'エクセルファイルを指定します。 strrange = "T_障害票!" 'データ入力のシート名とセル範囲を指定します。 strMsg = "エクセルファイル" & strxls & " を、Accessファイル " & strac & _ "として、データ入力を行います。" & _ "よろしければ、OKをクリックして下さい。" 'MsgBoxのメッセージ If strxls = "" Then MsgBox "ファイルを選択して下さい。" 'テキストボックスの確認 Exit Sub End If 'DoCmd.DeleteObject acTable, strac 'テーブルを削除します。 If MsgBox(strMsg, vbOKCancel, "import") = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True, strrange MsgBox "インポートは、正常に完了しました。" End If Exit Sub なお取り込むテーブルデータはフィールド行を抜かして常に1レコードだけです。 アクセスでは既存のテーブルに保存してます。 詳しい方お願いします。

  • 別テーブルに保存したいのですが

    アクセスでAテーブルからフォームを作り、そのフォームに別のテーブルBにある項目を追加したいのですが、 A,Bはnoでリレーションが設定してあります。 ツールボックスからテキストを追加してコントロールソース設定しましたができませんでした。 マクロで値の代入しましたが設定が違うのかできませんでした。 できるだけ簡単な方法でお願いします。

  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • テーブル1から抽出したものをテーブル2に入れたい

    ACCESSのVBA初心者です。 基本的な質問で申し訳ないのですが、どうかご教授をお願いします。 まず、まったく同じフィールドを持つテーブル1とテーブル2があります。 抽出したい項目は、テーブル1の中にある[性別]と[登録月]が一致するデータの全てです。 性別と登録月は別のフォームのコンボボックスで選択したもので抽出しようと思っています。 該当するデータが含まれているレコードを全てテーブル2に移したいです。 説明が下手で申し訳ないのですが、どうかご教授をお願い致します。 Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) DoCmd.RunSQL "DELETE FROM テーブル2" rs.Filter = " テーブル1.性別 = テーブル2.性別 & テーブル1.登録月 = テーブル2.登録月" テーブル2 = テーブル1.RecordsetClone 最初にdeleteがあるのは、前回の抽出条件を消したいからです。 よろしくお願い致します。

  • クエリからテーブルへデータを挿入する方法

    Access2000のクエリの方法。 Aテーブル(コード、期間、内容) Bテーブル(コード、内容、カウント) というものがあります。 条件構文(IIF)を使用して、カウント項目に値を入力したいと考えています。 条件として ・期間の中身が3以上 ・AのテーブルとBのテーブルの内容項目に入っている情報が一致している カウントの値を追加していく方法はありますか? あれば、その方法を教えてください。 内容がうまく説明できません。 各テーブルの項目ですが、 それぞれに違う項目もあります。 また、その他にもテーブルは存在しているため、このような書き方をしました。 ここで必要な情報だと思い、上に書いた分だけになります。 例 社員テーブル(コード、氏名、住所、作業期間、役割コード) 作業テーブル(コード、役割コード、役割内容、回数) というような状態です。

  • 追加したデータをコンボボックスへ即反映させたい。

    困っておりますので(私の勝手で申し訳ないですが)、アドバイスをお願いします。 【現状と状況のご説明】 収集した情報を活用する為にACCESSでデータを保存しております。登録した情報を絞込んで検索する為に、入力時に3つの定型項目をコンボボックスを使ったプルダウンメニューの形式で入力しています。 定型項目(3項目)への新たな項目追加は、個別(3つ)のテーブルを作成。そのテーブルからフォームを個別に3つ作成し、情報登録フォーム上にボタン(フォームを開くマクロ)を配して新たな項目を追加しています。 【簡単に構成をご説明】 ・テーブル名:情報登録テーブル(1つのテーブル) ・入力フォーム名:情報登録フォーム(3つのコンボボックス:A・B・C) ・テーブル名:情報項目テーブル(3つのテーブル) ・情報項目フォーム名:Aフォーム、Bフォーム、Cフォーム 【困っていること】 情報登録フォームから情報項目フォーム(A・B・C)を開いて、項目を追加したあと情報項目フォームを閉じても、開いている情報登録フォームのコンボボックスへ反映させられず(コンボボックスのメニューに未反映)、一度、情報登録フォームを終了させて、再度情報登録フォームを起動させるしかない状況です(そうすれば、コンボボックスのメニューに反映)。 【希望】 情報登録フォームを開いたままで、情報項目フォーム(A・B・C)に追加した項目をコンボボックスへ即反映させ、情報登録力フォームへの即入力を可能にさせたい。 以上ですが、宜しくお願いします。

  • 困ってます!Accessフォームのコンボボックス

    初心者です。とーっても困っています・・・。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 が、しかし、選んだデータがテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、テーブルを見ると、他のテキストボックスに入力した情報は保存されているけど、コンボで選んだデータは空白です。 誰か助けてください!!よろしくお願いします。

  • access2000レポートで2つのテーブルからデータを持ってくる方法を教えてください

    はじめまして。ゆきこと申します。 レポートのデザイン画面でページヘッダーにある テキストボックスは テーブル2 (項目:[出力年月FROM]、[出力年月TO][出力ステータス])から それ以外は テーブル1 (項目:[部長コード][部署コード][担当者名]...とテーブル1と同じ項目はありません。)から データをもってきて表示する、 という風にしたいのですが、 ページヘッダーのテキストボックスのプロパティの コントロールソースの式ビルダで =[1]![出力年月FROM]と、各とエラーになってしまいます。 ちなみにテーブル2の中身は 日付FROM  日付TO 2005/01  2005/10 のように入っているのですが、 それを レポートのテキストボックス1に日付FROMの「2005」、 テキストボックス2に「1」という風に表示させたいのですが、 可能でしょうか。 言葉が足りないとは思いますが、 よろしくお願いします。

  • リスト外入力(NotInList)時のイベント

    こんにちは。 コンボボックスのリスト外入力(NotInList)時のイベントについて教えてください。 ボックスに新しい値を入力した時、 ↓ ”「新しい値」 is not currently in the database. Would you like to add it?”というYesとNoのボタンを設けたメッセージボックスを表示。 ↓ Noを押した時→戻る。 Yesを押した時→値ソースであるテーブルに新しい値を自動で追加→リストの編集フォームを開く→追加されたレコードまでカーソルを持っていく(追加情報を入力する為)。 という動作を行いたいのです。 Private Sub Vendor_Name_NotInList(NewData As String, Response As Integer) Dim rc As Integer rc = MsgBox(NewData & " is not currently in the database. Would you like to add it?", vbQuestion + vbYesNo, "Vendor Info not available") Select Case rc Case vbYes Response = acDataErrAdded DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO Vendors (Vendor_Name) SELECT """ & NewData & """;" DoCmd.SetWarnings True DoCmd.OpenForm "Vendors_Editor", acFormDS Forms("Vendors_Editor").Recordset.FindFirst "Vendor_Name = '" & NewData & "'" Case vbNo Response = 0 End Sub と書いていますが、 DoCmd.RunSQL "INSERT INTO Vendors (Vendor_Name) SELECT """ & NewData & """;" のところで、 Run-Time Error 3134 - Syntax Error in Insert Into Statement というエラーメッセージが出て、同時に、 The text you entered isn't an item in the list. Do you want to edit the items in the list? というメッセージが出ます。(SetWarnings Falseが効かない?) 原因が分からないので教えて頂けると幸いです。

専門家に質問してみよう