Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

переполнение стека в Grid. Почему?   Найти похожие ветки 

 
MMF   (2002-11-13 14:14) [0]

Уважаемые, может кто знает как побороть проблему:
IBase6.0, IBX, D5, InfoPower3000. Две таблицы ШапкаЗаказа и ТабличнаяЧасть связаны Master-detal. В табличной части CachedUpdates=true. На форме показываю итог по полю Summa, который перерасчитываю по событию этого поля OnChange(). Изредка (может раз на 100 открытий документов) возникает исключение по переполнению стека. Где это может сидеть?


 
Johnmen   (2002-11-13 14:40) [1]

Значит этот единственный на 100 отличается от других 99...
А наиболее частая причина Stack Overflow - бесконечный рекурсивный вызов процедур(ы)/функций(и).


 
MMF   (2002-11-13 14:53) [2]

> Johnmen © (13.11.02 14:40)
как правильно определить итог по полю при несохраненных изменениях в таблице. Мне не хочется использовать буферную таблицу для хранения табличной части документа.


 
Johnmen   (2002-11-13 15:01) [3]

>MMF © (13.11.02 14:53)

Не совсем уловил...
Но так, как ты делаешь, это нормально...
Пробежаться по НД и подсчитать сумму.


 
MMF   (2002-11-13 15:06) [4]

Ошибка однозначно в этих трех строчках:
glDocSum:=0;
DM.T_ZakazT.First;
while Not(DM.T_ZakazT.Eof) do
begin
if Not(DM.T_ZakazT.fieldbyName("Summa").isNull) then
glDocSum:=glDocSum+DM.T_ZakazT.fieldbyName("Summa").AsFloat;
DM.T_ZakazT.Next;
end;
Может тут причина в кэшировании изменений? я в полных непонятках


 
Johnmen   (2002-11-13 15:11) [5]

if не нужен.


 
MMF   (2002-11-13 15:17) [6]

>Johnmen © (13.11.02 15:11)
А на новой вставленной записи разве не будет исключения при попытке для пустого поля сделать .AsFloat? Ну и все-таки он не может привести к переполнению стека.
Я вобщем-то, конечно зря задал вопрос в конференцию, без кода что тут можно ответить.


 
Johnmen   (2002-11-13 15:20) [7]

>MMF © (13.11.02 15:17)

Нет, не может...
Смотри в сторону обрабатываемых тобой событий НД и грида (если он использ-ся)...


 
MMF   (2002-11-13 15:30) [8]

>Johnmen © (13.11.02 15:20)
У меня на событие смены столбца в гриде делаются такие действия:
L_Sum.caption:="Всего: "+FloatToStr(glDocSum);
L_Sum.Refresh;
FName:=LowerCase(Trim(Grid1.SelectedField.FieldName));
if Fname="prodname" then
with grid1.DataSource.DataSet do
begin
if FieldByName("Format").IsNull then
FieldByName("Format").asInteger:=glMainFormat;
if FieldByName("Cena").IsNull then
FieldByName("Cena").asFloat:=Round(glMainCena*
1000)/1000;
end
else
IF (Fname="cena") or (Fname="amount") then
with grid1.DataSource.DataSet do
begin
FieldByName("Summa").asFloat:=FieldByName("cena").asFloat*
FieldByName("Amount").asFloat;
end;
Может он здесь как-то зацикливается? Хотя при изменении поля суммы эта процедура ничего не делает.


 
Johnmen   (2002-11-13 15:42) [9]

При смене столбца в гриде неявно вызывается OnChange на поле (если менялось) дальше, думаю, понятно !

PS
Может быть просто завести калькулируемое поле "Summa" ?


 
MMF   (2002-11-13 15:50) [10]

Калькулируемое не подходит, ну хотят бухгалтера подгонять копейки хоть ты тресни.
вот если бы он всегда зависал, а так я не могу выделить комбинацию условий при которых возникает исключение.


 
MMF   (2002-11-13 15:59) [11]

Я наверное просто буду пересчитывать суммы и подставлять значения по-умолчанию полей не на событие выхода из соответствующей колонки, а на Onchange() поля. И нет проблем (наверное)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-4500
skirdov
2002-11-20 20:22
2002.12.02
Подскажите, как передать параметры форме


4-4671
Arioch
2002-10-18 09:38
2002.12.02
D5, MS Heap manager - где найти?


3-4234
Михич
2002-11-14 13:59
2002.12.02
Маска в DBGrid


6-4558
XED
2002-10-03 22:43
2002.12.02
Какой лучше использовать компонент для почты!!!


4-4687
Зинтересованный
2002-10-18 05:05
2002.12.02
Bitmap





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский