PDA

View Full Version : علت خطای stack overflow در کد زیر



احمد
یک شنبه 02 آذر 1382, 22:37 عصر
قطعه کد زیر همیشه خطای " استک اورفلو " میدهد . اشکال در چیست ؟لطفا راهنمایی کنید.

with DataMadul1 do
begin
تولید ده رکورد خالی در جدول ممتاز //
if tblMomtas.Active then tblMomtas.Active := False ;
tblMomtas.EmptyTable ;
tblMomtas.Active := True ;
tblMomtas.First ;
for i := 1 to 10 do
begin
tblMomtas.Edit ;
tblMomtas.Append ;
tblMomtas.Post ;
end;
انتقال اطلاعات ده رکورد پرس و جوی اول به جدول ممتاز که در واقع دو فیلد اول جدول ممتاز را پر میکند.//
tblMomtas.First ;
qryFHMan.Active := True ;
qryFHMan.First ;
i := 1 ;
while (not qryFHMan.Eof ) and (i <= 10) do
begin
tblMomtas.Edit ;
tblMomtas.FieldValues['O57SW'] :=
qryFHMan.FieldValues['O5'] +
'-' + qryFHMan.FieldValues['O7'] +
'-' + qryFHMan.FieldValues['OS'] +
'-' + qryFHMan.FieldValues['W'] ;
tblMomtas.FieldByName('TotMarkW').AsString :=
qryFHMan.FieldValues['SUM OF TotalMark'];
tblMomtas.Post ;
tblMomtas.Next ;
qryFHMan.Next ;
i := i + 1 ;
end;
qryFHMan.Active := False ;
انتقال اطلاعات ده رکورد پرس و جوی دوم به جدول ممتاز که در واقع دو فیلد دوم جدول ممتاز را پر میکند.//
tblMomtas.First ;
qryFSub.Active := True ;
qryFSub.First ;
i := 1 ;
while (not qryFSub.Eof) and (i <= 10) do
begin
tblMomtas.Edit ;
tblMomtas.FieldByName('O57S').AsString :=
qryFSub.Fields[0].Value +
'-' + qryFSub.Fields[1].Value +
'-' + qryFSub.Fields[2].Value ;
tblMomtas.FieldByName('TotMarkS').AsString :=
qryFSub.Fields[3].Value ;
tblMomtas.Post ;
tblMomtas.Next ;
qryFSub.Next ;
i := i + 1 ;
end;
qryFSub.Active := False ;
end ;[/code] :( :(

omidsm
پنج شنبه 06 آذر 1382, 20:47 عصر
این کئ رو تو چه Eventی نوشتی

تنها موردی که برای من تابحال این ایرادو داده در مورد فیلد های محاسباتی بوده :evil:
آیااز اونا استفاده کردی یانه؟ :?:

احمد
جمعه 07 آذر 1382, 20:39 عصر
امید خان سلام
با خطایابی بیشتر مشخص شد که خطای مزبور مربوط میشود به فرم گزارش که قطعه کد فوق داده های مورد نیاز گزارش را تهیه میکند.
گزارش شامل تولید چارت از روی داده های فوق میشود که در مرحله اول نمایش مییابد repform.QuickReport1.Preview اما اگر دوباره بخواهیم نمایش یابد خطای Stack Overflow میدهد.
با تحقیق من بنظر میرسد خطا مربوط باشد به حجم استک . احتمالا باید پس از خروج از پیش نمایش چاپ در فرم گزارش بایستی گزارش را از حافظه بصورت دستی پاک کنیم.
احتمال دیگر اینست که حجم اختصاصی به استک کم باشد و باید آنرا افزایش دهیم.
اما متاسفانه راه حذف فرم نمایش و یا افزایش حجم استک را نمیدانم .