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

كيف يمكنني أن ادرج سجل من قاعدة بيانات بشكل عشوائي .....في الفيجول

مغلق
بدأه salehr3 في 30 يوليو 2006 · 10 رد · 899 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عدنا ...

اطرح لكم السؤال بالتفصيل

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

الحقل الأول بإسم السؤال

الحقل الثاني الجواب الأول

الحقل الثالث الجوا ب الثاني

الحقل الرابع الجواب الثالث

وعندي ما يقارب 100 سؤال تحتوي الحقول السابقة ... الحين تمام خلصنا قاعدة أكسس ...

ننقل للفيجول

عندي في الفورم 4 لبلات ( label1 . label2 . label3 . label4 )

في ليبل 1 يكون السؤال وفي اليبلات البقية الأجوبه ...

الحين ماذا أريد ؟؟؟؟

اريد عند الضغط على زر السؤال التالي .... تقوم دالة بجلب سؤال عشوائي من قاعدة البيانات من بين ال 100 سؤل وتضعها في اليبلات السابقة .... كيف يكون ذلك من لدية الخبرة والحل أرجو منه إفادتي بذلك ,,,, ولكم جزبل الشكر على تعاونكم الدئم معنا ....

#2

تفضل أخي الكريم

على اعتبار أننا أضفنا خانة في قاعدة البيانات (ID) و تعني رقم السؤال

و نضيف هذه الإجرائية لتوليد رقم عشوائي بين 0 إلى 100 و يمكنك التحكم في رقم البداية و رقم النهاية

Dim RanNo() As Long
Private Sub RandomizeNumbers(ByVal iFrom As Integer, ByVal iTo As Integer)
ReDim RanNo(iFrom To iTo)
For i = iFrom To iTo
RanNo(i) = i
Next i
Randomize (Timer)
For i = iFrom To iTo
j = CInt((iTo - iFrom) * Rnd + iFrom)
tmp = RanNo(i)
RanNo(i) = RanNo(j)
RanNo(j) = tmp
Next i
End Sub

Private Sub Command1_Click()
RandomizeNumbers 0, 100

msgbox RanNo(i)

End Sub

ثم نقوم بعمل استعلام SQL و نضع في شرط

SELECT * FROM tbl1  WHERE id=RanNo(i)
#3

السلام عليكم

أخى الكريمsalehr3

الفكره جديده فعلا ممرتش عليا قبل كده

بس ممكن أخى الفريد

تفسر الكود شويه

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#4

السلام عليكم

أخى الكريم الفريد حياك الله وبارك الله فيك

للحومل علي قيمة عشوائية فيكفي الجملة التالية

num = Int(Rnd() * 100)

اما بالنسبة لسؤال الأخ salehr3

بما أنك تستخدم المكتبة ADO3.6 كما في سؤالك القبل هذا فسأستخدم نفس طريقتك للتعامل مع القاعدة

فلنفرض ان اسم الجدول Question

والحقول هي Question , Answer1 , Answer2 , Answer3

Dim DB As Database
Dim QuestionsRec As Recordset
Dim MAX_NUMBER As Integer

Private Sub Command1_Click()
	Randomize
	Dim num  As Long
	num = Int(Rnd() * MAX_NUMBER)
	QuestionsRec.MoveFirst
	QuestionsRec.Move num
	Label1.Caption = toString(QuestionsRec(0).Value)
	Label2.Caption = toString(QuestionsRec(1).Value)
	Label3.Caption = toString(QuestionsRec(2).Value)
	Label4.Caption = toString(QuestionsRec(3).Value)
End Sub

Function toString(recValue) As String
	If Not IsNull(recValue) Then toString = recValue
End Function

Private Sub Form_Load()
	Set DB = DBEngine.OpenDatabase(App.Path & "\db1.mdb")
	SQL = "Select * from questions"
	Dim tRec
	Set tRec = DB.OpenRecordset("select count(question) from questions")
	MAX_NUMBER = tRec.Fields(0).Value
	tRec.Close
	Set QuestionsRec = DB.OpenRecordset(SQL)
End Sub

Private Sub Form_Unload(Cancel As Integer)
	DB.Close
End Sub

اما اذا أضفت حقل ID للسؤال وهو الافضل

فاستخدم الكود التالي

Dim DB As Database
Dim QuestionsRec As Recordset
Dim MAX_NUMBER As Integer

