Показать сообщение отдельно
  #2  
Старый 19.11.2013, 11:29
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YuliyaKar
Здравствуйте!!!
Я делаю программу погрузки судна, где мне надо вычислить динамическую остойчивость, а она вычисляется рекуррентной формулой.
Есть таблица http://cs413218.vk.me/v413218232/4d82/hJvBvamCAc0.jpg
(на рисунку внизу возле диаграммы)
и динам остойчивость вычисляется след образом
вторая строка столбца Ld вычисляется тк
Ld [2]=Lst[1]+Lst[2]+Ld[1]
Вообще-то над таблицами так не издеваются.
Чтобы вычислить выражение "Ld [2]=Lst[1]+Lst[2]+Ld[1]", тебе нужно переместиться к записи с кодом 1, прочитать оттуда значения полей "Lst" и "Ld", потом переместиться к записи с кодом 2, прочитать оттуда значение поля "Lst", всё сложить и записать результат в поле "Ld".
И всё это вряд-ли может располагаться в обработчике события "OnCalcFields".

Пример вычисления выражения "Ld [2]=Lst[1]+Lst[2]+Ld[1]":
Код:
var
  Sum: Double;
begin
  Sum := 0;
  
  if Table5.Locate('Kodo', 1, []) then
    Sum := Sum + Table5.FieldByName('Lst').Value + Table5.FieldByName('Ld').Value
  else
    raise Exception.Create('Не найдена нужная запись');

  if Table5.Locate('Kodo', 2, []) then
    Sum := Sum + Table5.FieldByName('Lst').Value
  else
    raise Exception.Create('Не найдена нужная запись');
      
  Table5.Edit;
  Table5.FieldByName('Ld').Value := Sum;
  Table5.Post;
end;
Ответить с цитированием