No46512.ランダム表示について
| タイトル | : ランダム表示について |
| 記事No | : 46512 |
| 投稿日 | : 2005/04/26(Tue) 22:51 |
| 投稿者 | : ふぁる |
OS:WindowsXp Access Version:2000 いつもこちらで勉強させて頂いております。お世話になっております。 ランダム表示について質問させてください。
持っているCDのデータベースを作りました。 起動時に「おすすめ」フォームを開いて、1レコードをランダムに表示、 さらにフォーム上の「次のおすすめ」ボタンクリック(再クエリもしくはレコードの移動?)で別のレコードをランダム表示、 としたいのですが、いつも同じデータが表示されてしまいます。
現在のデータベースの内容は、
「CD一覧」テーブルに「整理ナンバー」と「名前」の2つのフィールド。 レコードは300件程あります。
「ランダム表示用」クエリに ・「ランダム」ランダム: Rnd([整理ナンバー]) として昇順で並び替え ・「整理ナンバー」 ・「名前」
「ランダム表示用」クエリをデータソースとして「おすすめ」フォーム
となっています。
例えば、データベースを開いて「ランダム表示用」クエリを開くと 46、145、62・・・ その状態で「ランダム」フィールドで昇順並び替えを行うと 52、14、95・・・ もう一度昇順並び替えをすると 251、35、55・・・ というように、毎回同じパターンになります。
色々自分なりに調べてはみたのですが、理解力の不足から、どうしてもこれ以上進めずに悩んでいます。 恐らく根本の考え方から違うのでしょうか、どこが悪いのかわかりません…。 判りにくい文で申し訳ありませんが、よろしければご助言ください。
|
| タイトル | : Re: ランダム表示について |
| 記事No | : 46529 |
| 投稿日 | : 2005/04/27(Wed) 09:22 |
| 投稿者 | : hatena |
> 「ランダム表示用」クエリに > ・「ランダム」ランダム: Rnd([整理ナンバー]) として昇順で並び替え > ・「整理ナンバー」 > ・「名前」 > > 「ランダム表示用」クエリをデータソースとして「おすすめ」フォーム > > となっています。 > > 例えば、データベースを開いて「ランダム表示用」クエリを開くと > 46、145、62・・・ > その状態で「ランダム」フィールドで昇順並び替えを行うと > 52、14、95・・・ > もう一度昇順並び替えをすると > 251、35、55・・・ > というように、毎回同じパターンになります。
Rnd関数は、先に Randomize ステートメントを実行してから使用しないと、 毎回同じパターンになります。 Randomize ステートメントは一度実行すればOKですので、 「おすすめ」フォームの開くときイベントなどで実行するようにします。 ただ、VBAで、Randomize しても、クエリでは無効になるようですので、 下記のようなユーザー定義関数を標準モジュールに作ってこの関数をRnd関数の 代わりにクエリから呼び出すようにします。
Public Function MyRnd(Dummy) As Single MyRnd = Rnd(Nz(Dummy)) End Function
|
| タイトル | : まだ途中です |
| 記事No | : 46614 |
| 投稿日 | : 2005/04/28(Thu) 08:39 |
| 投稿者 | : ふぁる |
hatenaさん、教えていただきありがとうございます。 ただ、私はVBAはさっぱり理解ができておりませんで、 昨日色々調べながら、
・データベースウィンドウの「モジュール」から、「新規作成」した「Module1」に、上に書いていただいた「Public〜」を、そのまま貼り付けさせて頂き、
・「ランダム表示用」クエリの「ランダム」フィールドを、 ランダム: MyRnd([整理ナンバー]) として昇順で並び替え、
・「おすすめ」フォームの「開く時」に Private Sub Form_Open(Cancel As Integer) Randomize End Sub
と入れた状態です。 恐らく全然見当違い(その証拠にちゃんとランダム表示されない)だと思うのでお恥ずかしいのですが、どのように直せば良いでしょうか。 特にRandomizeの記述が、ヘルプを見てもネットで調べてもさっぱりわかりませんでした…。 今日も帰宅後がんばってみますが、よろしければご助言ください。
|
| タイトル | : Re: まだ途中です |
| 記事No | : 46617 |
| 投稿日 | : 2005/04/28(Thu) 09:08 |
| 投稿者 | : hatena |
・「おすすめ」フォームの「開く時」に > Private Sub Form_Open(Cancel As Integer) > Randomize > End Sub > > と入れた状態です。 > 恐らく全然見当違い(その証拠にちゃんとランダム表示されない)だと思うの > でお恥ずかしいのですが、どのように直せば良いでしょうか。
実験してみたら、最初にフォームを開いたときはまだRandomizeが効いてませんね。 2回目からランダムになります。 フォームを開くときイベントより先にレコードソースのクエリが読み込まれるようです。
MDBの起動時に最初に開くメニュー用フォームがあるならそのフォームの開くときに 記述して下さい。あるいは、Autoexecマクロからモジュールの実行で呼び出す方法でも いいです。
|
| タイトル | : できましたー! |
| 記事No | : 46694 |
| 投稿日 | : 2005/04/28(Thu) 21:27 |
| 投稿者 | : ふぁる |
できました!hatenaさんありがとうございます〜!
> フォームを開くときイベントより先にレコードソースのクエリが読み込まれるようです。
と教えて頂きましたので、「ならRandomizeの後で再クエリすればどうなんだろう…?」と考え、 「おすすめ」フォームの「開く時」に
Private Sub Form_Open(Cancel As Integer) Randomize Requery End Sub
と、「requery」を追加したところ、希望通り完全ランダム表示させることができました!うれしいです〜! hatenaさん、貴重なお時間をお付き合い頂きまして、本当にありがとうございました!
|
このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

|