Private Sub Command1_Click()
	Randomize
	Dim num  As Long
	num = Int(Rnd() * MAX_NUMBER) + 1
	'you can use as the brother fared said
	'Set QuestionsRec = DB.OpenRecordset("select * from students where id=" & num)
	QuestionsRec.FindFirst "ID=" & num
	Label1.Caption = toString(QuestionsRec("Question").Value)
	Label2.Caption = toString(QuestionsRec("answer1").Value)
	Label3.Caption = toString(QuestionsRec("answer2").Value)
	Label4.Caption = toString(QuestionsRec("answer3").Value)
	'QuestionsRec.Close
End Sub

Function toString(recValue) As String
	If Not IsNull(recValue) Then toString = recValue
End Function

Private Sub Form_Load()
	Set DB = DBEngine.OpenDatabase(App.Path & "\db1.mdb")
	Dim tRec
	Set tRec = DB.OpenRecordset("select count(Question) from questions")
	MAX_NUMBER = tRec.Fields(0).Value
	tRec.Close
	Set tRec = Nothing

	SQL = "Select * from questions"
	Set QuestionsRec = DB.OpenRecordset(SQL)
End Sub

Private Sub Form_Unload(Cancel As Integer)
	DB.Close
End Sub

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#5

بالنسبة للكود الذي أنا وضعته هو للحصول على أرقام عشوائية صحيحة غير مكررة

و بالنسبة للإجراء الذي وضعته في الcommand هو للتسهيل في عدد الأرقام المطلوبة من ناحية الرقم الأقل و الرقم الأكثر و هي مفيدة في مثل حالة السؤال .... فلو كان الرقم العشوائي 1.12 (ظهرت عندي أرقام أكبر من الواحد الصحيح ) و ضربناه في 100 فسيكون الناتج 112 و هذا الرقم غير موجود بالقاعدة و سيظهر خطأ ().

و هذا السطر لإظهار الرقم و بالإمكان وضعه في حلقة تكرار For...next

RanNo(i)

و شكراً للجميع

Example1.zip

تم تعديل هذه المشاركة بواسطة الفريد في 31 يوليو 2006 في 02:19

#6

في حل اخر انك تضيف حقل اخر به رقم السؤال وليكن اسمه nn

وعند فتح السؤال يتم اختياررقم السؤال عشوائي

وإليك الكود

dim a as Integer

a=rnd()*100

If RS![NN] = Val(ww) Then

label1 1=rs![اسم الحقل]

وهكذا

end if

__________________

سورس وكود برنامج التجسس علي لوحه المفاتيح

برنامج رسم تصميمي

لعبه لغز الارقام من تصميمي

لعبه سيجا من تصميمي

لعبه اكس و اووووووووو

برنامج لحساب عمرك برمجه كامله دون الاستعانه بدوال vb

لعبه الكره الناريه

#7

شكرا جزيلا أخي الفريد ع توضيحك لي طريقة التوليد العشوائي ... فهي تنفع للأسئلة ... وع الكود الرائع

والشكر موصل لمحب الرسول ....... مشكور محب الرسول وشكرا على وضع الكود الكامل والحقيقة طبقته وكان رائع وفعال ....

أخي hythamzero مشكور على الكود ... والحمدلله كل الطرق نافعت ... وزادكم الله علما ...

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

#8

العفو يا غالي

و إجابة لسؤالك

تضيف خانة في قاعدة البيانات و يكون مخزن فيها رقم الاجابة الصحيحة

#9

مشكور أخوي الفريد على مساعدتك الطيبة ... وإن شالله بجرب الطريقة ... تحياتي الحارة لك ..

#10

السلام عليكم

حياكوا الله اخواني

اسف اخي الفريد كلامك سليم بالنسبة لعدم تكرار الرقم

فلم ادقق في الكود الذي كتبته غلطة مني واستعجال

ولكن بانسنة لل

اقتباس
فلو كان الرقم العشوائي 1.12 (ظهرت عندي أرقام أكبر من الواحد الصحيح ) و ضربناه في 100 فسيكون الناتج 112 و هذا الرقم غير موجود بالقاعدة و سيظهر خطأ ().

ناتج الدالة ()Rnd

Rnd() <=0 and <1

فلن يحصل خطا لان ناتج rnd هو دائما اقل من واحد

وهذا الرابط من موقع مايكروسفت بحثت عنه في MSDN

Rnd Function (Visual Basic)

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#11

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

الأخ الفاضل : salehr3 الله يوفقك في الانتهاء من تصميم برنامجك

الأخ الفاضل الحبيب محب الرسول ... كتبت لك الرد السابق و أنا أعلم أن قيمة rnd لا تتجاوز الواحد بأي حال من الاحوال ... لكن لم انتبه أنها مضروبة ×10 مرفوعة للأس -2 E-2

81acb647de.gif

و دمتم بود

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…