PDA

View Full Version : نمایش تصادفی تعداد رکورد دلخواه



حسین خانی
شنبه 21 فروردین 1389, 14:44 عصر
با سلام :لبخندساده:
با استفاده از TOP در دستور زیر تعداد رکورد دلخواه رو نتیجه می گیرم ولی میخواهم به ازای هر جستجو تعداد رکوردهای تصادفی را نمایش بدهم !


select Top '+Edit1.Text+' * from Table1 where type = '+Edit2.Text+'
اگر دستوری (مانند Random ) و یا روشی است ممنون میشوم راهنمایی کنید
موفق باشید ...

vcldeveloper
شنبه 21 فروردین 1389, 19:26 عصر
این الان سوال دلفی هست، یا SQL؟
اگر سوال دلفی هست، تعدادی رکورد از بانک بگیرید، بعد با استفاده از تابع Random و مقدار RecNo مربوط به هر رکورد، تعدادی را تصادفی انتخاب کنید.

حسین خانی
چهارشنبه 25 فروردین 1389, 19:46 عصر
با سلام :لبخندساده:

تعدادی رکورد از بانک بگیرید، بعد با استفاده از تابع Random و مقدار RecNo مربوط به هر رکورد، تعدادی را تصادفی انتخاب کنید. با تشکر از جناب کشاورز ...
نتونستم روشی را که گفته بودید پیاده کنم !!! :خجالت:

توضیح کامل :
برای گزارشگیری و چاپ تعدادی سئوال از بانک با توجه به نیاز کاربر که در زیر آوردم مشکل دارم !
دو نوع سئوال : تشریحی ، گزینه ای
سه سطح سئوال : سخت ، آسان ، متوسط
میخواهم کاربر با نوشتن تعداد نوع سئوال در یک Edit و تعداد سطح سئوال در Edit های مربوطه دیگری (مثلا : 9 تا تشریحی 11 تا گزینه ای ، 3 تا سخت برای تشریحی 5 تا آسان برای چهار گزینه ای و ... )
بتواند تعداد سئوالات مورد نظر خود را از بانک به صورت رندوم استخراج کند .
قبلا از راهنمایی آقای کشاورز و دیگر اساتید تشکر و سپاسگزاری می کنم .
موفق باشید ...

vcldeveloper
پنج شنبه 26 فروردین 1389, 00:51 صبح
نتونستم روشی را که گفته بودید پیاده کنم !!!
شما به هر طریقی که مایل بودید، تعدادی رکورد (یا همه رکوردهای یک جدول) را از بانک دریافت می کنید. مثلا یک کوئری برای AdoQuery می نویسید، و رکوردهایی را از بانک دریافت می کنید.

حالا برای اینکه روی این رکوردهای دریافت شده، تعدادی را به صورت تصادفی انتخاب کنید، تعداد رکوردها را با استفاده از خصوصیت RecordCount به دست میارید، و بر اساس آن، عدد تصادفی تولید می کنید:


Randomize;
MyRandomNumber := Random(AdoQuery1.RecordCount);

برای اینکه رکورد متناظر با عدد تصادفی تولید شده را پیدا کنید، آن عدد را به خصوصیت RecNo اختصاص می دید، تا دیتاست به آن رکورد پرش کنه:


AdoQuery1.RecNo := MyRandomNumber;

حالا که به رکورد تصادفی مورد نظر رسیدید، اطلاعات مورد نیازتان از آن رکورد را استخراج می کنید، و عملیات را برای پیدا کردن رکوردهای تصادفی دیگه تکرار می کنید.

حسین خانی
یک شنبه 29 فروردین 1389, 13:28 عصر
با سلام :لبخندساده:
طبق راهنمایی شما از ADOQuery1 رکوردهایی رو به صورت رندوم و در یک حلقه استخراج کردم و در ADOQuery2 ریختم !
این هم کدش :
procedure TFsoal.Button2Click(Sender: TObject);
var
MyRandomNumber,i,n:integer;
begin
if ComboBox1.ItemIndex = 0 then
begin
n:=StrToInt(Edit1.Text);

if n > ADOQuery1.RecordCount then
begin
ShowMessage('تعداد سئوال تشریحی زیاد می باشد');
Exit;
end;

ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Tb_design_question where type_question = ''تشریحی'');
ADOQuery1.Active:=True;

for i:=1 to n do
begin
Randomize;
MyRandomNumber := Random(ADOQuery1.RecordCount);
ADOQuery1.RecNo := MyRandomNumber;

ADOQuery2.Insert;
//ADOQuery2row.Value:=ADOQuery1row.Value;
ADOQuery2type_question.Value:=ADOQuery1type_questi on.Value;
ADOQuery2layer_question.Value:=ADOQuery1layer_ques tion.Value;
ADOQuery2text_question.Value:=ADOQuery1text_questi on.Value;
ADOQuery2option1.Value:=ADOQuery1option1.Value;
ADOQuery2option2.Value:=ADOQuery1option2.Value;
ADOQuery2option3.Value:=ADOQuery1option3.Value;
ADOQuery2option4.Value:=ADOQuery1option4.Value;
ADOQuery2.Post;
end;
end;
end;
برای بخش دوم برنامه چکار کنم ؟

ميخواهم کاربر با نوشتن تعداد سطح سئوال در Edit هاي مربوطه (مثلا : 9 تا تشريحي 11 تا گزينه اي ، 3 تا سخت براي تشريحي 5 تا آسان براي چهار گزينه اي و ... )
بتواند تعداد سئوالات مورد نظر خود را از بانک استخراج کند . یعنی با توجه به نتیجه ADOQuery2 !
تصویری هم از فرم برنامه ضمیمه کردم که در راهنمایی دید بهتری داشته باشید .
ممنون و موفق باشید ...