• 締切済み

Accessのフォームで任意のレコードを表示させる方法

MS-Accessでの質問です。 帝国やTSRのような企業情報を基にしたT1_企業情報テーブルを作成し、それを元にクエリーやフォームを作成しました。 フォームは企業情報を網羅するもの(F1)と、取引情報を記入する為のもの(F2)です。 F1にはF2が開くようにするボタンを作りましたが、例えばF1で「00100」番の企業を表示していて、その企業との取引情報を入力しようとボタンをクリックしても、いつも必ず「00001」番目の企業が開いてしまいます。(最初のレコード) これを「00100」番目の企業が開くようにするにはどうすれば良いのでしょうか? 文字数制限があるのでより詳しい説明は補足でご説明致します。宜しくお願い致します。

みんなの回答

  • SAKUJOU
  • ベストアンサー率26% (93/354)
回答No.8

ちょっと時間が経ちましたが、もう解決しちゃいましたかね? F2が開くようにするボタンのプロシジャに以下を追加すればいいと思います。 DoCmd.GoToRecord , , acGoTo, Forms!F1.Form.CurrentRecord いろいろ考えましたがこれが一番簡単かと。

参考URL:
http://www.tsware.jp/index.htm
skyhawk
質問者

補足

返事が遅くなって申し訳ありませんでした。 その後依頼者にはサブフォーム内で表示させればレコードがずれないので その方法を試すようにとアドバイスするに留まっていますが、当人は 一応それで納得しているようです。 ご教示頂いた方法を試みているのですが、これはF1内に配置している F2を開く為のボタンに追加するのですよね? ボタンのプロパティでコマンドボタンのイベントのクリック時に "F2を押す"となっていて、アクションが今は「フォームを開く」に なっているのを「プロシージャーの実行」を選択してプロシージャー 名の所に教えて頂いた式を書き込んでみました。 F1フォームを開いて件のボタンをクリックしたら 「式の中で'DoCmd'が参照されているため、1つ以上の式の検証に 失敗しました。Accessをサンドボックスモードで実行している場合、 安全とみなされる関数とプロパティだけが式の中で許可されます。」 と表示されてしまいました。

全文を見る
すると、全ての回答が全文表示されます。
  • SAKUJOU
  • ベストアンサー率26% (93/354)
回答No.7

>具体的なやり方を教えて頂ければ助かります。 少々時間を下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • SAKUJOU
  • ベストアンサー率26% (93/354)
回答No.6

今までのことをまとめますと、テーブルは2つになっているが、表示する項目がおおいので、フォームを2つに分けて、それぞれ表示したときに同じレコードを表示したいということでしょうか? この場合はF1を表示した時にレコード番号を記憶させておいて、F2を開いたときに、GOTOレコードで移動させればいいのではないでしょうか?

skyhawk
質問者

補足

>>今までのことをまとめますと、テーブルは2つになっているが、表示する項目がおおいので、フォームを2つに分けて、それぞれ表示したときに同じレコードを表示したいということでしょうか? その通りです。 >>この場合はF1を表示した時にレコード番号を記憶させておいて、F2を開いたときに、GOTOレコードで移動させればいいのではないでしょうか? 具体的なやり方を教えて頂ければ助かります。

全文を見る
すると、全ての回答が全文表示されます。
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.5

>これは取引内容の一件一件を記録するものではなく、 データベースなのに? せっかくの貴重なデータを捨ててしまうのですか? それに1対1のテーブルというのは特殊なものです 普通はひとつのテーブルにします 疑問いっぱいのシステムですが どうしても1対1のままやりたければやはり サブフォームが一番、それもいやなら この前回答したように、F2にF1の企業コードを抽出条件として渡せばいいでしょう

skyhawk
質問者

補足

仰る通りです。AccessはリレーショナルDBとして使ってこそ有効に使えるのは 私自身も解っております。 これらのテーブル(T1とT2とすると)は各々の主キーが同じですので、 クエリーで繋げて表示させればExcelの一つのシートのように全項目を表示します。 ですがユーザーがどのように使うのかまでは強制する筋合いはありませんので、 そのように使いたいと言う希望ですので何とか方法を考えている次第です。 >>せっかくの貴重なデータを捨ててしまうのですか? 別に当人はデータを捨てるつもりなんて無いと思いますが? 私は当人にはこんな事は言えませんが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>ですので、出来ればサブフォームを使うのではなく、 >F2単体を起動させてもF1で表示していた企業コードと同一の企業コードがF2でも開く方法 ということならF2のソースをF1の企業コードを抽出条件とするクエリにしてやればいいだけでは F2のソースの企業コードフィールドの抽出条件欄に =Forms!F1!企業コード ただし >T1とT2の主キーは「企業コード」です。 これはおかしいですよ T1とT2は1対多でないとだめなのですから T2の主キーは企業コードともうひとつのフィールドの2つで主キーにします でないとT2には1企業1レコードしか格納できなくなってしまいます

