- 締切済み
フォームの特定レコードをテーブルのレコードに追加する方法
アクセス2000を使用してデータベースを作っています。 今までアクセスは出来上がったシステムを使用するばかりでしたが、WEB上の検索とヘルプファイルだけを頼りに初挑戦しています。 設計自体おかしなところもあるかもしれませんが、今回どうしてもHITしなかったので質問させていただくことにしましたので、よろしくお願い致します。 作業依頼が親会社から来て、これを社員に指示し、完了結果を日々報告しなければなりません。 これをアクセスで管理しようと作業を始め、テーブル:作業依頼一覧表を作り、これを元に入力・検索フォームやレポート:作業指示書などを作り終えたところです。 表形式の検索フォームの作業依頼ID(オートナンバー)のダブルクリック時イベントに、レポート作業指示書を印刷するようマクロで設定してあります。 この検索フォームのフィールド作業完了日をダブルクリックすると、テーブル作業完了一覧にレコードを追加したいのですが行き詰ってしまいました。 どなたかご教授いただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
No.1です。 > これで間違いなければ原因として何が考えられるでしょうか? 書かれている作業には、間違いはなさそうです。 まずは、「現在の抽出条件で追加対象となるレコードがあるかどうか」と 「追加対象となるレコードが追加先に保存可能かどうか」の確認、という ことになるかと思います。 比較的よくあるパターンについての確認手順は以下のようになります: 1)『F_作業一覧検索』フォームを通常通りに開き、テスト対象にするレコード を選択(ダブルクリックはせず、あくまでクリックだけ)。 2)この状態(=上記フォームを開いたまま)で、キーボードのF11キーを押すなど してデータベースウィンドウを表示 3)『Q_作業完了に追加』クエリをデザインビューで開く 4)メニューで「表示(V)→データシート ビュー(S)」を選択して、追加クエリでの 追加対象となるレコードを確認 ⇒A)パラメータを要求するダイアログが表示された場合は、抽出条件の式に 問題あり(開いているフォームを正しく参照できていない) ⇒B)1件もレコードが表示されないなら、抽出条件に問題あり 5)追加対象が抽出されていた場合は、上記クエリを一旦閉じた後、同クエリ をダブルクリックするなどして、追加クエリを手動で実行 ※念のため、予めバックアップをとるか、テスト用のサンプルを作成して下さい。 6)「○件のレコードを追加します。・・・」というメッセージが出る(→件数はデータ シートビューで表示された通りの件数)ので、「はい(Y)」を選択 ⇒その後に「追加クエリですべてのレコードを追加できません。・・・」のメッセージ が出た場合は、その下の情報を確認 ・型変換エラー: 追加元と追加先で、フィールドの型が異なっている(数値型と文字列型、等) →フィールドの型を揃えるか、可能なら追加クエリでCLng関数などで型を変換。 ・キー違反: 主キーなど、重複が許可されていないフィールドに、既存のレコードと同じ値の レコードを追加した場合 →重複を許可できるものは許可、重複不可の場合は追加クエリではなく更新 クエリで既存レコードを書き換える形にする(→既存かどうかの切り分けが必要)。 または、抽出条件を指定した削除クエリで既存レコードを削除してから、追加 クエリでレコードを追加する。 ・ロック違反: 他のユーザーが、または別のフォーム等で、対象レコードが編集中だった場合など →別フォームで編集中だった場合は、フォームを切り替えるボタンのマクロに 「コマンドの実行」アクションを追加し、引数に「レコードの保存」を指定。 ダブルクリックしたフォーム自体で編集中の場合は、「M_作業完了に追加」で、 「クエリを開く」の前に、同様に「レコードの保存」を追加 ・入力規則違反: (あまりやらないと思いますが)2つのテーブルで同じ意味を持つフィールドに、 追加先にのみ入力規則を設定しているか、両者で異なる入力規則を設定 している場合 →入力規則の内容を揃える。 ※上記以外のメッセージが表示された場合は、そこに書かれた内容を元に、クエリや テーブルを見直すことになります。
- DexMachina
- ベストアンサー率73% (1287/1744)
> 検索フォームのフィールド作業完了日をダブルクリックすると、 > テーブル作業完了一覧にレコードを追加したい レコードの追加には、「追加クエリ」を使用するのが最も簡単ですので、 これについて説明します。 【追加クエリの作成方法】 1)データベースウィンドウ(テーブルやフォーム等の一覧が表示される画面)の 『クエリ』タブで『新規作成(N)』ボタンをクリックするなどして、『新しいクエリ』 ダイアログを開く 2)「デザイン ビュー」を選択して『Ok』ボタンをクリック 3)『テーブルの表示』ダイアログが開くので、検索フォームのレコードソースに 指定しているテーブル(またはクエリ)を選択し、『追加(A)』ボタンをクリック ※テーブル名/クエリ名のダブルクリックでも追加可能 4)『閉じる(C)』ボタンでダイアログを閉じる 5)Accessのメニューから、「クエリ(Q)→追加(P)」を選択 6)『追加』ダイアログが開くので、『テーブル名(N)』コンボボックスで「作業完了 一覧」テーブルを選択し、『Ok』ボタンをクリック 7)クエリのデザインビューの上半分で表示されている、先ほど指定したテーブル (またはクエリ)から、「作業完了一覧」テーブルに追加するフィールド群をドラッグ &ドロップで下半分の領域に追加 8)追加元と追加先でフィールド名が異なる場合は、『レコードの追加』欄が 空白のままなので、該当するフィールドを指定 9)『作業依頼ID』を「作業完了一覧」に追加しない場合は、検索条件の指定用 として、同様にドラッグ&ドロップで追加し、『レコードの追加』欄を空白にする ※追加対象フィールドだった場合は、ここでの再追加・空白化は不要です。 10)『作業依頼ID』の列の『抽出条件:』欄に、以下の式を入力: [Forms]![検索フォーム]![作業依頼ID] ※「検索フォーム」には、実際のフォーム名を指定します。 11)クエリを保存して閉じる 【追加クエリの使用方法】 マクロの場合は、「クエリを開く」アクションを使用します。 アクションの引数(マクロのデザインビューの下半分)で、対象クエリの名前を 『クエリ名』に指定します。 (『ビュー』、『データモード』は、それぞれデフォルトの「データシートビュー」、 「編集」のままでOk) VBAの場合は、OpenQueryを使用します。 DoCmd.OpenQuery "クエリ名" クエリ名以外の引数もありますが、追加クエリで追加を実行する場合は省略 しても問題ありません。 (追加クエリをデザインビューで開く場合などは、対応する引数の指定が必須) ・・・長くなりましたが、以上です。
補足
早速の丁寧なご回答ありがとうございます。 教えていただいた通りのやりました。が、できませんでした。 (追加されませんでした) 新たに作成した追加クエリには、[検索フォーム]を[F_作業一覧検索]と置き換え、「Q_作業完了に追加」としました。 次にクエリ「Q_作業完了に追加」を開くマクロを作成し、「M_作業完了に追加」として保存。 最後に「F_作業一覧検索」の「作業依頼ID」のクリック時イベントに「M_作業完了に追加」を指定。 これで間違いなければ原因として何が考えられるでしょうか? 「Q_作業完了に追加」を開いたまま「F_作業一覧検索」の「作業依頼ID」をダブルクリックすると「Q_作業完了に追加」が最前面に来るので、この追加クエリの抽出条件に問題があると思っていろいろ試しているんですが・・・。
お礼
DexMachinaさん、いろいろとありがとうございました。 やっとできました。
補足
何度もご丁寧にありがとうございます。 4)⇒B)1件もレコードが表示されないので、抽出条件に問題ありでした。 追加クエリ『Q_作業完了に追加』には、フィールド『作業依頼ID』の抽出条件を[Forms]![F_作業一覧検索]![作業依頼ID]としています。 テスト用のサンプルを作成して、最初にご回答いただいた内容を確認しながらもう一度やってみます。