• ベストアンサー

複雑なクエリ(ビュー)を元にしたフォームでデータの追加・更新・削除をしたい

Accessでは、単純な内部結合のクエリを元にフォームを作った時、データの追加・更新・削除ができますよね? そして、外部結合や選択クエリが混ざってくるとできなくなりますよね? いろいろな本を漁ったのですが、そのような場合、フォームを非連結にしてVBAでがりがり処理する事になってしまっています。 やはりVBAを使わないといけないのでしょうか? どうせVBAを使わないといけないというのなら、出来れば汎用性の高いオブジェクトにしてしまいたいのですが、スキルがありません。(笑) 何とぞアドバイスを。

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

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

汎用性の高いオブジェクトにするには 初期設計がすべてでしょう。 項目名、テーブルの正規化、など、、、 もともとリレーショナルデータベースでは テーブル同士が1対多で結合する場合が大半です。 ですから「多」側のレコードが操作される場合は 「多」の中のどのレコードが操作されたかを [フォーム].[レコードソース]から判断するには 情報不足になっている場合がほとんどだからです。 つまり、[フォーム].[レコードソース]として指定した SQL文ないしはクエリーがすでに情報不足な状態に なっているのです。 VBAを使うしかないでしょう。

marsah
質問者

お礼

ご回答ありがとうございます。 やはり避けて通れませんか… Access2000の仕様として無理なのですね… ところで、 「Access2000+MSDEによる仕入買掛システムの構築」山田健一 著、技術評論社 刊 と言う本のサンプルプログラムに、 “レコードセットに含まれる全てのフィールドに対し、テーブルフィールド名と等しく名付けられたコントロールのフォーム変数に値を代入する。(前提としてフォーム中に全てのフィールド名と同名のコントロールが存在しなければならない。)” というような仕様のサブプロシ-ジャ例が載っているのですが、アルゴリズムとしてはこれがベストなのでしょうか? もしよろしければご見解を伺いたく存じます。 以上、ありがとうございました。

marsah
質問者

補足

その後、読書したり講習会に出たりしまして、いろいろと考えが変わりました。 汎用性の高いオブジェクトを設計するくらいなら、Accessの中でやるよりもむしろAccessを部品として使った方が良さそうですね。(笑) ありがとうございました。

