Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2013, 12:18   #11
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Огромнейшее спасибо Yurk@ выручил.

А еще подскажи, как лучше записывать эти данные в строки через ADOQuery.SQL.Add или методами Post
gigar вне форума Ответить с цитированием
Старый 25.01.2013, 01:08   #12
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Код:
var
  fStr: Integer; // значение B1 предыдущей строки
  vStr: Integer; // значение B5 предыдущей строки
begin

  if ADOQuery1.RecordCount > 1 then
  begin

    ADOQuery1.First;

    fStr := ADOQuery1.FieldByName('B1').asInteger;
    // запоминаем первое значение В1
    vStr := ADOQuery1.FieldByName('B5').asInteger;
    // запоминаем первое значение В5
    ADOQuery1.Next;

    while not ADOQuery1.Eof do                        ADOQuery1.Active:=True;
ADOQuery1.Edit;
ADOQuery1.Insert;
    begin

      ADOQuery1.FieldByName('B2').asInteger := fStr - ADOQuery1.FieldByName
        ('B1').asInteger;
      ADOQuery1.FieldByName('B3').AsFloat := ADOQuery1.FieldByName('B2')
        .asInteger / 100;
      if ADOQuery1.FieldByName('B3').AsFloat >= 1 then
        ADOQuery1.FieldByName('B4').asInteger :=
          Trunc(ADOQuery1.FieldByName('B3').AsFloat)

      else
        ADOQuery1.FieldByName('B4').asInteger := -1;
      ADOQuery1.FieldByName('B5').asInteger := ADOQuery1.FieldByName('B4')
        .asInteger + vStr;
      fStr := ADOQuery1.FieldByName('B5').asInteger;
      // запоминаем В1 будущей предыдущей строки
      vStr := ADOQuery1.FieldByName('B5').asInteger;
      // запоминаем В5 будущей предыдущей строки
      ADOQuery1.Next;
    end;
      ADOQuery1.Post;
  end

  else
    ShowMessage('В таблице меньше 2х строк');

end;
Программа виснет, что тут такое?

Последний раз редактировалось gigar; 25.01.2013 в 10:51.
gigar вне форума Ответить с цитированием
Старый 25.01.2013, 04:19   #13
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Логическая ошибка в коде!
Что у вас выполняется в цикле?
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 25.01.2013, 10:50   #14
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

В цикле выполняются вычисления для таблицы -- по итогу должны быть заполнены все 5 столбцов, но программа зависает.
gigar вне форума Ответить с цитированием
Старый 25.01.2013, 11:16   #15
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Да я спрашиваю не про то что там происходит. А про то что у вас написано в теле цикла.
У вас написано в цикле лишь это остальное к циклу не имеет отношения. Т.к. выпадает из его тела.
Код:
while not ADOQuery1.Eof do                        ADOQuery1.Active:=True;
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 25.01.2013, 11:46   #16
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Дело в том, что в программировании я человек недалекий, поэтому прошу помочь с этим кодом, чтобы он заполнял остальные столбцы таблицы
gigar вне форума Ответить с цитированием
Старый 28.01.2013, 02:39   #17
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Код:
if ADOQuery1.RecordCount > 1 then
begin
  ADOQuery1.First;
  fStr := ADOQuery1.FieldByName('B1').asInteger;
    // запоминаем первое значение В1
  vStr := ADOQuery1.FieldByName('B5').asInteger;
    // запоминаем первое значение В5
  ADOQuery1.Next;
  while not ADOQuery1.Eof do                        
  begin
    ADOQuery1.Edit;
    ADOQuery1.FieldByName('B2').asInteger := fStr - ADOQuery1.FieldByName('B1').asInteger;
    ADOQuery1.FieldByName('B3').AsFloat := ADOQuery1.FieldByName('B2').asInteger / 100;
    if ADOQuery1.FieldByName('B3').AsFloat >= 1 then
      ADOQuery1.FieldByName('B4').asInteger := Trunc(ADOQuery1.FieldByName('B3').AsFloat)
    else
      ADOQuery1.FieldByName('B4').asInteger := -1;
    ADOQuery1.FieldByName('B5').asInteger := ADOQuery1.FieldByName('B4').asInteger + vStr;
    fStr := ADOQuery1.FieldByName('B5').asInteger;
      // запоминаем В1 будущей предыдущей строки
    vStr := ADOQuery1.FieldByName('B5').asInteger;
      // запоминаем В5 будущей предыдущей строки
    ADOQuery1.Post;
    ADOQuery1.Next;
  end;
end
else
  ShowMessage('В таблице меньше 2х строк');
Пробуй
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 30.01.2013, 23:23   #18
gigar
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 23
По умолчанию

Огромное спасибо
gigar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка сравнения строк, язык c OlegALL Общие вопросы C/C++ 1 05.10.2012 09:39
Цикл сравнения и действие hziben Microsoft Office Excel 8 03.08.2012 15:15
Ускорение сравнения строк Alex Cones Общие вопросы Delphi 2 16.01.2011 15:45
Проблема сравнения строк securus Общие вопросы C/C++ 7 21.12.2010 03:12
программа для сравнения строк ТМемо MixanMM Компоненты Delphi 2 02.07.2009 13:28