注意ポイント
複数のレコードを帳票フォームで表示するとスクロールしない限り下の方のデータを見る事ができません。
やりたい事は全レコード表示
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
その非連結テキストボックスの値を元に、クエリをフォームにしたものを同時にオープンさせるようにすると、キーワードから抽出された一覧が表示させるという仕組みになります。
もっとスマートな方法があるかとは思いますが、今回はこんなもんで・・・。