アクセスデータベースからランダムに情報を取り出すには?


ドキンちゃん  2004-06-02 07:03:50  No: 113639  IP: [192.*.*.*]

こんばんわ、今VB.Netで採点者に作品を配布するプログラムを作っています。データベースには作品、採点、人(作品の作者と採点者)のテーブルがあります。(作者も採点者になれます、だからチェックボックスを使って”人”のテーブルに作者と採点者の欄を作って一つのテーブルにまとめました。)それで、ひとつの作品に対して2人の採点者をデータベースから2人選びたいのですが、どうしたらいいでしょうか?ただし、採点者は自分の作品は採点できません。フォームデザインは、採点する作品を選んで”配布”ボタンをクリックしたら2人の採点者の情報が表示されて、その後に一人ずつの情報を”保存”ボタンをクリックして保存するようになってます。そうしたら、採点テーブルがUpdateされます。採点テーブルの中身は人No., 作品No., 配布日、締切日です。条件付ランダムは可能でしょうか?何かアドバイスがあったらなんでも是非よろしくお願いします。私の説明がよくわからなかったら聞いてください。

編集    削除
koma  2004-06-02 22:55:00  No: 113640  IP: [192.*.*.*]

まずは、適宜改行をお願いします。
字がギッチリ詰まって読み辛いです。
ていうか圧迫感ありすぎで、正直恐いです。

それで私なりの回答ですが、
"SELECT * FROM 人 WHERE 人no <> " & (作品製作者の人no)
などとして採点者を除いた全員ぶんのレコードセットを取得してはいかがでしょう。
あとはその中から、VB側の処理でランダムに2人を選出すると。
外部処理で問題ないところは外部処理でやってしまうのも手だと思います。

ツッコミ及びよりよい回答があれば、宜しくお願いします。>皆さん

編集    削除
koma  2004-06-02 22:56:05  No: 113641  IP: [192.*.*.*]

×  などとして採点者を除いた
○  などとして非採点者を除いた

失礼しました。

編集    削除
ドキンちゃん  2004-06-03 00:35:17  No: 113642  IP: [192.*.*.*]

komaさん、返信どうもありがとうございます!
まずは改行スミマセン!!確かに見返してるとかなり見難いですね(+o+)

>あとはその中から、VB側の処理でランダムに2人を選出すると。
>外部処理で問題ないところは外部処理でやってしまうのも手だと思います。

のところもうちょっと詳しく説明して頂けますか?

ランダムは今まで双六ゲーム作った時のサイコロの目の1−6でしか使った事無いのですが、この場合(データベースの情報を処理する)だとどんな感じの構文になるのでしょうか。

宜しくお願いします。



Run()
。。。。

編集    削除
特攻隊長まるるう  2004-06-03 01:04:43  No: 113643  IP: [192.*.*.*]

>ランダムは今まで双六ゲーム作った時のサイコロの目の1−6でしか使った事
>無いのですが、この場合(データベースの情報を処理する)だとどんな感じの
>構文になるのでしょうか。

koma さんのアイデアを使わせてもらうなら双六ゲームと同じ処理で
できると思います。[1−6]が[1−(検索できたレコード数)]になる
だけです。
ランダムで得られた行数のレコードからデータを取り出すだけで、
データベースの情報の処理は必要ありません。

編集    削除
ドキンちゃん  2004-06-03 01:19:03  No: 113644  IP: [192.*.*.*]

特攻隊長まるるうさん、返信どうもありがとうございます!
またもや初歩的な質問で住みませんが、(検索できたレコード数)はどうやって取得するんでしょうか?Countみたいな機能はありますか?

それと
>[1−6]が[1−(検索できたレコード数)}になるだけです。
ですが、1−検索できたレコード数)に対応する番号は何になるのでしょうか?人テーブルの人No.でしょうか?だと人でも採点者じゃない人がいるので番号がとびますよね?

宜しくお願いします。

編集    削除
特攻隊長まるるう  2004-06-03 02:08:16  No: 113645  IP: [192.*.*.*]

>Countみたいな機能はありますか?
あります。RecordCount で取れます。
>1−検索できたレコード数)に対応する番号は何になるのでしょうか?
レコードセットの行数でいいんじゃないですか?Move で移動して下さい。
※一度 .MoveLast と .MoveFirst をやっておかないと上手く移動
できないかもしれません。

編集    削除