PDA

View Full Version : سوال: تولید اعداد تصادفی با Query



AmirAh
پنج شنبه 25 مهر 1392, 23:17 عصر
سلام دوستان
من یک جدول خالی و بدون رکورد دارم که دارای یک فیلد عددی Long است
آیا میتوانم از طریق نوشتن یک کوئری ، تعدادی رکورد (مثلا 10000 عدد) حاوی عدد تصادفی در این جدول ایجاد کنم که با هم متفاوت و غیر تکراری باشند
ممنون از لطف شما

Abbas Amiri
شنبه 27 مهر 1392, 00:01 صبح
سلام دوستان
من یک جدول خالی و بدون رکورد دارم که دارای یک فیلد عددی Long است
آیا میتوانم از طریق نوشتن یک کوئری ، تعدادی رکورد (مثلا 10000 عدد) حاوی عدد تصادفی در این جدول ایجاد کنم که با هم متفاوت و غیر تکراری باشند
ممنون از لطف شما

این کار پروسه بسیار وقت گیری ایجاد خواهد کرد چون بایستی از تابع Rnd برای تولید اعداد تصادفی ایجاد کرد هرچه به انتهای حلقه نزدیک میشویم انتخابها محدود تر خواهند شد و احتمالا میلیونها بار تابع بایستی اجرا شود تا پروسه تکمیل شود

انگوران
شنبه 27 مهر 1392, 08:50 صبح
با سلام و عرض ادب، شايد اين روش هم جوابگوي نيازتون باشه:
يك جدول با دو فيلد درست كنين و يكي از فيلدها رو از نوع Auto number در نظر بگيرين و New values رو هم Random، سپس با كدي به شكل زير عددهاتون رو ايجاد كنين.


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("table1")
For i = 1 To 10000
rs.AddNew
rs.Fields(1) = "any value"
rs.Update
Next
Set db = Nothing
Set rs = Nothing
و ...

Abbas Amiri
شنبه 27 مهر 1392, 18:27 عصر
با سلام و عرض ادب، شايد اين روش هم جوابگوي نيازتون باشه:
يك جدول با دو فيلد درست كنين و يكي از فيلدها رو از نوع Auto number در نظر بگيرين و New values رو هم Random، سپس با كدي به شكل زير عددهاتون رو ايجاد كنين.


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("table1")
For i = 1 To 10000
rs.AddNew
rs.Fields(1) = "any value"
rs.Update
Next
Set db = Nothing
Set rs = Nothing
و ...

با سلام

حضور دوباره جناب انگوران را به فال نیک می گیریم . امید است مثل گذشته از مهارت و تجارب ایشان بهره مند شویم .

در خصوص کد فوق چنانچه عدد تولید شده تکراری باشد خطای حین اجرای 3022 رخ خواهد داد بنابر این بایستی مجددا عدد دیگری تولید شده و مجددااعمال شود .
فرض کنیم کدهای فوق را با کمی تغییر بصورت زیر درآوریم :


Sub AppendRandomNumbers(TableName As String, FieldName As String)
Const LowerBound = 1
Const UpperBound = 10000
Dim i As Integer, j As Integer
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(TableName)
'Text1 = "Please wait"
Randomize
On Error GoTo ErrH
For i = 1 To 10000
start:
j = Int((UpperBound - LowerBound + 1) * Rnd + LowerBound)
rs.AddNew
rs(FieldName) = j
rs.Update
Next
Set rs = Nothing
'Text1 = "Finished"
Exit Sub
ErrH:
Resume start
End Sub


مطمئنا زمانی که آخر حلقه نزدیک میشویم ، احتمال اینکه عدد تولید شده قبلا ایجاد شده باشد بیشتر وبیشتر می شود بنابراین اجرای کامل آن کمی به درازا خواهد کشید.

salambeshoma
شنبه 27 مهر 1392, 20:49 عصر
با سلام و ممنون از آقایان انگوران و امیری لطفا یک نمونه ساده برابر با کدهای خودتون قرار بدین ممنون از راهنمایی و دلسوزانه شما

Abbas Amiri
شنبه 27 مهر 1392, 21:47 عصر
با سلام و ممنون از آقایان انگوران و امیری لطفا یک نمونه ساده برابر با کدهای خودتون قرار بدین ممنون از راهنمایی و دلسوزانه شما

به نظرم مراجعه کنندگان به این تاپیک نه از سر نیاز که بیشتر از کنجکاوی هستند، ولی به درخواست شما یک نمونه قرار داده میشود.

AmirAh
جمعه 03 آبان 1392, 00:51 صبح
با تشکر از پاسخ دوستان گرامی
من در سوال خواسته بودم که تولید اعداد تصادفی از طریق یک query باشد اما روشهایی را که دوستان پیشنهاد کرده اند از طریق برنامه نویسی بوده (مثل تشکیل حلقه و تولید یک عدد تصادفی و نوشتن در جدول)
با تشکر از لطف شما

Abbas Amiri
جمعه 03 آبان 1392, 13:51 عصر
با تشکر از پاسخ دوستان گرامی
من در سوال خواسته بودم که تولید اعداد تصادفی از طریق یک query باشد اما روشهایی را که دوستان پیشنهاد کرده اند از طریق برنامه نویسی بوده (مثل تشکیل حلقه و تولید یک عدد تصادفی و نوشتن در جدول)
با تشکر از لطف شما

متاسفانه به دلیل پیچیدگی ، توسط کوئری نمیتوان اقدام به این کار کرد.