Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет, есть такой вот кусочек кода (строю график), можно ли как нибудь если условие не выполняется откинуть счетчик на одну единицу назад (один день):
              for j:=Trunc(cxdedReservFrom.Date) to Trunc(cxdedReservTo.Date) do begin
                if (qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i])and(trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime)=j) then begin
                  if cxRadioGroup1.ItemIndex = 0 then
                    begin //График фактического отклонения движения за смену от расчетного
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakdvforsmena').AsInteger,DateToStr(j));
                    end
                  else
                    begin //График фактического остатка от нарастающего расчетного
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakrestfromincrease').AsInteger,DateToStr(j));
                    end;
                  mseries[dbChart1.SeriesList.Count-1].SeriesColor:=qChart2.FieldByName('producttypes_color').AsInteger;
                  mseries[dbChart1.SeriesList.Count-1].Title:=qChart2.FieldByName('producttypes_productname').AsString + ' ('+
                     qChart2.FieldByName('rc_smenavol_volumenum').AsString + ' резервуар)';
                  qChart2.Next;
                end
                else
                  begin
                    //j:=j-1; ЧТО ТО ВРОДЕ ЭТОГО, НО ТАК НЕЛЬЗЯ
                    qChart2.Next;
                  end;
              end;
     
    Заранее благодарен

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 09:59 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face

    Код:
     
    j:=Trunc(cxdedReservFrom.Date);
    while j<=Trunc(cxdedReservTo.Date) do begin  
    ...
    else  
      j:=j-1;
    ...
    inc(j); //или j:=j+1;
    end;
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:08 11-03-2010 | Исправлено: greenpc, 10:10 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Спасибо, но происходит зацикливание. Не выходит из цикла потому что при неправильном условии постоянно отнимаю единицу, j не может стать больше cxdedReservTo.Date

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:51 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    что Вы спросили

    Цитата:
    можно ли как нибудь если условие не выполняется откинуть счетчик на одну единицу назад (один день):  

    то я вам и ответил. Задавайте пожалуста правильно вопросы.

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:55 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Полный код:  
    Подробнее...

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:55 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face

    Код:
     ....  
               qChart2.FieldByName('rc_smenavol_volumenum').AsString + ' резервуар)';  
                inc(j);  
              end; // Для if
            qChart2.Next;  
    // только еще бы добавил  
            if qChart2.eof then break;
         end; // для while
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:06 11-03-2010 | Исправлено: greenpc, 11:08 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc  
    Не совсем понял, если можно поподробнее. Но if qChart2.eof then break; это отработает только когда все линии построятся, а у меня нужно после каждой выход делать. Спасибо.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:32 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face

    Код:
     
    j:=Trunc(cxdedReservFrom.Date);  
              while j<=Trunc(cxdedReservTo.Date) do begin  
     
                if (qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i])and(trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime)=j) then begin  
                  if cxRadioGroup1.ItemIndex = 0 then  
                    begin //График фактического отклонения движения за смену от расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakdvforsmena').AsInteger,DateToStr(j));  
                    end  
                  else  
                    begin //График фактического остатка от нарастающего расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakrestfromincrease').AsInteger,DateToStr(j));  
                    end;  
                  mseries[dbChart1.SeriesList.Count-1].SeriesColor:=qChart2.FieldByName('producttypes_color').AsInteger;  
                  mseries[dbChart1.SeriesList.Count-1].Title:=qChart2.FieldByName('producttypes_productname').AsString + ' ('+  
                     qChart2.FieldByName('rc_smenavol_volumenum').AsString + ' резервуар)';  
                  inc(j);  
                end;
                qChart2.Next;  
                if qChart2.eof then break;  
              end;  
     
    далее вопрос: что вы хотите увидеть если не выполняется условие, допустем на первом шаге (при j =Trunc(cxdedReservFrom.Date); ) по вашему вычесть день?
     
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:54 11-03-2010
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    Дочерние условия лучше (IMHO) добавлять в том порядке котором пишете на бумаге. Примерно так:

    Код:
     
    if qChart2.eof then break;
    v--\
      i:=1;j:=2; t:=11
      if qChart2.submacro.eof or odd(j) then break;  
     

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:54 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Делается выборка из базы по двум датам. График нормально строился бы, если бы на каждую дату была бы одна запись (по определенному резервуару (кол. резервуаров = кол. линий на графике, заранее не известно)), но бывает когда в один день несколько смен. Получается на одну дату две записи. Когда строю график первая запись выводится и счетчик переходит на другую дату, вторая запись не выводится, т.к. ее дата не равняется дате счетчика. В итоге происходит смешение и все другие записи тоже не выводятся.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 12:16 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    после
    Код:
    for i:=0 to count_product-1 do begin  


    Код:
    qChart2.First

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:48 11-03-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Получается на одну дату две записи.
     
    А как они должны отображаться на графике? Одна поверх другой? Или график для таких дней будет "шире"? Или график для любого дня должен быть одинаковой "ширины", соответствующей максимальному количеству смен?
     
    Также - как должны отображаться дни, для которых вообще нет записей в БД?
     
    ...Иными словами - по оси X должны быть даты или смены?

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 12:58 11-03-2010 | Исправлено: Odysseos, 12:58 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos
    По оси Х даты. Если за одну дату две смены, тогда дата дублируется.
     
     
    Добавлено:
    greenpc
    Итак же дата сет на первой записи стоит?
     
    Добавлено:
    И к тому же если стану после вывода первой линии на первую запись, опять отрисуется первая, а не вторая...

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:06 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos

    Цитата:
    Также - как должны отображаться дни, для которых вообще нет записей в БД

    я бы сказал как должен отображаться график
    Man Without Face

    Код:
     
     for j:=Trunc(cxdedReservFrom.Date) to
          Trunc(cxdedReservTo.Date) do begin  
          if qChart2.locate('rc_smenavol_volumenum; rc_sd_begindate', VarArrayOf([mproduct[i], j]),[]) then  begin  
                  if cxRadioGroup1.ItemIndex = 0 then  
                    begin //График фактического отклонения движения за смену от расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakdvforsmena').AsInteger,DateToStr(j));  
                    end  
                  else  
                    begin //График фактического остатка от нарастающего расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakrestfromincrease').AsInteger,DateToStr(j));  
                    end;  
                  mseries[dbChart1.SeriesList.Count-1].SeriesColor:=qChart2.FieldByName('producttypes_color').AsInteger;  
                  mseries[dbChart1.SeriesList.Count-1].Title:=qChart2.FieldByName('producttypes_productname').AsString + ' ('+  
                     qChart2.FieldByName('rc_smenavol_volumenum').AsString + ' резервуар)';  
                end;  
              end;  
     
    на первой только для первого графика
    или
    должно быть: 1.цикл по сменам
    2. цикл по датам
    3. цикл по всем данным который сбрасыватся при изменеии даты

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:14 11-03-2010 | Исправлено: greenpc, 13:31 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc Не совсем я может вопрос понял. Данные сравниваю по дате и резервуару.
             
    //Подсчитываю количество линий:
            count_product:=0;
            while not(qCharts.Eof) do begin
              inc(count_product);
              SetLength(mproduct,count_product);
              mproduct[count_product-1]:=qCharts.FieldByName('rc_smenavol_volumenum').AsInteger;
              qCharts.Next;
            end;
     
     
    Добавлено:
    rc_smenavol_volumenum - резервуары

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:35 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face

    Цитата:
    Не совсем я может вопрос понял

    где должен находиться график, если нет записи для данного резервуара на дату
    в нуле или иметь прошлое значение.
    PS: результат предыдущего решения?

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:59 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    В нуле

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 14:02 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    проверь чему равно count_product
    код виден при редактировании сообщения #

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:20 11-03-2010 | Исправлено: greenpc, 14:33 11-03-2010
    Man Without Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc Какого именно сообщения?
     
     
    Добавлено:
    greenpc
     
     for j:=Trunc(cxdedReservFrom.Date) to
          Trunc(cxdedReservTo.Date) do begin  
          if qChart2.locate('rc_smenavol_volumenum; rc_sd_begindate', VarArrayOf([mproduct[i], j]),[]) then  begin  
                  if cxRadioGroup1.ItemIndex = 0 then  
                    begin //График фактического отклонения движения за смену от расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakdvforsmena').AsInteger,DateToStr(j));  
                    end  
                  else  
                    begin //График фактического остатка от нарастающего расчетного  
                      mseries[dbChart1.SeriesList.Count-1].Add(qChart2.FieldByName('otklon_fakrestfromincrease').AsInteger,DateToStr(j));  
                    end;  
                  mseries[dbChart1.SeriesList.Count-1].SeriesColor:=qChart2.FieldByName('producttypes_color').AsInteger;  
                  mseries[dbChart1.SeriesList.Count-1].Title:=qChart2.FieldByName('producttypes_productname').AsString + ' ('+  
                     qChart2.FieldByName('rc_smenavol_volumenum').AsString + ' резервуар)';  
                end;  
              end;
     
    Так строится но не за все даты

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:09 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    в моем сообщении  Отправлено: 14:20 11-03-2010 | Исправлено: greenpc, 14:33 11-03-2010  
    нажми кнопку "Редактировать"

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:13 11-03-2010 | Исправлено: greenpc, 15:17 11-03-2010
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru