• ベストアンサー

access フォーム間で情報が引き継がれない

初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 請求管理のシステムを作っています。 テーブルには 顧客マスタ(主キーは顧客番号でテキスト型 例:0001等) 請求マスタ(主キーは請求番号でテキスト型 例:A0001等) 明細マスタ(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客マスタ(1)→(多)請求マスタ(1)→(多)明細マスタになっています。 顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に 飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を 引っ張っていくようにしたいのですが、うまくいきません。 ちなみに顧客マスタと請求マスタのリレーションは”顧客番号”でつなげています。 請求書作成フォームは請求書作成クエリから成り、 その中で顧客番号(テーブル:顧客マスタ)の抽出条件に[Forms]![顧客入力フォーム]![顧客番号]と 入れて”顧客番号つながり”で飛ぶようにしているのですが、 請求書作成フォームは開くのですけど、項目はすべて空白です。 またいろいろレコードを追加している内に、請求番号が既にあるものに対しては顧客情報も引き継がれることが判明しました。 構文が間違っているのでしょうか? 混乱しています、お助けください。

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

  • ベストアンサー
noname#182251
noname#182251
回答No.3

上手く行かない理由は#1に示されたとおりなので、登録完了後に請求書作成フォームを開けば良いわけです。つまり「請求書作成ボタン」で、まず登録、そしてフォームのオープンとする。 しかしそれよりもサブフォームの使用をお奨めします。 顧客入力フォーム→請求書作成フォーム→請求書明細フォーム を、親子孫の入れ子にして使えば、関連づけや、親から子へフォーカスが移動した際の親レコード登録など、すべてアクセスが面倒を見てくれます。1行のVBAも必要ありません。 詳しくはヘルプで「サブフォーム」を質問し、色々調べてください。

23tomo-u
質問者

お礼

回答ありがとうございます! 何とかクリアしました。 原因は作り込みすぎてフォームやクエリが乱立して 僕が混乱していたようです。整理したら [Forms]![顧客入力フォーム]![顧客番号]でいけました。 (最新の情報に更新するボタンも作りました) ただ違う問題が発生したので、それは別件で載せます。 もしよければ拝見してください。 ありがとうございました。

その他の回答 (2)

noname#140971
noname#140971
回答No.2

顧客番号の読み________[すずき いちろう______] 請求マスタ_顧客番号___[0001][鈴木一郎_______] ※普通は、フォーム[請求台帳]に[読み]を入力をユーザに促します。 ※で、見つかったら[請求台帳_顧客番号]を更新。 ※で、新規顧客であればフォーム[顧客マスタ]をオープン。 ※新規顧客を登録したらフォーム[顧客マスタ]をクローズする時に[請求台帳_顧客番号]を更新。 ******************************************************************************************* 顧客マスタ: [顧客番号]_[顧客名]_____[読み] 0001________鈴木 一郎____すずき いちろう 0002________中村 主水____なかむら もんど 請求台帳: [請求番号]_[請求日]____[顧客マスタ_顧客番号] A0001_______2008/06/18__0001 A0002_______2008/06/16__0002 請求明細: [明細番号]_[請求台帳_明細番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2___A0001____________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4___A0002____________________2___B________\200______1 で、[請求明細]![行番号]抜きの設計だと思います。 1行目が削除されたりした時の[行番号]の更新要領が不明ということで[明細番号]で対応。 さて、一番簡単なのは、クエリも何も用意しないでフォームをウイザードで生成。 1、[得意先マスタ]------------->フォーム[得意先マスタ] 2、[請求台帳]と[請求明細]----->フォーム[請求台帳][請求明細サブフォーム] で、この状態+アルファのフォーム[請求マスタ]を表示。 ================================================================= 請求番号____________[A0001] 請求日______________[2008/08/18] 請求台帳_顧客番号___[0001][鈴木一郎_______] ----------------------------------------------------------------- [明細番号][請求台帳_請求番号][行番号][商品名][単価_][数量] [_______1][A0001____________][_____1][A_____][[\100][___1] [_______2][A0001____________][_____2][B_____][[\200][___1] ----------------------------------------------------------------- ================================================================= 確かに、[請求台帳_顧客番号]に対応する[顧客名]が表示されています。 このやり方が、一番手っ取り早くて手間要らずです。 では、その仕掛けを見てみます。 <フォーム[請求台帳]のコード> Private Sub Form_Current()   顧客情報表示 End Sub Private Sub 顧客マスタ_顧客番号_AfterUpdate()   顧客情報表示 End Sub Private Sub 顧客情報表示()   Dim strWhere As String   strWhere = "顧客番号='" & Me.顧客マスタ_顧客番号 & "'"   Me.顧客名 = DBLookup("顧客名", "顧客マスタ", strWhere) End Sub Form_Current()と顧客マスタ_顧客番号_AfterUpdate()で顧客情報表示()をコールしています。 コールされた顧客情報表示()では、入力されている[顧客マスタ_顧客番号]を手掛かりに顧客情報を参照表示。 >請求書作成フォームは開くのですけど、項目はすべて空白です。 つまり、上記の顧客情報表示()をコールをクエリは代行している訳です。 ならば、未入力ならば空白も当然だし既存のレコードは表示されます。 ******************************************************************************* フォーム[顧客マスター]参照方式は色々と・・・。 で、請求台帳クエリで参照すれば、ウイザードの利用で色々と・・・。 ******************************************************************************* で、チクット、数行のVBAを組めば万事解決。 老婆心ながら、このまま突き進むと???と思った次第です。 なお、必要とあらば DBLookup関数は紹介します。

23tomo-u
質問者

お礼

回答ありがとうございます! 何とかクリアしました。 原因は作り込みすぎてフォームやクエリが乱立して 僕が混乱していたようです。整理したら [Forms]![顧客入力フォーム]![顧客番号]でいけました。 (最新の情報に更新するボタンも作りました) ただ違う問題が発生したので、それは別件で載せます。 もしよければ拝見してください。 ありがとうございました。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

>請求書作成フォームは請求書作成クエリから成り、 >その中で顧客番号(テーブル:顧客マスタ)の抽出条件に >[Forms]![顧客入力フォーム]![顧客番号] >と入れて”顧客番号つながり”で飛ぶようにしているのですが、 >請求書作成フォームは開くのですけど、項目はすべて空白です。 新規顧客を入力した直後ならその顧客に対する請求書は存在しないはずですから当然ですね >顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 >「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に >飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を >引っ張っていくようにしたいのですが、 フォームを開くときに値を渡したいときにはOpenArgs 引数を使用します 詳しくはヘルプを見てください 別件 マスタというのは半固定的な基礎データを集めたテーブルのことです 請求書やその詳細は反対の活動記録(トラン)ですからマスタというネーミングはおかしいですよ

23tomo-u
質問者

お礼

回答ありがとうございます! 何とかクリアしました。 原因は作り込みすぎてフォームやクエリが乱立して 僕が混乱していたようです。整理したら [Forms]![顧客入力フォーム]![顧客番号]でいけました。 (最新の情報に更新するボタンも作りました) ただ違う問題が発生したので、それは別件で載せます。 もしよければ拝見してください。 ありがとうございました。

関連するQ&A

  • access 請求番号の自動採番

    まったくわかりません! よろしくお願いします。 仕様環境 WinXP  access2002 顧客管理のシステムを作っています。 テーブル 顧客テーブル(主キーは顧客番号 テキスト型) 請求テーブル(主キーは請求番号 テキスト型) 明細テーブル(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客テーブル(1)→(多)請求テーブル(1)→(多)明細テーブルになっています。 顧客情報を入力するフォームを作りました。 主キーは顧客番号(テキスト型,入力モードON,インデックス いいえ)で 他のテキストボックス(例えば名前)に何かしら文字を入力すると自動で顧客番号を採番してくれます。 例:0001 0002 0003~ そしてそのフォームから請求書作成フォームに飛ぶように 「請求書作成ボタン」を作り、顧客情報も一緒にひっぱっていってくれる 請求書作成フォームを作りました。(入力したばかりの情報も最新の情報で更新してくれます。) ・・請求書作成フォームはサブフォームを使い3つのテーブルからなっています。・・ 親フォーム:顧客テーブルから。 子フォーム:請求テーブルから。 孫フォーム:明細テーブルから。 主キーは請求番号で(テキスト型,入力モードON,インデックス はい(重複なし)) 他のテキストボックス(例えば請求日)に何かしら入力すると自動で請求番号を採番してくれます。 例:A0001 そこで問題なのですが、顧客情報は入力する度、次々自動で採番してくれるんですが、 請求番号は一番最初のレコードの”A0001”だけ採番してくれて、 新しいレコードで請求書を作ろうとテキストボックスに文字を入力すると「型が一致しません」というエラーが出ます。 ○ エラー内容 アクションエラーの実行 条件 true アクション名 値の代入 引数 [請求番号],Format(DMax("請求番号","請求マスタ")+1,"A0001") マクロは・・(参考書を参考にしています、マクロ名:自動採番マクロ) ------------------------------------------------- 条件 : DCount("請求番号","請求テーブル")=0 アクション : 値の代入 アイテム  : [請求番号] 式     :"A0001" ------------------------------------------------- 条件    : ... アクション : マクロの中止 ------------------------------------------------- アクション : 値の代入 アイテム  : [請求番号] 式     : Format(DMax("請求番号","請求テーブル")+1,"A0001") ------------------------------------------------- となっています。 念のため、主キーの入力モードを切り替えたり、式の"A0001"を単純に"1"にしたりしましたが、 請求番号はエラーが発生します。 原因がまったくわかりません。 よろしくお願いします!

  • Accessでのフォーム入力エラー

    顧客管理を 顧客マスタ 受注明細 入金明細のテーブルを作成し、リレーションシップの設定をしてあります。テーブルには、この形で入力できるのですが、フォームをウィザードを使って作成(サブフォームのリンクされたフォーム)しました。 新規入力することができません。「テーブル’顧客マスタ’にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更をおこなうことはできません。」のメッセージが出ます。 どうしていいのか、わかりません。教えてください。

  • access 絞込みフォーム

    初心者です、よろしくお願いします。 仕様環境 WinXP access2002 請求管理のフォームを作っているのですが、壁に当たっています。 メインとサブのフォームがあってメインは顧客情報を 乗せています。サブにその顧客の簡単な請求履歴をのせています。 更に詳しくみるために別に「請求明細フォーム」というものを設けています。 これは請求書の内訳がのっています。 さてサブフォームの話ですが、このようになっています↓(簡単に書いてます)        請求番号   「詳細ボタン」 A0001   「詳細ボタン」 A0002      「詳細ボタン」を押すことにより、該当する請求番号の請求明細フォームに 飛ぶようにしたいのですが、うまくいきません。 パラメータを使えばできたのですが、パラメータを使わず、 ボタンを押すと該当する請求明細フォームに飛びたいのです。 請求番号に該当する情報だけ載せた請求明細フォームに飛ぶにはどうすれば よいのでしょうか?ちなみに請求明細フォームはクエリを返しています。 誰かお知恵をおかしください!

  • ACCESSでデーフル作成入力フォームで入力しながら、クエリのデータを参照したい

    ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリを作成し、明細に対応する顧客情報は顧客情報検索というクエリで作成済みです。入力フォーム画面の非連結のフィールドのプロパティのコントロールソースに =DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD]) と表記しましたがエラーになります。 最初はコントロールソースに直接顧客情報検索クエリの顧客名フィールドを表記し、フォーカス取得時にクエリを開くマクロを実行していました。でもやはり表示されませんでした。 顧客名の設定をどのように設定すればいいのですか? コントロールソースでの設定だけでは無理なのでしょうか? よろしくお願いします。

  • Access2000 単票フォーム上のボタンを押すと、同じIDを持つフォームが開くよういしたい

    Accessの初心者です。 本当に超がつく初心者ですので、解説もしてくださるととても嬉しいです。 宜しくお願いします。 請求書番号連番を取得するフォーム(テーブルも)があります。 請求書番号は特殊な為、現時点ではじか打ちで作成しています。 それとは別に、顧客ごとに請求データを入力するフォーム(テーブルも)があります。 その二つは、請求書番号でひもづけています。 <請求書番号連番取得フォーム/帳票> ・請求書番号 ・請求日 ・顧客ID <請求データの入力フォーム_A社/単票> ※これがB社、C社と複数存在します。 ・顧客ID ・請求書番号 ・商品CD <請求書番号連番取得フォーム/帳票>上にボタンをつくり、そのボタンを押すと、 同じ顧客IDを持つ<請求データの入力フォーム/単票>が開けたらな・・・と思っているのですが、 わかりますでしょうか・・・・。 どうか、宜しくお願い致します。 <請求書番号連番取得フォーム/帳票> _________________________________________________________________ 請求書番号|請求日 |顧客ID|  _________________________________________________________________ 09BB87ZZ1|2009/04/01|0001 |■(ボタン) -------------------------------------------- 09BS87AA2|2009/04/10|0003 |■(ボタン) -------------------------------------------- ↑この1行目の■(ボタン)を押すと、顧客ID「0001」の請求書番号「09BB87ZZ1」の単票フォームが開き、 (請求書番号欄に「09BB87ZZ1」が入っている。) 2行目の■(ボタン)を押すと、顧客ID「0003」のフォームを開く・・・というような動きです。 説明が下手で申しわけありません。 お願いします。

  • Access アクセスについて

    Accessでデータベースを作っています。 テーブル、クエリは下記のようになっており、リレーションシップで紐付けしてあります。 クエリからフォームを作成し、商品番号を入力することでマスタテーブルに登録されていれば自動で商品名等の情報が表示されるようになっています。(フォーム1) 商品番号を入力しカーソルが移動した時、マスタテーブルに該当する項目がなかった場合、マスタテーブルから作成した新規追加用のフォームが表示されるようになっています。(サブフォームではありません) 新規追加用フォームに商品名を入力し、閉じてもフォーム1の商品名の欄に反映されません。新規追加用フォームを閉じる時にVBAで”Requery”,”Refresh”もやってみましたがダメでした。商品番号を入力し直すと表示されます。 どうすれば自動で商品名が表示されるようになるか教えてください。 テーブル1(入力用) 1.ID(主キー) 2.商品番号 3.etc. テーブル2(マスタテーブル) 1.商品番号(主キー) 2.商品名 3.etc. クエリ 1.ID(テーブル1) 2.商品番号(テーブル1) 3.商品名(テーブル2) 4.etc.(テーブル2) 5.etc.(テーブル1)

  • アクセスフォームのコマンドボタン複写がうまくいきません

    主キーはオートナンバーで、顧客は個人ごとに番号を決めて作成中です。これをフォーム上のコマンドボタンで複写しようとすると、顧客番号が1件のみであればいくらでも複写ができるのですが、2件目からは複写できずエラーとして関係のないテーブルが作られてしまいます。なぜ複写できないのかわかりません。初心者なのでよろしくです。

  • アクセスでのテーブル構成と入力フォームについて

    アクセスで悪戦苦闘しています。 どなたかお力を貸してくださいませ 下記の内容を入力するフォームを作成しています (後に決められた形式で出力します) 工事番号 部門 工事名 契約日 発注者 住所 電話 FAX メール 担当者 弊社担当者 請求書番号 請求日 請求金額 請求書番号2 請求日2 請求金額2 請求書番号3 請求日3 請求金額3 請求書番号4 請求日4 請求金額4 請求書番号5 請求日5 請求金額5 請求合計(1~5の合計額) 回収日 回収額 回収額合計 回収日2 回収額2 回収額合計2 回収日3 回収額3 回収額合計3 回収日4 回収額4 回収額合計4 回収日5 回収額5 回収額合計5 注文書 有・無 完了(済・未) ...他省略 上記の内容で下記のようにテーブルを作成しました ◎工事マスタ 工事番号(主キー)/部門コード/工事名/契約日/注文書 有・無/**発注者/**住所/**電話/**FAX/**メール/**担当者/社員コード…以下略 ◎部門マスタ 部門コード(主キー)/部門名 ◎社員マスタ 社員コード(主キー)/弊社担当者 ◎請求マスタ 請求ID(主キー)/請負額/税/合計/請求書番号/請求日/請求金額 請求書番号2/請求日2/請求金額2/請求書番号3/請求日3/請求金額3/請求書番号4/請求日4/請求金額4/請求書番号5/請求日5/請求金額5/請求合計(1~5の合計額)/回収日/回収額/回収額合計/回収日2/回収額2/回収額合計2/回収日3/回収額3/回収額合計3/回収日4/回収額4/回収額合計4/回収日5/回収額5/回収額合計5 完了(済・未) リレーションシップ 工事コード...工事マスタ(1)請求マスタ(∞) 社員コード...社員マスタ(1)工事マスタ(∞) 部門コード...部門マスタ(1)工事マスタ(∞) に設定しました ウィザードを使って請求マスタの全項目を入れた単票フォーム(サブA)を作成 ウィザードを使って工事マスタの全項目が入った(クエリA)を作成し それをもとに、ウィザードを使って(フォームA)を作成し、サブフォームに(サブA(単票))を設定しました。 一応どうにか形にはなりましたが 本当は工事マスタ内の**がついているフィールドは 顧客マスタとして分けていたのですが フォームでうまく入力ができなかったので とりえず、工事マスタにくっつけています。 何度も同じ電話や住所を打つのは面倒ですし、 テーブルを一つにしたこと自体抵抗があります。 しかし、同じ発注者でも、工事によって担当者が変わるので こういう場合はどう対応するべきなのかわかりません。 また、顧客マスタを別につくり、 コンボボックスにして 反映させるという方法も試してみましたが 新規に入力する場合は、上記のフォームにそのまま 入力したいと思っています。 上記の内容で どのような設定をすればよいのでしょうか? ウィザードでで顧客マスタと工事マスタを選択したクエリを作成して試してみたのですが それだと、フォームを開いたときに、工事マスタの既存のレコードが表示されなかったり、入力エラーが出たりとどうもうまくいきません。 もうひとつの問題は請求日と回収日なのですが それは別途質問させていただきたいと思います。 説明下手ですが どなたかお力を貸してくださいますようお願いいたします

  • Access マスターテーブル

    Accessについて。 テーブル1がID(主キー)、注文日、商品番号、納期など入力欄の項目で、テーブル2が商品番号(主キー)、商品名で商品のマスターテーブルになっています。 商品番号を入力すれば商品名が表示されるようにクエリを作成し、そのクエリからフォームを作っています。 ここまでは良いのですが、新しい商品番号を入力したときに限りフォームから商品名も入力する事でマスターテーブルに登録されるようにしたいのですが、どうすれば良いでしょうか?

  • Access2002 フォームからのレコード入力の成功/不成功

    いつもお世話になっております。 早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。 従業員マスタテーブルは、「社員番号」だけをキーにしています。 例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。 また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。 しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えますが、実際の従業員マスタテーブルをチェックしてみると、変更はされていません。 ですので、フォームしか触れないユーザは、自分の変更、新規追加がうまく行ったのかどうか、テーブルが見られないのでわからない、という状況になっています。 仕様要求としては、新規であれ、情報変更であれ、既存の社員番号に重なる場合はメッセージボックスで「更新失敗」を表示したいのです。 If Exist・・・のような分岐を情報を入力するフォームの「閉じる」ボタンの裏に設けたいのですが、やり方がイマイチわかっておりません。 ご存知の方がいらっしゃれば、ご教授、よろしくお願いします。 --------------------------------------------------------------- <従業員マスタ> ・社員番号・・・テキスト ・氏名・・・テキスト <仕様要求> 社員番号「0001」と「0002」の社員が存在する場合・・・ ・情報入力画面で、「0001」の社員の社員番号を「0002」に変更しようとすると、エラーメッセージ表示 ・新規情報入力(新入社員など)の際、社員番号が「0001」や「0002」の社員として登録しようとすると、エラーメッセージ表示 以上、お時間のあるときによろしくお願いします。