۰۲-آذر-۱۳۸۷, ۱۱:۴۴:۱۲
۰۲-آذر-۱۳۸۷, ۱۵:۲۹:۲۹
دستوري توي SQL براي انتخاب Random وجود نداره
كاري كه شما بايد انجام بدي اينه:
1. عددي بين "0" و "تعداد Row هاي جدول" به صورت Random انتخاب مي كني
2. اين دستور SQL رو مي نويسي: "SELECT * FROM tablename WHERE id = random"
فقط بايد جدولت يه ستون به نام id داشته باشه
حالا اگه مي خواي از جدولت 5 تا ركورد رو به صورت Random انتخاب كني، بايد مراحل بالا رو 5 بار انجام بدي
كاري كه شما بايد انجام بدي اينه:
1. عددي بين "0" و "تعداد Row هاي جدول" به صورت Random انتخاب مي كني
2. اين دستور SQL رو مي نويسي: "SELECT * FROM tablename WHERE id = random"
فقط بايد جدولت يه ستون به نام id داشته باشه
حالا اگه مي خواي از جدولت 5 تا ركورد رو به صورت Random انتخاب كني، بايد مراحل بالا رو 5 بار انجام بدي
۰۲-آذر-۱۳۸۷, ۱۵:۳۶:۱۲
طراحی دیتابیستون اشتباهه.
اول میاید سه تا جدولتونو یکی میکنید. یه فیلدم اضافه میکنید که نوع سوالو بگه. یعنی میشه 4 تا فیلد. code-quiz-kelid-type .
حالا میتونید توی برنامه به تعدادی که میخواید کد تولید کنید. بعد با کلمه IN و دستورات sql اونا رو در بیارید.
ویرایش: شرمنده جواب جناب far_222000 رو ندیده بودم. فیلد id شون همون codeهست فکر کنم. با دستور IN دیگه نیاز به تکرارم نیست.
اول میاید سه تا جدولتونو یکی میکنید. یه فیلدم اضافه میکنید که نوع سوالو بگه. یعنی میشه 4 تا فیلد. code-quiz-kelid-type .
حالا میتونید توی برنامه به تعدادی که میخواید کد تولید کنید. بعد با کلمه IN و دستورات sql اونا رو در بیارید.
ویرایش: شرمنده جواب جناب far_222000 رو ندیده بودم. فیلد id شون همون codeهست فکر کنم. با دستور IN دیگه نیاز به تکرارم نیست.
۰۲-آذر-۱۳۸۷, ۲۱:۴۷:۵۶
در تکمیل گفته دوستان :
شما جدول سوالات رو یکی کنین
من برنامه رو برفرض این دیتابیس توضیح میدم :
الان میخواهیم 2 سوال تصادفی از اکسس استخراج کنیم پس داریم :
الان یک رشته از کلیدهای تصادفی مربوط به سوالات درس اکسس تهیه شده که هیچکدومشون تکراری نیست
میرسیم به تهیه این کوئری :
با ادامه این کار و تعویض کلمه اکسس با ورد و حرف A با حرف W میتوان سوالات ورود رو استخراج کرد .
شما جدول سوالات رو یکی کنین
من برنامه رو برفرض این دیتابیس توضیح میدم :
کد:
ID Cname Quest
A1 Access Q1
A2 Access Q2
A3 Access Q3
W1 Word Q1
W2 Word Q2
W3 Word Q3
...
...
کد:
Dim Acm As String
Dim Comma As String
Dim x As Integer
For i = 1 To 2
Randomize Timer
x = Int(Rnd() * 3) + 1
Do While (InStr(Acm, CStr(x)) <> 0)
Randomize Timer
x = Int(Rnd() * 3) + 1
Loop
Acm = Acm & Comma & "A" & Trim(Str(x))
Comma = ","
Next
میرسیم به تهیه این کوئری :
کد:
Dim Qlist As Variant
Dim strSQL, strSQL2, strOR As String
strSQL = "SELECT Quest FROM Table1 WHERE (Cname='Access' AND "
Qlist = Split(Acm, ",")
For i = 0 To UBound(Qlist)
strSQL2 = strSQL2 & strOR & "ID='" & Qlist(i) & "'"
strOR = " OR "
Next
strSQL = strSQL & strSQL2 & ");"
۰۳-آذر-۱۳۸۷, ۱۴:۳۷:۰۲
سلام.
من فقط فرمول عدد تصادفي رو مي گم که مي شه با کدهايي که دوستان گذاشتن ترکيب کرد.
اميدوارم بدردتون بخوره.
موفق باشيد.
من فقط فرمول عدد تصادفي رو مي گم که مي شه با کدهايي که دوستان گذاشتن ترکيب کرد.
کد:
randomize (second(now) * minute(now))
x=(حدپايين-حد بالا )*rnd + حد پايين
حدبالا: حداکثر مقدار
حدپايين: حداقل مقدار
موفق باشيد.
۰۴-آذر-۱۳۸۷, ۱۵:۲۱:۴۸
یک چیز دیگه یادم افتاد وقتی کلید هر سوال رو با اولین حرف همون سوال شروع میکنیم دیگه نیازی به ستون اضافی نام درس نداریم
و اگه کدها رو خلاصه کنیم اینو داریم :
الان برای انتخاب 2 سوال ورد و 2 سوال اکسس داریم :
با تابع بالا میتوان با دادن تعداد کل سوالات ، تعداد سوالاتی که باید استخراج شوند و حرف اختصاری هر درس یک رشته از کلیدهای غیر تکراری اون درسو بدست بیاریم .
حالا میتوان با یک فراخوانی ساده کد اسکیو ال انتخاب سوالات رو بدست اورد :
و اگه کدها رو خلاصه کنیم اینو داریم :
کد:
ID Quest
A1 Q1
A2 Q2
A3 Q3
W1 Q1
W2 Q2
W3 Q3
...
...
کد:
public function RndQuest(QCount as integer,NCount as integer,Lesson as string)as string
Dim Acm As String
Dim Comma As String
Dim x As Integer
For i = 1 To NCount
Randomize Timer
x = Int(Rnd() * QCount) + 1
Do While (InStr(Acm, CStr(x)) <> 0)
Randomize Timer
x = Int(Rnd() * QCount) + 1
Loop
Acm = Acm & Comma & Lesson & Trim(Str(x))
Comma = ","
Next
RndQuest=Acm
end function
کد:
public function GetSQL(strID as string)as string
Dim Qlist As Variant
Dim strSQL, strSQL2, strOR As String
strSQL = "SELECT Quest FROM Table1 WHERE ( "
Qlist = Split(strID, ",")
For i = 0 To UBound(Qlist)
strSQL2 = strSQL2 & strOR & "ID='" & Qlist(i) & "'"
strOR = " OR "
Next
strSQL = strSQL & strSQL2 & ");"
GetSQL= strSQL
end function
کد:
SQL = GetSQL(RndQuest(3, 2, "A") & "," & RndQuest(3, 2, "W"))
۰۴-آذر-۱۳۸۷, ۱۶:۰۱:۱۴
قابل اجراست ولي از نظر طراحي اشتباه است.
۰۴-آذر-۱۳۸۷, ۱۶:۲۲:۱۹
کجاش اشتباست ؟