パソコン情報

【Access】帳票フォームをスクロールしないで全レコード表示させたい

注意ポイント

複数のレコードを帳票フォームで表示するとスクロールしない限り下の方のデータを見る事ができません。

 

やりたい事は全レコード表示

NO,キー(searchkey)
1 ,A
2 ,D
3 ,D


21 ,あ
22 .あ
23 ,あ


31, い
32 ,い

NO,キー(searchkey)
1,A
2,D
3,あ
4,い

のようにデータをまとめてから・・・

 

重複しているキーをまとめてから、全レコードをフォームに表示させたいのです。

ちなみに、レポートなら、3列に印刷するような事ができるのですが、帳票フォームだとできません。

 

 

帳票フォームは止めて普通フォーム

アルファベットの全文字数 26文字 ひらがな数46文字 合計72文字

一画面で、25文字を表示させて、切替で100文字程度までを表示させられるようなフォームを作成してみたいと思います。

ここで、帳票フォームで全リストを表示させることが難しそうなので諦めました。

ココがポイント

レコードを10件ごとに抽出して、サブフォームで埋め込む事にしました

 

区切られたレコードの内容を抽出するパススルークエリ

SELECT * FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY searchkey ASC) num,searchkey
FROM                         dbo.shipper
GROUP BY              searchkey
)D
WHERE num >=10 and num <= 20
※下記でも区間を代用可能
WHERE num between 10 and 20

 

解説

・「searchkey」が表示させたいフィールド

・「num」は、searchkeyの重複をなくして番号を振り直したもの

・「D」というのがあるが理由はわからない(不明)何でもいいかも?

・区間範囲は、between関数でもOK

 

 

 

一旦フォームの非連結に代入

抽出したキーワードは、サブフォームで埋め込んだものだし、また、キーワードをクリックしたら他のテーブルから抽出したいという処理がでてきます。

そこで、一旦親フォームの非連結テキストボックスに代入しておきました。

 

Private Sub searchkey_Click()

Forms![shipper_pass_q]![select_key] = searchkey

DoCmd.OpenForm "shipper_input", acNormal, , , acFormEdit, acWindowNormal
DoCmd.Close acForm, "shipper_pass_q", acSaveNo

End Sub

その非連結テキストボックスの値を元に、クエリをフォームにしたものを同時にオープンさせるようにすると、キーワードから抽出された一覧が表示させるという仕組みになります。

 

もっとスマートな方法があるかとは思いますが、今回はこんなもんで・・・。