• 締切済み

6万件程度あるAccessのDBから、1000とか5000という数字を

6万件程度あるAccessのDBから、1000とか5000という数字をテキストボックスに入力するとランダムにデータを取り出せる方法というは無いものでしょうか? 

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

追加です。 フォームの例では、[下限値の入力] だけの場合はテキストボックスは [tx下限値]の一つだけフォームに 配置します。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

"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)
回答No.2

1000あるいは5000という数字はあるフィールドに ある数値に対してですか、それともレコードの 数に対してのものですか。

persona123
質問者

補足

ありがとうございます。レコードの数に対してとなります。

  • LovePc
  • ベストアンサー率75% (6/8)
回答No.1

検索してみると、こういうのが出てきましたが、 いかがでしょうか。 タイトル: ランダム抽出の方法について 記事No : 4672 投稿日 : 2002/01/28(Mon) 21:33

参考URL:
http://accessclub.jp/bbs/0011/beginers4672.html
persona123
質問者

お礼

ありがとうございます。参考URLを元に対応中です。

関連するQ&A