フォームで「グループ化の設定」はできるのでしょうか?
初心者ですが、よろしくお願いします。
例)テーブル(レコードソース)
フィールド1 ,フィールド2
日本     ,ハンバーグ
日本     ,お好み焼き
日本     ,(Null )
アメリカ   ,スパゲッティ
アメリカ   ,ハンバーグ
アメリカ   ,ビール
フランス   ,(Null )
フランス   ,(Null )
フランス   ,(Null )
※フィールド1は必ず3レコードあると想定しまして、、

フォーム(1レコード目)
日本   ハンバーグ
     お好み焼き
     (Null )

フォーム(2レコード目)
アメリカ スパゲッティ
     ハンバーグ
     ビール

フォーム(3レコード目)
フランス (Null )
     (Null )
     (Null )

※Null 値に対し、レコードの更新を行いたく、また、実際にはフィールド1が30レコードずつあるため、グループ化設定を行い効率的なフォームを作りたいのですが、、、

分かりにくいかもしれませんが、ご教示下さい。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

方法はいろいろですが、一つの案として。


質問の「テーブル」をそのままフォームのレコードソースに
するならば、

(1)
フォームの新規作成から、
「元になるテーブルまたはクエリの選択」で「テーブル」
を選択し、「オートフォーム表形式」を選択し、そのまま
フォームを自動で作成し、適当な名前で保存します。

(2)
フォームをデザインビューで開き、「詳細」の上部にマウスの
カーソルを当て、十字になったら下のほうに2cm位下げます。
残りの「フィールド1」、「フィールド2」のラベルも二つ
同時に選択して、引き下げて「詳細」の上部にくっつけます。

(3)
空いたフォームのスペースにテキストボックスを一つ
設定します。そのテキストボックスの名前を「tx検索」
とします。
ボタンを三つ設定し、名前を「cmd検索」、「cmd全表示」、
および「cmd保存」とします。
とします。

(3)
ボタン「cmd検索」の上で右クリックして
プロパティシートを開き、その中の「クリック時」
のところで右端をクリックして、「ビルダの選択」
というフォームを表示し、その中の「コードビルダ」
を選択して、「OK」のボタンを押します。
コード表が開かれるので、表示されたコードを
以下のように設定します。


Private Sub cmd検索_Click()

Me.Filter = "フィールド1='" & Me![tx検索] & "'"
Me.FilterOn = True

End Sub


この場合の「フィールド1」はテーブルの「フィールド1」
のフィールド名を指しています。


(4)
同様に、ボタンの「cmd全表示」のプロパティ表から
「クリック時」のところで「コードビルダ」を
表示して「OK」として、コード表を表示し、
以下のように設定します。


Private Sub cmd全表示_Click()

Me.FilterOn = False
Me.Requery

End Sub


(5)
同様に、ボタンの「cmd保存」のプロパティ表から
「クリック時」のところで「コードビルダ」を
表示して「OK」として、コード表を表示し、
以下のように設定します。


Private Sub cmd保存_Click()

DoCmd.RunCommand acCmdSaveRecord

End Sub


以上で、設定が終了です。テキストボックスに
適当にたとえば、日本と入れて、「cmd検索」
を押すと、「フィールド1」が日本のデータが
選択されて表示されます。
「cmd全表示」を押すと全てのデータが表示されます。
「cmd保存」を押すと訂正、あるいは新規に入れた
データがテーブルに保存されます。
    • good
    • 0
この回答へのお礼

返信遅くなって申し訳ありません。
教えていただいた内容で、できました!
もう一つの方法も教えていただきありがとうございました!
また、機会があったからご教示お願いします!

お礼日時:2011/04/14 13:21

> ※Null 値に対し、レコードの更新を行いたく、また、実際には


> フィールド1が30レコードずつあるため、グループ化設定を行い
> 効率的なフォームを作りたいのですが、、、

フィールド1に記録されるデータの追加/更新はなく、あくまでNullの
上書きということでしたら、「データシート型のサブフォーム」(=サブ
データシート)を使用するのが簡単かと思います。

実際のフォームとしては、3階層使用します。

 親フォーム: GF
 子フォーム: MF
 孫フォーム: SF

各プロパティは以下の通りです。
(デフォルト設定に対して、必要最小限の項目のみを提示)
(「< >」の中は、プロパティシートのタブ名)

【SF】
[フォーム]
 <書式>
  ・既定のビュー=データシート
 <データ>
  ・レコードソース=当該テーブル
[コントロール]
 ○テキストボックス
 <データ>
  ・コントロールソース=フィールド2

【MF】
[フォーム]
 <書式>
  ・既定のビュー=データシート
 <データ>
  ・レコードソース=下記クエリ
[コントロール]
 ○テキストボックス
 <データ>
  ・コントロールソース=フィールド1
 ○サブフォーム
 <データ>
  ・ソースオブジェクト=SF
  ・リンク子フィールド=フィールド1
  ・リンク親フィールド=フィールド1

【GF】
[フォーム]
※このフォームはデフォルトのままでもOkですが、見た目から
  下記設定を推奨。また、レコードソースは空白のままで。
 <書式>
  ・レコードセレクタ=いいえ
  ・移動ボタン=いいえ
[コントロール]
 ○サブフォーム
 <データ>
  ・ソースオブジェクト=MF
  (リンクフィールドは空白のまま)
※他、必要に応じて、レコード保存用のコマンドボタンなどを適宜追加。
 (データシート型のフォームではコマンドボタン等は表示されません)


なお、「MF」で使用するクエリは、以下の手順で作成します:
 1)新規クエリをデザインビューで開く
 2)当該テーブルを追加
 3)フィールド1を表示対象として追加
 4)デザインビューの上半分の何もないところをダブルクリックするなど
  して、プロパティシートを開く
 5)『固有の値』を「はい」に設定
 6)クエリを保存して閉じる


・・・以上です。


※サブデータシート間にまたがるレコード移動は、Tabキーで行えます。
 (逆方向への移動はShift+Tab)
「access2007 フォームについて」の回答画像3
    • good
    • 0

No1です。


もう少し便利にしようと思えば、

(1)
テキストボックスをコンボボックスに
して、名前を「cmb検索」とします。

(2)
コンボボックスの「値集合ソース」
に以下をコピーして貼り付け、保存します。


SELECT テーブル.フィールド1
FROM テーブル
GROUP BY テーブル.フィールド1;


(3)
No1の(3)の

Private Sub cmd検索_Click()

Me.Filter = "フィールド1='" & Me![tx検索] & "'"
Me.FilterOn = True

End Sub


を以下に変更します。


Private Sub cmd検索_Click()

If Not IsNull(Me![cmb検索]) Then
Me.Filter = "フィールド1='" & Me![cmb検索] & "'"
Me.FilterOn = True
End If

End Sub


これで、コンボボックスで日本、アメリカなどを
選択し、検索ボタンを押せばフォームに絞られた
データが表示されます。



なお、No1のテキストボックスのままで行なうときは、
No1の(3)のコードを以下に変更してください。


Private Sub cmd検索_Click()

If Not IsNull(Me![tx検索]) Then
Me.Filter = "フィールド1='" & Me![tx検索] & "'"
Me.FilterOn = True
End If

End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング