الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

*كود* اختيار بيانات عشوائية

مغلق
بدأه ابوحمود في 2 سبتمبر 2001 · 12 رد · 3,041 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

 كود لاستخراج بيانات عشوائية من حقل أو استعلام أو عبارة SQL

Function FindRandom (RecordSetName As String, Fieldname As String)

   Dim MyDB As Database
   Dim MyRS As Recordset
   Dim SpecificRecord As Long, i As Long, NumOfRecords As Long

   Set MyDB = CurrentDB()
   Set MyRS = MyDB.OpenRecordset(RecordSetName, dbOpenDynaset)
   On Error GoTo NoRecords
   MyRS.MoveLast
   NumOfRecords = MyRS.RecordCount
   SpecificRecord = Int(NumOfRecords * Rnd)
   If SpecificRecord = NumOfRecords Then
      SpecificRecord = SpecificRecord - 1
   End If
   MyRS.MoveFirst
   For i = 1 To SpecificRecord
      MyRS.MoveNext
   Next i
   FindRandom = MyRS(Fieldname)
   Exit Function

NoRecords:
   If Err = 3021 Then
      MsgBox "There Are No Records In The Dynaset", 16, "Error"
   Else
      MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _
         16, "Error"
   End If
   FindRandom = "No Records"
   Exit Function

End Function

ولإستدعاء الدالة :

?FindRandom("RecordSetName", "FieldName")

حيث RecordSetName اسم جدول أو اسم استعلام أو عبارة SQL و FieldName اسم الحقل المطلوب استخراج البيانات العشوئية منه .

نقلا من أحد المواقع

ولكم تحياتي

#2

يعطيك العافيه ياأبو حمود بس الكود هذا وين يكتب بالنسبة لبرنامج الآكسس

وشكراٍ

#3

حسب رغبتك إذا بتستخدم الكود في أكثر من نموذج فضعه في الوحدة النمطية العامة وإذا في نموذج واحد فضعه في الوحدة النمطية الخاصة بالنموذج .

ولك تحياتي

#4

السلام عليكم ورحمة الله وبركاته وبعد ..

بحثت عن موضوع يتعلق بالأختيار العشوائي .. فوجدت .. لكن لم يعجني الطرح ولا الشرح ..

وأرغب من الأساتذة العباقرة الفطاحلة ... ألخ .. أن يتكرموا مشكورين بالأجابة علي هذا السؤال :

1- كيف لي أن أجعل البرنامج يقوم بأختيار رقم عشوائي من حقل الرقم في الجدول (جدول1 ) .. وذلك بواسطة زرين .. الأول 1- الأختيار بدون تكرار 2- الأختيار مع التكرار .. ؟

أملي أن أكون قد طرحت الموضوع بشكل واضح ..

الشكر مقدماً للجميع ..

#5

بالنسبة لطلبك الأول فجوابه في الأعلى أما الثاني اصبر علي بعض الوقت .

ولك تحياتي

#6

يعطيك العافية يابوحمود

انا حفظت الصفحة عندي ربما احتاج لها في المستقبل

#7

لجعل البيانات العشوائية غير متكررة يعني يظهر كل سجل مرة واحد فقط بدون أن يكرره حتى ولو كانت البيانات متككرة في الجدول في نفس الحقل :

1- أعلن عن متغيرين على مستوى الوحدة النمطية الخاصة بالنموذج :

Dim الاختيار_الأخير
Dim MyRS As Recordset

2- ضع الدالة التالية في الوحدة النمطية الخاصة بالنموذج :