関連するQ&A

  • 非連結のフォームからテーブルにデータを追加する

    アクセスにおいて フォームの非連結のテキストボックスから テーブルにデータを追加するには VBAのADOを学ぶしかないのでしょうか? ADOを使わなくても 追加クエリ等を使えば、対応できますか? よろしくお願い致します。

  • アクセス:フォームを閉じずにデータ更新するには

    みなさん、おはようございます。 データベースアクセスについて質問させていただきます。参考書やこちらの質問等もしらべましたが回答が得られなかったので質問致します。 現在、アクセスで病院のベッドを管理するアプリを開発中です。 ひとつのフォームに全病棟のベッドを表示するため500以上のコントロールを配置しておりますが、 すべて非連結にして、フォームを開くときのイベントプロシージャーにクエリを開いてすべてコントロールにテーブルのデータをはめていくように設計しています。 で、問題はこのフォームを開いたまま最新のデータに更新させたいのですが、再クエリーではうまくいきませんでした。 なぜうまくいかないのか理由はわかっていません(プログラマーの方ならうまくいかなくて当然とおっしゃるかもしれませんが) で、仕方なく、一定間隔の時間ごとにフォームを閉じて開くという方法を取っています。 この方法では遅いマシンだと再表示に時間がかかるのできっとほかにスマートなよい方法があるとおもっているのですがプログラミングのスキルが乏しいため詰まっております。 お知恵をお借りできれば幸いです。

  • Access 別フォームへの再クエリ(更新)がしたい。

    宜しくお願いします。 仕様環境:WinVISTA Access2007 別フォームから別フォームへの再クエリの仕方を教えてください。 画像を貼らせて頂きます。 まず、後ろのメインフォームから新規作成ボタンを押して、 別のフォーム(作成画面)を開きます。 そこに新しいデータを入力して、閉じますと、 そのままではメインフォームには反映しません。 (テーブルには反映していますが) 別フォーム(新規の作成画面)に再クエリをかけても そのフォームが更新させるだけで、メインフォームに変化はありません。 ちなみにメインフォームに作った更新ボタン(中身は再クエリ)を押すと反映されます。 どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか? やりたいことは別フォームのOKボタン(画像参照)を押すと 別フォームが閉じると同時にメインフォームが再クエリ(更新)されるとベストです。 (今のところOKボタンの中身は”閉じる”のマクロだけです) 構造は簡単で恐縮ですが、 テーブル:Tメイン フォーム:メインフォーム      作成画面フォームetc.. です。 クエリはメインフォーム自体にクエリビルダを使っていますが、 特別な施しなどはしていません、うまく動作しないところがあって、 いろいろ調べていてそうすると改善すると書いてあったので。。 ちなみにテーブルには「日付」の後順で並び替えをかけています。 当方、VBAに弱いのでマクロで操作できるのでしたらお願いします。 マクロで出来ないものでしたらVBAを教えて頂ければ、 イベントプロシージャに書き込みます。 大変恐縮ですがお知恵をお貸しください、宜しくお願いします。

  • クエリの更新をフォーム上で行うには?

    Windows NTでAccess2000を使っています。 ただ今、2つ困っていることがありますので どちらかでも方法をご存知の方は回答をお願いしますm(_ _)m フォームで入力後、レポートのプレビューを見て 再度フォームで入力(変更)し、プレビューを見たとき 変更事項が反映されていないのはどうしようもないのでしょうか? できればプレビュー用のコマンドボタンを作っているので そのマクロにクエリの情報を更新させるようなマクロを組み込めればと思います。 もう1つはこのレポートをFAXする場合 印刷のプロパティでFAX設定を行いますが この時宛先を追加しようとするとまだ1件も追加していないのに 「これ以上追加はできません」というエラーが出ます。 なにゆえこのようなエラーが出るのか…(*_*) どうぞよろしくご指導ください。

  • access クエリ 検索フォームの作り方

    よろしくお願いします。 やりたいこと: フォーム上で、テキストボックスに入力した値を検索して表示したい。 本やウェブで調べて、なんとか一度はやっと出来たのですが、 誤って何かを変更してしまい、使えなくなってしまいました。 今となってはどの資料を見て作れたのかわからなくなりました。 やったこと: クエリ :クエリA   条件にforms!フォームA!txt0を入力 フォーム:フォームA ヘッダーに非連結のテキストボックスtxt0を作成 txt0の更新後処理:docmd.requeryを入力 しかし、txt0に入力しても検索されません。 フォームのプロパティのレコードソース欄にクエリAを選択するようですが、 選択するクエリ名が表示されないので、クエリ名を入力しましたがダメでした。 どこか間違っているのでしょうか。VBAまでは勉強できないので上記範囲内でお願いします!

  • access 更新クエリ?追加クエリ?

    access超初心者です。 いま、下記のような在庫表をつくっています。 (出庫テーブルは省略してます) 入庫テーブル  ID  入庫日付  大分類  中分類  小分類  数量   在庫テーブル  ID  大分類   中分類   小分類  最初の数  入庫数   出庫数 入庫更新クエリ *入庫→在庫  大分類        中分類           小分類 ・入庫の全レコードと在庫表の同じ結合フィールドのレコードだけを含める で結合しています。 *在庫表の入庫数  レコードの更新で  NZ([在庫数]![入庫数],0)+NZ([入庫]![数量],0) といれています。 入庫テーブルに入力していき その都度、 入庫更新クエリにて更新し 在庫表に反映させていきたいと思っています。 入庫表には、この先 在庫表にないものもでてくるので 在庫表にないものは 追加、あるものは、更新としていきたいです。 今の状態だと 入庫表のものは、更新クエリでいったん在庫表に反映されるのですが 入庫表にレコードを追加して また更新クエリをかけると 在庫表が、前に更新したレコードの分も 重複して反映してしまいます。 これをなくすには、どういった方法が ありますか? 宜しくお願いいたします

  • Access、更新クエリ実施後更新用データ削除

    こんにちは、いつもお世話になります。MS-Access2003です。 マクロで、更新クエリを開いて更新を実行したとして、 その「クエリを開く」行の次に、更新用のデータの入ったテーブルを空にする行を追加したいのですが、関数が分かりません。 何というマクロアクションを指定すれば良いでしょうか?

  • フォーム内のデータをすべて更新したい

    フォーム内のデータをすべて更新したい ACCESSでデータ入力ができるようにフォームを作成しました。 わりと頻繁に同じ様な内容のデータを入力することがあり、レコードのコピーをボタンウィザードのレコードの複製を使わず、選択しているレコードで必要な部分のみをコピー用に用意したテーブルに追加して、追加したテーブルから元のテーブルに追加するというマクロを作成しました。 テーブルにはデータは追加されているのですが、フォーム上には「F5キー」やメニューの「すべて更新」ボタンをクリックしないとフォーム上に現れません、マクロ「再クエリ」や「コマンドの実行」-「最新の情報に更新」を入れてみましたが、「F5キー」やメニューの「すべて更新」ボタンをクリックした時のような動作はしてくれませんでした。 どういったマクロを作ればよいかご教示いただけないでしょうか。 緒ろしくお願いいたします。 ACCESS 2007を使っています

  • アクセスの追加クエリで教えてください。

    非連結のフォームから、追加クエリを使ってテーブルにデータを追加したいのですが、 どうもうまくいきません。 具体的には、 履歴フォーム、というフォームで、 日付 施設名 内容 という項目があります。 追加クエリで、 [Forms]![履歴フォーム]![日付] のようにほかの項目も入力し、 その保存先は、 履歴テーブル、で、 項目は、履歴フォームと同じです。 履歴フォームにデータがまったく入っていない状態ですと、 追加クエリを実行した際、 0件のデータを追加します。となります。 自分でテーブルに直接データを何か入力すると、 次に追加クエリを実行した際、 1件のデータを追加します。となります。 続いて追加クエリ実行の際には2件、 その次は4件追加と、 テーブルに入っているデータの件数だけ、 そのときにフォームに入力されている情報が、追加されてしまいます。 どのような原因が考えられますでしょうか? お知恵を貸していただけたらと思います。 情報が不十分でしたらご指摘願います。 補足いたしますので。 それでは、よろしくお願いいたします。

  • アクセス初心者^^; フォームで追加入力したら、クエリは?

    アクセスの初心者です。 1 追加のデータをフォームから入力したら、テーブルは自動的に追加されていましたが、それに関連した既存のクエリには自動的に追加されないようですが?反映させたい場合にはどうすればよいでしょうか。 2 また、テーブルとクエリとフォームの関係を簡潔に教えていただけたらと思います。

専門家に質問してみよう