- 締切済み
accessでフォーム上での計算結果をテーブルに反映するには?
教えていただきたいのですが、アクセス2000で、フォーム上に「業者コード」を入力すると、別テーブル「T_業者」より業者名、業者電話番号、業者住所、業者FAX番号がフォーム上の非連結オブジェクトに表示されるようにDLOOKUP関数を使っています。この非連結オブジェクトの業者名~業者FAXを基礎テーブルの同じ項目に保存することは出来ますか?またDLOOKUP関数をクエリー上で使用することが出来ますか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
>ありがとうございます。ただ内容が難しすぎて理解出来ません。 当然のことです。 ですから、理解される必要はありませんし、今の考え方は<マズイ>です。 <では、どうするのか> ANo2さんの示唆されている方向を具体的に実現していくことです。 業者一覧: ID__業者コード__社名___________読み___________________郵便番号__住所______TEL_______________FAX 01__101__________新日本商事__しんにほんしょうじ__111-1111__東京都__111-111-1111__111-111-9999 02__102__________安心商事_____あんしんしょうじ_____111-2222_東京都___222-222-2222__222-222-9999 取引履歴: ID__年月日_________業者_ID 01__2008/02/25__________1 02__2008/02/26__________2 通常、業者一覧は、取引先マスターの一つとして上述のような設計で用意します。 この手のテーブル情報は、日々の取引データを記録するテーブルでは参照のために必要な情報のみ記録。 上述の例では、主キーである[業者一覧].[ID]を[取引履歴].[業者_ID]に記録しています。 これで、[業者一覧].[業者コード]の入力ミスや更改があっても、テーブルのリンクそのものへの影響は回避できます。 さて、こういう[取引履歴]でもレポートに出力するには十分です。 取引履歴クエリ: 取引履歴.ID__年月日__________業者コード__社名___________TEL________________FAX______________ 01_______________2008/02/25__101___________新日本商事__111-111-1111__111-111-9999 02_______________2008/02/26__102___________安心商事_____222-222-2222__222-222-9999 SELECT 取引履歴.ID, 取引履歴.年月日, 業者一覧.業者コード, 業者一覧.社名, 業者一覧.TEL, 業者一覧.FAX FROM 業者一覧 RIGHT JOIN 取引履歴 ON 業者一覧.ID=取引履歴.業者_ID; このように、いかようにもテーブルを結合参照することで[取引履歴]に[業者一覧]を反映させることが可能です。 >別テーブルにはT_業者の主キーだけを連結キーとして取り込みます >他のフィールドを取り込んではいけません >Accessにはもっと強力なクエリというものがあります 多分、ANo2さんは、こういう事を言っておられるのだと思います。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>別テーブル「T_業者」より業者名、業者電話番号、業者住所、業者FAX番号 こういうテーブルがあるのなら 別テーブルにはT_業者の主キーだけを連結キーとして取り込みます 他のフィールドを取り込んではいけません >非連結オブジェクトに表示されるようにDLOOKUP関数を使っています。 これもまずいですね Excelでは他の表を参照するのにこういう関数を使いますが Accessにはもっと強力なクエリというものがあります フォームのソースを「T_業者」を結合したクエリにすれば 「T_業者」の全てのフィールドが表示でいるようになります >DLOOKUP関数をクエリー上で使用することが出来ますか? できますが・・・ データベースというものを勘違いしておられるみたいですね 表計算のExcelと同じように考えておられるようですが 両者は全く異なるジャンルのソフトです Excelの延長で考えていたのではデータベースは理解できません テーブルの作り方、リレーションシップ、参照整合性、クエリ などについて勉強してください
q1、非連結オブジェクトの業者名~業者FAXを基礎テーブルの同じ項目に保存することは出来ますか? a1、基礎テーブルのレコードを一意に確定する情報があれば可能です。 しかし、参照すれば済むデータを重複して持つ設計はマズイと思います。 UPDATE 基礎テーブル SET 業者名='AAAA', 業者電話番号='BBBB' ・・・WHERE XXXX=XX というSQL文を Replace関数でフォーム情報と置換。 SQL文実行関数 SQL文 というやり方もありますし、他の方法もあります。 q2、またDLOOKUP関数をクエリー上で使用することが出来ますか? a2、可能です。 しかし、余り、クエリーではこの手の関数は多用されない方がいいです。 多くても数個程度が良いと思います。
お礼
ありがとうございます。ただ内容が難しすぎて理解出来ません。基礎テーブルのレコードを1意に確定する情報とは具体的にどのようなことでしょうか?また、業者名~業者FAXは重複して持っているデータでは無く、フォーム上で入力したデータをテーブルの各項目に保存したいのです。業者名や業者のその他のデータをその都度入力するのが手間なので、業者コードを入力すると業者のデータが入り、そのデータをテーブルに保存出来ればレポート上で業者別のデータを打ち出すことが出来るかと思っております。アクセス初心者です。よろしくお願いします。