skyhawk
質問者

補足

>>ただし >>T1とT2の主キーは「企業コード」です。 >>これはおかしいですよ >>T1とT2は1対多でないとだめなのですから ご説明が足りずに誤解を招いてしまいました。 これは取引内容の一件一件を記録するものではなく、 公開されている(又は入手した)大規模な企業データを 利用しつつ、そこに1対1でオリジナルのデータを付け加えている ようなものです。 ですのである企業に対して取引内容が何万件と溜まって行くような 性質のものでは無いとの事です。

全文を見る
すると、全ての回答が全文表示されます。
  • SAKUJOU
  • ベストアンサー率26% (93/354)
回答No.3

勘違いしました、考え方はNo.2さんのが正しいです。 フォームF1とF2では扱うテーブルは別々ですか? それとも同じ1つのテーブルを扱うのですか?

skyhawk
質問者

補足

企業情報が入っているテーブル = T1 で、 取引情報を入力するテーブル = T2 です。 T1とT2の主キーは「企業コード」です。 クエリーはT1とT2の主キー同士を結合しています。 F1はT1の、F2はT2の項目を各々表示・入力・編集させる為のものです。 F1にF2を表示(起動)させる為のボタンが設けてあり、これをクリックしてF2を表示させた時に、それまで見ていたF1と同じ企業が表示されないので、毎回F2の下の所のレコード番号の数字を直して表示させているので、F1と連動して同じ企業がF2でも開くようにならないものか?という質問です。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

考え方がおかしいみたいですよ F2に入力するのは取引情報ですよね 新しい情報を入力するときにはF2にはまだ入っていないんじゃないの 目的の企業を表示してもそれは過去のレコードですよ こういう場合にはF1にサブフォームとしてF2をはめ込みます 企業番号でリンクしておけば F1で企業を選べばその企業の取引情報の一覧が表示されますし 新規レコード欄には企業番号がすでに入力されて表示されます

skyhawk
質問者

補足

ご回答有難うございます。 確かに仰る通りです。実は件のデータベースは別の方が作成したものです。 その方から質問され、私自身も色々と試してみましたが、同一企業コードの企業情報と取引情報を入力するには、F1の中にサブフォームを作成すれば良い事は分かります。 但し問題なのが、現在作成されているF1フォームに表示されている項目数が非常に多く、F1の中でも画面中段から下にタブコントロールを数枚設けて、その中に様々な情報を表示させているような状況です。 因みにF1で表示させている項目はT1(企業情報)のデータです。 T2の取引情報の内容をF2に表示させている状態です。 T2の項目数も非常に多い為、F2で表示されている項目もタブ2枚に分けているような状態です。 つまり、F1の下半分にF2をサブフォームで埋め込むのが常套手段なのでしょうが、項目数があまりにも多い為に、F1フォームにF2フォームを起動させるボタンを作ったのだけれども、F1で「丙」という企業を表示させていて、その企業との取引情報を入力しようとボタンを押してもいつも「甲」という企業が出てきてしまうので、何とかならないか?という質問なのです。 文字数制限の関係上、細かいポイントまでご説明出来ず済みませんでした。 ですので、出来ればサブフォームを使うのではなく、F2単体を起動させてもF1で表示していた企業コードと同一の企業コードがF2でも開く方法を教えて頂けないか?という事になります。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • SAKUJOU
  • ベストアンサー率26% (93/354)
回答No.1

