- 締切済み
6万件程度あるAccessのDBから、1000とか5000という数字を
6万件程度あるAccessのDBから、1000とか5000という数字をテキストボックスに入力するとランダムにデータを取り出せる方法というは無いものでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
追加です。 フォームの例では、[下限値の入力] だけの場合はテキストボックスは [tx下限値]の一つだけフォームに 配置します。
- piroin654
- ベストアンサー率75% (692/917)
"1000とか5000という数字をテキストボックス に入力するとランダムにデータを取り出せる方法" とありますが、取り出し方にはいくつかの パターンが考えられるので、一応2通り 示してみます。 テーブルをtblTとし、ID(オートナンバー、 あるいは数値型)、名前(テキスト型) とします。 $1 下限値と上限値の中でランダムに並べる 方法とその中から一つだけ取り出す方法 クエリ名をQ1、Q2、Q3 とします。 Q1のSQL文: SELECT tblT.ID, tblT.名前 FROM tblT WHERE (((tblT.ID)>=[下限の数値入力] And (tblT.ID)<=[上限の数値入力])); Q2のSQL文: SELECT Q1.ID, Q1.名前 FROM Q1 ORDER BY Rnd([Q1].[ID]); Q3のSQL文: SELECT TOP 1 Q1.ID, Q1.名前 FROM Q1 ORDER BY Rnd([Q1].[ID]); Q2を開いてダイアログの[下限の数値入力]に IDの1000、[上限の数値入力]に1100を入れると IDの1000から1100までのレコードをランダム に並べて表示します。 Q3はその中から一つだけランダムに取り出し ます。 $2 たとえばダイアログに1000と入力すると 1000から1999まで取り出し、6と入力 すると1から9まで、10ならば10から19、 200ならば200から299までランダムに 取り出す方法とその中から一つだけ ランダムに取り出す方法。 テーブルは上記と同様。クエリ名を Qa、Qb、Qc とします。 QaのSQL文: SELECT tblT.ID, tblT.名前 FROM tblT WHERE (((tblT.ID) Between IIf([下限の数値入力]<=9,1,[下限の数値入力]) And IIf([下限の数値入力] <=9,9,cmdMaxRange([下限の数値入力])))); QbのSQL文: SELECT Qa.ID, Qa.名前 FROM Qa ORDER BY Rnd([Qa].[ID]); QcのSQL文: SELECT TOP 1 Qa.ID, Qa.名前 FROM Qa ORDER BY Rnd([Qa].[ID]); 次のプログラムを標準モジュールに 貼り付けます。 Function cmdMaxRange(i As Variant) As Variant Dim j As Long Dim k As Variant Dim l As Variant j = Len(i) k = Left(i, 1) cmdMaxRange = (k & cmdNumberSet(j)) End Function Function cmdNumberSet(i As Long) As Variant Dim j As Variant Dim k As Long Dim l As Variant j = 9 For k = 1 To i - 1 Step 1 l = l & 9 Next k cmdNumberSet = l End Function これも$1と同様にクエリを開いて確認 してください。 フォームではそれぞれのQ2あるいはQ3、 またはQbあるいはQcをフォームの レコードソースにしてそれぞれQ1または Qaを以下のように書き換えてるといいのでは。 tx下限値、tx上限値はテキストボックスの名前。 Q1の書き換え: SELECT tblT.ID, tblT.名前 FROM tblT WHERE (((tblT.ID)>=[Forms]![frmF1]![tx下限値] And (tblT.ID)<=[Forms]![frmF1]![tx上限値])); Qaの書き換え SELECT tblT.ID, tblT.名前 FROM tblT WHERE (((tblT.ID) Between IIf([下限の数値入力]<=9,1,[下限の数値入力]) And IIf([下限の数値入力] <=9,9,cmdMaxRange([下限の数値入力])))); そしてボタンを配置してボタンのクリック時 のイベントで Private Sub コマンド1_Click() Me.Requery End Sub とすればデータが表示されます。 フォームはオートフォーム表形式 で一旦つくり、保存後テキストボックスと ボタンを配置してそれぞれ処理をすれば 出来上がりです。 1000とか500とか入力して1000レコードが ランダムに取りたいのか、1000番台の レコードがランダムに取りたいのか 定かでないのでこんなところでいかが ですか。何かあれば書き込みをしてください。
- piroin654
- ベストアンサー率75% (692/917)
1000あるいは5000という数字はあるフィールドに ある数値に対してですか、それともレコードの 数に対してのものですか。
- LovePc
- ベストアンサー率75% (6/8)
検索してみると、こういうのが出てきましたが、 いかがでしょうか。 タイトル: ランダム抽出の方法について 記事No : 4672 投稿日 : 2002/01/28(Mon) 21:33
お礼
ありがとうございます。参考URLを元に対応中です。
補足
ありがとうございます。レコードの数に対してとなります。