Function FindRandom2(RecordSetName As String, Fieldname As String)

   Dim MyDB As Database
   Dim strSQL As String
   Dim SpecificRecord As Long, i As Long, NumOfRecords As Long


   If IsEmpty(الاختيار_الأخير) Then
   ' السطر التالي ضع فيه عبارة SQL للحقل المطلوب استخراج بياناته
   ' لاحظ أن خاصية فريد قد جعلت الى نعم اثناء تصميم الاستعلام
    strSQL = "SELECT DISTINCT [اسم الجدول].[اسم الحقل] FROM [اسم الجدول];"
    Set MyDB = CurrentDb()
    Set MyRS = MyDB.OpenRecordset(strSQL, dbOpenDynaset)
    Else
    ' الحقل الموجود في السطر التالي هو الحقل الذي نستخرج منه البيانات بدون تكرار
    ' أزل الفاصلة العلوية إذا كانت بيانات الحقل رقمية
    MyRS.Filter = "[اسم الحقل] <>'" & الاختيار_الأخير & "'"
    Set MyRS = MyRS.OpenRecordset(dbOpenDynaset)
    End If
   On Error GoTo NoRecords
   MyRS.MoveLast
   NumOfRecords = MyRS.RecordCount
   SpecificRecord = Int(NumOfRecords * Rnd)
   If SpecificRecord = NumOfRecords Then
      SpecificRecord = SpecificRecord - 1
   End If
   MyRS.MoveFirst
   For i = 1 To SpecificRecord
      MyRS.MoveNext
   Next i
   FindRandom2 = MyRS(Fieldname)
   الاختيار_الأخير = FindRandom2
   Exit Function

NoRecords:
   If Err = 3021 Then
      MsgBox "There Are No Records In The Dynaset", 16, "Error"
   Else
      MsgBox "Error - " & Err & Chr$(13) & Chr$(10) & Error, _
         16, "Error"
   End If
   FindRandom2 = "لا يوجد سجلات"
   ' السطر التالي لجعل الكود يبدأ من جديد بعد ظهور الرسائل بعدم وجود سجلات
   الاختيار_الأخير = Empty
   Exit Function

End Function

3- مرر لها اسم الجدول واسم الحقل مع ملاحظة أن اسم الحقل يجب أن يطابق اسم الحقل في عبارة SQL ف أول الدالة واسم الحقل في سطر تطبيق الفلتر .

وللجميع التحية

#8

السلام عليكم و رحمة الله و بركاته

هذا رابط لنفس الموضوع و تبدو الدالة مختصرة و لكن لم أجربها

http://www.vb4arab.com/vb/showthread.php?s...=&threadid=9239

#9

لقد راجعت الدالة ينقصها الإعلان عن المتغيرات وعبارات اعتراض الخطأ ثم بعد تجربتها لم تؤدي المطلوب .

وقد قمت بالتعديل عليها حتى عدلت الناقص فيها :

Dim MyDB As Database
Dim MyRS As Recordset

Set MyDB = CurrentDb()
Set MyRS = MyDB.OpenRecordset("ضع اسم جدول هنا", dbOpenDynaset)
If MyRS.RecordCount Then
MyRS.MoveLast
RecNo = CInt((MyRS.RecordCount * Rnd))  'Generate random value between 1 and RecordCount
MyRS.MoveFirst
'Go to the record pointed by the RecNo pointer
MyRS.Move RecNo
MsgBox MyRS.Fields(1).Value
End If
MyRS.Close

ولك تحياتي

#10

السلام عليكم

أرجو أن يصمم البرنامج ولو بسيط ومن ثم يوضع في المنتدى

لأنني جربت كل اللي فوق ولا صلح

في الفجوال والأكسس

#11

الأخ مثالي

تجد مثال على التكرار وبدون التكرار على الرابط التالي :

http://mypage.ayna.com/h_h123/AktiarBinat.zip

إذا أشكل عليك شيء فلا تتردد في الكتابة .

ولك تحياتي

#12

مشكور لكن هل من الممكن أن أسوي نفس الشي

في الفجوال

#13

رابط آخر لتنزيل ملف أخونا ألو حمود

http://www14.brinkster.com/mtarafa/CODE/RA...RANDOM_abuh.ZIP

counter2001.cgi?558002

هذا الموضوع مغلق.

مواضيع مشابهة