ボタンに、以下を実行させてはだめですか? Private Sub ボタン_Click() DoCmd.GoToControl "企業コード" DoCmd.FindRecord クエリ, acAnywhere End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessフォームの新規レコードについて

    いつもお世話になっています。 Access2000でフォーム作成をしているときにちょっと詰まってしまいました。 クエリからフォームの作成を行うと、フォームの新規レコードの追加ができないんです! テーブルからフォームを作成する場合は新規レコードの追加は可能でした。 クエリがあるとどうしても新規レコードの追加ができなくなってしまいます。 クエリからフォームを作成して、新規レコードの追加を行えるようにすればどうしたらいいんでしょうか? よろしくお願いします。

  • Accessでフォームからレコードの追加について

    Access2016をWindows10で利用しています。 あるテーブルの単票形式のフォームをフォームウィザードから作成しました。 入力規則などがテーブルの各列の設定に沿って作成されていてとても便利なのですが、フォームにいくつか値を入れた時点でレコードが新規追加されてしまいます。 レコードの追加を、すべての入力が終わって「新規追加」ボタン(あとから自分で作成)を押してから行いたいです。 レコードウィザードを使わずにフォームを作成し、フォームの値とクエリを結び付けてボタン押下時にクエリを実行する、というフォームにすれば実現できると思うのですが、それはなかなか手間がかかってしまうので出来るだけ簡便に実現できたらと考えています。 細かい話なので参考ページ、あるいはヒントになる検索キーワードを教えていただけないでしょうか m(‗ ‗)m ?

  • ACCESS2007 フォームにて複数のレコードのフィールド表示

    ACCESSの初心者です。よろしくお願いいたします。 こういったことはできるのか?という疑問がありまして、一つ質問をさせていただきたいのです。 【やりたいこと】 一つのフォームにて、8人分のデータを表示させる画面を作成したい。 通常、フォームでは1レコードずつめくっていくようになっていますよね。 最初は1~8までの人(レコード)の情報を、次にボタンを押すと9~16までの人(レコード)の情報を表示させる。このようにボタンを押すごとに特定の数のレコードを表示させるフォームができるかということです。 おわかりの方、どうか教えていただきたく、お願い申しあげます。

  • 【Access2000】レコードの抽出方法

     Access2000を使用してデータベースを作成していますが、抽出条件でつまずいています。  具体的には、  【1】選択クエリーAを基に作成したフォームA(単票形式でレコードを1件ずつ表示)があります。  【2】フォームAの中に単票形式でレポートを出力するマクロボタンが有。  【3】現在はマクロボタンを押すとパラメータで「データNo.?」と入力してもらう形になってレコードを1件抽出する形になっています。    ※画面上に表示されている「データNo.」フィールドの数値を入力してもらう形です。  質問についてですが、今のところはパラメータを入力してもらいレコードを抽出→レポートを出力していますが、パラメータを使わず、現在、フォーム上に表示されているレコード(表示されている1件)を抽出する方法はないかと壁にぶち当たっています。  言い換えれば、レポートを出力する際の元になるクエリの抽出条件で「現在、表示されているレコード」をどのように記述すればいいか、もし御存知の方がいらっしゃいましたら御教示お願いいたします。

  • フォーム上でレコードの非表示

    どなたか教えて下さい。テーブルからフォームを作成したのですが、下のレコードの表示を非表示にする方法を教えて下さい。フォームヘッダー等を色々調べましたが、どうしても一番下にレコード(レコードの数、次に進むボタン等)が表示されてしまいます。よろしくお願い致します。

  • Accessのフォーム上にレコード数とレコード番号の表示

    Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。 フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。 以上よろしくお願いします。

  • 【ACCESS】フォームのレコードソースのクエリを動的に書き直したときの、フォームの再描画

    ACCESS2002 帳票フォームのレコードソースにクエリを指定しています。 フォーム上のコマンドボタンを押したイベントで、その レコードソースとしているクエリのSQLを書き直しています。 問題は、その書き直したクエリをもとにして画面をもう一度 表示させなおしたい(リフレッシュさせたい)ということです。   docmd.close acForm,"フォーム名"   docmd.open "フォーム名" とすると、書き直したクエリの内容でフォームが表示されます。 フォームを閉じる→フォームを開くとしないで、フォームを リフレッシュさせる方法はないのでしょうか?

  • ACCESS2007 レコード位置の表示

    よろしくお願いします。 サブフォームのあるフォームを作成しましたが。 標準の移動ボタンはメインフォームのデータ領域から離れた位置にあります。 同じ情報を データ領域の近くに配置したいのですが、 レコード情報(レコード位置/レコード総数)はどのようにしますか

  • ACCESS2000でクエリで抽出したレコードをフォームに表示するには

    A顧客テーブルで作成したフォームからコマンドボタン(電話番号検索)押下時に 電話番号入力画面が出て入力した電話番号とマッチした顧客レコードをフォームに 表示させたいのですが上手く出来ません。 現在進めている方法では何がダメなんでしょうか(以下は考え方) A顧客テーブルから作成したフォムに電話番号コマンドを作成してコマンドを 押すとクエリの実行をさせる。クエリはA顧客テーブルのフィールドを全て選択して抽出条件に[電話番号入力]としている。 (結果) ・フォームを開くと先に電話番号入力が出てくる、先にフォームが開かない。 ・電話番号検索コマンドボタンを押すと抽出条件に合ったレコードはデーターシートビューに表示される。 よろしくお願いします

  • Access2003のフォームが出来ない。

    Access2003 をテキストで勉強中です。 テーブル → クエリ → と、進んで行きまして、フォームをウィザードで作ると、「フォームを作成できませんでした。」と、メッセージが表示されます。 クエリを基に作成しています。最初のテーブルから、テキスト通りにやりなおしてみても、同じ結果になります。 フォームを作れない原因とは何でしょうか? どうか、よろしくお願いいたします。

専門家に質問してみよう