プロが教えるわが家の防犯対策術!

宜しくお願いいたします。
ACCESS2000でかるた取りゲームを作成しています。
かるたを任意に配置するために乱数を設定するのに

Randomize
DoCmd.RunSQL "update 回答 set 整列No.=100*rnd(1) "

として、一応乱数が整列No.に張り付いているのですが常に同じ数列になっています。
数列を起動の都度変更するにはどのようにしますか

A 回答 (2件)

>myRND(now())


now()はフィールド名じゃないでしょ

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

Accessはクエリを実行する前に処理を早めるために実行手順の最適化を行います


その際、レコードと関係ない関数などは一度だけ評価して
その結果を全てのレコードに適用します

つまりrnd(1)という関数はレコードに関係ないとみなされ
一度しか評価されないのです

これに対処するには下のようなユーザー関数を作ります

Public Function myRND(anyField)
Randomize
myRND = Rnd
End Function

myRNDにはレコードのフィールドのひとつを引数として与えます
関数内では使用していませんからどのようなフィールドでもOKです

これでレコードごとに関数が評価されるようになります

この回答への補足

ご回答ありがとうございます。
標準モジュールで

Public Function myRND(anyField)
Randomize
myRND = 100*Rnd
End Function

として

DoCmd.RunSQL "update 回答 set 整列No.=myRND(now()) "

としましたが結果は同じです。
myRND()の ()内にテキストボックス、数値 等試しましたが変化はありません
ご面倒でしょうが再度ご指導お願いいたします。

補足日時:2007/10/24 01:17
    • good
    • 0
この回答へのお礼

お早うございます。
その後あらためて

Public Function myRND(anyField)
Randomize
myRND = 100*Rnd '……(No.)を削除
End Function

を試しましたところ、期待通り都度数列が変化しました。
myRNDについては9/26にもお教えいただいてます。
何度もお手数かけすみませんでした。

お礼日時:2007/10/24 07:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!