• ベストアンサー

ACCESSで乱数発生

宜しくお願いいたします。 ACCESS2000でかるた取りゲームを作成しています。 かるたを任意に配置するために乱数を設定するのに Randomize DoCmd.RunSQL "update 回答 set 整列No.=100*rnd(1) " として、一応乱数が整列No.に張り付いているのですが常に同じ数列になっています。 数列を起動の都度変更するにはどのようにしますか

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>myRND(now()) now()はフィールド名じゃないでしょ >myRNDにはレコードのフィールドのひとつを引数として与えます >関数内では使用していませんからどのようなフィールドでもOKです この部分を無視していますね というかせっかく理由まで説明してあげたのに 全く理解しようとしていないのでは

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

Accessはクエリを実行する前に処理を早めるために実行手順の最適化を行います その際、レコードと関係ない関数などは一度だけ評価して その結果を全てのレコードに適用します つまりrnd(1)という関数はレコードに関係ないとみなされ 一度しか評価されないのです これに対処するには下のようなユーザー関数を作ります Public Function myRND(anyField) Randomize myRND = Rnd End Function myRNDにはレコードのフィールドのひとつを引数として与えます 関数内では使用していませんからどのようなフィールドでもOKです これでレコードごとに関数が評価されるようになります

shinkami
質問者

お礼

お早うございます。 その後あらためて Public Function myRND(anyField) Randomize myRND = 100*Rnd '……(No.)を削除 End Function を試しましたところ、期待通り都度数列が変化しました。 myRNDについては9/26にもお教えいただいてます。 何度もお手数かけすみませんでした。

shinkami
質問者

補足

ご回答ありがとうございます。 標準モジュールで Public Function myRND(anyField) Randomize myRND = 100*Rnd End Function として DoCmd.RunSQL "update 回答 set 整列No.=myRND(now()) " としましたが結果は同じです。 myRND()の ()内にテキストボックス、数値 等試しましたが変化はありません ご面倒でしょうが再度ご指導お願いいたします。

関連するQ&A