Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
ВнизПоследняя надежда Найти похожие ветки
← →
Defort © (2006-12-16 23:20) [0]Последняя надежда на вас, мастера. Я так и не смог разобраться со своей проблемой.
Процедура вычислимых полей:procedure TDataModule1.ADOTable3CalcFields(DataSet: TDataSet);
var peni, ost, ostatok: real;
date, must: TDateTime;
days: word;
begin
must:=ADOTable3DSDesigner.AsDateTime;
if ADOTable3.FieldValues["Дата платежа"]=NULL then
date:=now;
if date>must then
begin
days:=DaysBetween(must, date);
peni:=peni+(ADOTable3DSDesigner2.AsCurrency-ADOTable3DSDesigner7.AsCurrency)*ADOTable1DSDesigner5.AsFloat;
ost:=peni+ADOTable3DSDesigner2.AsCurrency-ADOTable3DSDesigner7.AsCurrency;
ADOTable3DSDesigner3.Value:=peni;
ADOTable3DSDesigner5.Value:=ost;
if ost=0 then
ADOTable3.FieldValues["Погашен"]:=true;
end;
end;
Когда доходит до строки
ADOTable3DSDesigner3.Value:=peni;
начинает заного. Не знаю как быть. Нид хелп!
← →
BiN © (2006-12-17 00:17) [1]Очевидно, поле DSDesigner3 у тебя не calculated, из-за чего происходит рекурсивный дедлок.
← →
MsGuns © (2006-12-17 00:19) [2]засстрелиться ;(((
← →
Defort © (2006-12-17 11:12) [3]
> Очевидно, поле DSDesigner3 у тебя не calculated, из-за чего
> происходит рекурсивный дедлок.
Я проверял это. Поле calculated, факт!
← →
MsGuns © (2006-12-17 11:20) [4]А засунуть всех этих бесконечных "дизайнеров" в связанный запрос и поместить на сервер не пробовали ?
Чтобы избавить клиентский код от этого кошмара.
И просто совет: не пишите так никогда:peni:=peni+(ADOTable3DSDesigner2.AsCurrency-ADOTable3DSDesigner7.AsCurrency)*ADOTable1DSDesigner5.AsFloat;
Есть точные сведения, что составление и, особенно, разбор такого кода убивает слона. В то время как никотин, как известно, органичивается лошадью.
← →
Defort © (2006-12-17 12:11) [5]
> А засунуть всех этих бесконечных "дизайнеров" в связанный
> запрос и поместить на сервер не пробовали ?Чтобы избавить
> клиентский код от этого кошмара.
Пока моя программа не сетевая, а запросы я не учил.
Но я нашел проблема, действительно, оказывается пени были не calculated.
Теперь переполнения нет, но все равно ничего не считает - просто пустые значения (даже не ноль!).
Код с комментариями:procedure TDataModule1.ADOTable3CalcFields(DataSet: TDataSet);
var peni, ost, ostatok: real;
date, must: TDateTime;
days: word;
begin
must:=ADOTable3DSDesigner.AsDateTime;
if ADOTable3.FieldValues["Дата платежа"]=NULL then
date:=now;
if date>must then
begin
days:=DaysBetween(must, date);
peni:=peni+(ADOTable3DSDesigner2.AsCurrency{сумма платежа}-ADOTable3DSDesigner7.AsCurrency{уже заплачено})*ADOTable1DSDesigner5.AsFloat{коэффициент пени};
ost{остаток}:=peni+ADOTable3DSDesigner2.AsCurrency{исходня сумма}-ADOTable3DSDesigner7.AsCurrency{уже заплачено};
ADOTable3DSDesigner3.Value{пени}:=peni;
ADOTable3DSDesigner5.Value{остаток}:=ost;
if ost=0 then
ADOTable3DSDesigner4.Value{текущий статус}:=true;
end;
end;
Поля, которые он должен считать, остаются пустыми.
Возможно это связано с тем, что он вычисляет поля для связанной таблицы? Вот сам код формирования данных для этой табоицы:while days<days2 do
begin
DataModule1.ADOTable3.Insert; //по задумке добавление новой строки
DataModule1.ADOTable3.FieldValues["LinkKey"]:=DataModule1.ADOTable1.FieldValues[ "Key1"]; {перед этим для таблицы 1 была выполнена команда post и edit для того, чтобы linkkey имел значение}
DataModule1.ADOTable3.FieldValues["Дата платежа"]:=days;//присваиваение полю Дата платежа текущей даты
DataModule1.ADOTable3.FieldValues["Сумма платежа"]:=summ;
days:=IncMonth(days);
DataModule1.ADOTable3.Post;
end;
← →
MsGuns © (2006-12-17 18:10) [6]Аминь..
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c