ورود

View Full Version : راهنمایی در مورد try...execept



holyspirit
یک شنبه 10 آذر 1392, 12:27 عصر
با سلام خدمت اساتید و دوستان عزیز!
تکه کدی رو نوشتم :

var i,r:LongInt;
begin
i:=0;
while(i<456975)do begin
Randomize;
r:=Random(456975)+1;

try
ADOTable1.Append;
ADOTable1.FieldValues['ID']:=r;
ADOTable1.Post;
ADOTable1.Requery();
i:=i+1;

except

ShowMessage('Dublicate value!!');


end;

مشکلی که بهش برخوردم اینه که دستور except اجرا نمیشه و برنامه پیغام داده تکراری رو صادر می کنه و دستور except اجرا نمیشه . البته لازم بذکره که ، پستهای مربوطه رو هم نگاه کردم ، که یکی از دوستان نوشته بود "پیغام مربوط به کامپایلر میشه و فایل exe رو اجرا بکنین پیغام نمیده " رو امتحان کردم ولی مشکل پابرجا بود (هدف برنامه تولید 456976 شماره تصادفیه بدون تکراره !! بسوزه پدر بی سوادی :گریه:)

یوسف زالی
یک شنبه 10 آذر 1392, 12:56 عصر
سلام.
1- کدتون رو در تگ مخصوص کد قرار بدید تا بشه خوندش.
2- هیچ جا کنترل نشده که شماره تکراری در جدول وارد بشه یا نه، اگر در قید کنترل می شه، باید توضیحات تکمیلی رو بدید.
3- استفاده از Randomize درست نیست در حلقه باشه و یک بارش کافیه.
4- استفاده از Requery در حلقه تابع رو بسیار کند می کنه. بیرون حلقه بگذارید.
5- برای ساخت n عدد بدون تکرار کافیه از روش Shuffling استفاده بشه. توضیحاتش رو در این پست (http://barnamenevis.org/showthread.php?388044-%D8%AF%D9%84%D9%81%DB%8C-%D9%88-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C&p=1923387&viewfull=1#post1923387) بخونید.

holyspirit
یک شنبه 10 آذر 1392, 13:34 عصر
You-See خدا خیرت بده عزیز :قلب: حل شد . :تشویق: نعمتین شماهاااااا

Felony
سه شنبه 12 آذر 1392, 06:32 صبح
برای ساخت n عدد بدون تکرار کافیه از روش Shuffling استفاده بشه. توضیحاتش رو در این پست بخونید.
این برای دوران جوونیه D: ، قبلا هم گذاشته بودمش :


procedure GenerateRandomList(var NumberList: TStringList; const NumberOfRandomGenerated, RandomRange: Integer);
begin
if RandomRange < NumberOfRandomGenerated then
raise Exception.Create('Random range must be equal or greater than number of random generated !');

NumberList.Duplicates := dupIgnore;
NumberList.Sorted := True;
RandSeed := MilliSecondOf(Now);
repeat
NumberList.Add(IntToStr(Random(RandomRange)));
until (NumberList.Count = NumberOfRandomGenerated);
end;

یوسف زالی
سه شنبه 12 آذر 1392, 09:46 صبح
درسته ولی کند تره!
حسنی که داره اینه که اعداد اعداد با فواصل متفاوتی تولید می شن، که گاهی تبدیل به عیب می شه.

Felony
یک شنبه 08 دی 1392, 06:34 صبح
حسنی که داره اینه که اعداد اعداد با فواصل متفاوتی تولید می شن، که گاهی تبدیل به عیب می شه.
این پست رو ندیده بودم ؛
حسن دیگر اون کد این هست که شما میتونید اعداد تولیدی رو در یک بازه خاص در نظر بگیرید و تعداد اعداد تولیدی با بازه تولیدی رابطه ای نداره در صورتی که در کد شما بازه اعداد تولیدی همان تعداد اعداد تولیدی هست ، فرض کنید من میخوام 10 عدد تصادفی در بازه 1 تا 100 تولید کنم ، خروجی کد شما بی شک 1 تا 10 خواهد بود !

یوسف زالی
یک شنبه 08 دی 1392, 09:37 صبح
خب نه دیگه.
مجموعه رو افراز کنید برحسب هرچیز که میخواهید.
مجتبی حون کار سختی نیست اصلا. طرف یکم کار با اندیس باید بلد باشه تا هر چی می خواد در بیاره.
قبول کن که روش شما کندتره! :لبخند:

Felony
یک شنبه 08 دی 1392, 09:43 صبح
قبول کن که روش شما کندتره!
حرف من چیز دیگه ای بود ! من در مورد کند بودنش نظری دادم ؟!

یوسف زالی
یک شنبه 08 دی 1392, 10:01 صبح
فلونی جون دعوا داری ها! "طرف یکم کار با اندیس باید بلد باشه تا هر چی می خواد در بیاره." اصلا کار سختی نیست و این حرف که اعداد از 1 تا 10 می شن، به سادگی قابل اصلاحه. با استفاده از RandomRange و یک تقسیم کوچولو!