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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Я передаю в датасет id заправки, так вот по одним заправкам вообще не строится, а по другим за определенные даты строится, а за другие нет (значение 0)

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    понимаете телепатов нет.
    что за датасет?
    какое отношение он имеет к предыдущему вопросу?
    поле даты содержит время?
    какая структура датасета?
    ну и кусок тестовых данных в студию.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Я предложил три варианта на выбор:
     
    1. Для разных смен график будет один поверх другого;
    2. График для дней с несколькими сменами будет "шире";
    3. График для любого дня должен быть одинаковой "ширины", соответствующей максимальному количеству смен.
     
    Кроме того, я попросил уточнить - как должны отображаться дни, для которых вообще нет записей в БД.
     
    И я не понимаю, к которому же из вариантов, предложенных мной, относится ответ "По оси Х даты. Если за одну дату две смены, тогда дата дублируется.".
     
    Выберите, plz, один вариант из трех, и не забудьте ответить на уточняющий вопрос.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 17:35 11-03-2010 | Исправлено: Odysseos, 17:37 11-03-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos
    я думаю должно получиться типа такого

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Да, по x дата (rc_sd_begindate), без времени, по y количество литров (otklon_fakdvforsmena или otklon_fakrestfromincrease, в зависимости от графика). Каждая линия это резервуар с топливом (заранее не известно сколько резервуаров). Проблема в том что график нормально строится если каждой дате соответствует одна запись (if (qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i]) and(trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime)=j)). Но бывает когда за один день было 2 смены (выборку делаю по сменам из базы, Sql Подробнее... ), тогда каждой дате соответствует две или более записей. Первую запись выводит, а на второй дата по счетчику уже не равняется дате по записи, и все на этом останавливается. Sql для подсчета кол. резервуаров Подробнее...
    Помогите пожалуйста, третий день уже мучаюсь.
    P.S. как вставить картинку в пост?
     
     
    Добавлено:
    Картинку нашел как вставить
     
    Добавлено:

    Цитата:
    по y количество литров
    - опечатался, по y количество отклонений (но это неважно)
     
     
    Добавлено:
    Если за одну дату две смены то будет по Х: 12 мар, 13 мар, 13 мар, 14 мар.

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
    уже легче
    давайте отделим мухи налево-котлеты направо.
    график (х-дата; у-кол-во литров; линии - резервуары). Так?
    если да, то мой график - это то что примерно должно получиться.
    тогда в датасет который выводит график содержит поля
    (дата. литры. резервуар) и все это только для ОДНОЙ смены!
    соотвественно выбор смены это уже другой запрос.
    итог: получается классический мастер-детайл
    где мастер выбор смены, а детайл по которому стоится график
    (дата. литры. резервуар)  
    ЗЫ: ваши sql запросы мне ни о чем не говорят. т.к. нет хотябы стуктуры таблиц (ну и желательно данных) поэтому првильность sql - это на вашей совести
     
    Добавлено:

    Цитата:
    12 мар, 13 мар, 13 мар, 14 мар.

    интересно! пример графика в студию

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



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

    Цитата:
    (дата. литры. резервуар) и все это только для ОДНОЙ смены!

    Все в одном датасете, в другом выбираю количество резевруаров, т.е. линий сколько будет на графике.
    К примеру я сделал запрос с 1 марта по 13 марта, вывело 72 записи. 9 записей по 31 резервуару, 9 по 32, 9 по 33.....9 по 38 (получается 8 резервуаров, т.е. 8 линий на графике). Т.к. у каждого резервуара 9 записей, каждой записи соответствует дата: 1мар, 2мар, 3 мар, 3 мар, 4мар.....8мар. Т.к. 3 марта было 2 смены за день (т.е. две записи), 3 мар на графике нужно вывести два раза (значения по У будут разные). Вот из за этого график не строится когда сравниваю даты. В принципе можно просто все данные вывести из запроса, без сравнения дат. Как это сделать я просто не знаю.

    Цитата:
    интересно! пример графика в студию

    В том то и дело что такого графика нет.
     
     
     

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Мужик!.. Ты на мой вопрос так и не ответил, блин! Это разве так сложно - ответить на уточняющий вопрос, предельно ясно сформированный???
     
    Еще раз его повторю:
     
    Как должен отображаться график, если смен больше одной:
     
    1. Для разных смен график будет один поверх другого;
    2. График для дней с несколькими сменами будет "шире";
    3. График для любого дня должен быть одинаковой "ширины", соответствующей максимальному количеству смен.
     
    А также - должны ли с нулевым значением отображаться дни, для которых вообще нет записей в БД (или их просто пропускать, и точки на графике будут идти, к примеру, так - 4.03  5.03  5.03  6.03  9.03)?
     
    Ответь, plz, просто номером, а на уточненение просто - да/нет.
     
    ...Я тебе твой цикл правильно напишу за пять минут, ты только ответь.
     
     
    Добавлено:
    greenpc
     
    Я думаю, что ни фига не так - я уже понял, в общем, что ему нужен вариант 2, но так и не увидел ответ про даты с отсутствием смен.

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

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
     
    Опять же, кажется, нет. Они ему, похоже, в одном графике нужны, просто как последовательные значения. То есть - по оси X все-таки смены.

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



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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Момент первый. В запросе имеет смысл фильтровать значения по заданным датам, а не выбирать всю историю - и трафик меньше, и выбранных данных на клиента (= занятый объем памяти на клиенте) меньше, и работать с ними легче.
     
    Момент второй - как я понимаю, в запросе мы получаем данные сразу по всем резервуарам - тоже имело бы смысл выполнять отдельный запрос по каждому резервуару.
     
    Кроме того - запрос обязан быть отсортирован по возрастанию даты и по возрастанию номера смены. Иначе надо будет отдельно выбирать его данные в некий промежуточный буфер - ну хоть TList - и сортировать.
     
    Ну, да ладно. Итак:
     

    Код:
     
    Подробнее...
     


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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos
    Спасибо большое, только происходит зацикливание вот здесь:
    while trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime) < j do
    Если я выбрал период с 1 марта по 12 марта, а в базе только данные до 8 марта, то строит до 8 марта, а потом зацикливается. Помогите этот штрих убрать, я уже ничего не соображаю...Если что вот полный код: Подробнее...

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Полностью код, который получился, покажите.
     
    Добавлено:
    Man Without Face
     
    Да! И покажите уж, заодно, и запрос.
     
    Добавлено:
    Odysseos
     
    ...Во всех циклах while по q - добавьте до основного условия еще одно:
     

    Код:
     
    not q.Eof and
     

     
    Или посмотрите поправленный код в предыдущем посте.

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    тут еще мог напороть с массивом: if qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i] then begin
    Полный код: Подробнее...
    Запросы:
    Подробнее...

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Я имел в виду, вообще-то, код только самого цикла, а не всей процедуры...
     
    Перепишите цикл вот так:
     

    Код:
     
    Подробнее...
     

     
    Добавлено:
    Man Without Face
     
    тут еще мог напороть с массивом:
    if qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i] then begin

     
    Наверняка - если поле rc_smenavol_volumenum содержит не последовательные номера резевуаров, начиная с 0, а некие id, могущие быть и не с нуля, и с промежутками.

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos
    Я бы картинку прикрепил бы, да инет глючный. Поле rc_smenavol_volumenum последовательные значения не с 0 (31,32,33,34,35 и т.д.). Отойти нужно, буду через час, последний код проверю. Спасибо.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    Я посмотрел в полном коде процедуры - нет, с номерами резервуаров все правильно должно быть. Сравнение же не с самим значением i, а как раз с get_id(i) (которая в данном случае - mproduct[i]).
     
    ...Кстати - промежуточную переменную count_product можно вообще не использовать, и делать цикл:
     

    Код:
     
    for i := Low(mproducts) to High(mproducts) do begin
     

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Odysseos
    Зацикливание в последнем коде, изменил  
    while not qChart2.Eof and (trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime) < j) do
    на
    while not qChart2.Eof and (trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime) < Trunc(cxdedReservFrom.Date)) do
    В итоге рисует первую линию (резервуар) не до конца (5-6 точек) и не сначала.
    Фишка где то здесь:
    if qChart2.FieldByName('rc_smenavol_volumenum').AsInteger = mproduct[i]  
    В отладчике ('rc_smenavol_volumenum').AsInteger принимает почему только значения 31 и 32 (должно быть от 31 до 38), а если навести на mproduct то показывает значения 31,32...37,38. В итоге другие линии рисуются в 0.
     
     
    Добавлено:
    Odysseos
    Когда  ('rc_smenavol_volumenum').AsInteger принимает значение 32 то даты не равняются никогда:
    while not qChart2.Eof and (trunc(qChart2.FieldByName('rc_sd_begindate').AsDateTime) = j) do begin
    Поэтому нули лупит. Но почему дата сет дальше по резервуарам не идет (33,34 и т.д.).
     
     
    Добавлено:
    Odysseos
    Вроде нашел:
    После каждого следующего резервуара в датасете нужно как то J обновлять: for j := Trunc(cxdedReservFrom.Date) to trunc(cxdedReservTo.Date) do begin

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man Without Face
     
    О-хо-хонюшки...
     
    Как, интересно, вот это:
     

    Код:
     
    ORDER BY V."rc_smenavol_volumenum", s."rc_sd_begindate"
     

     
    согласуется с моим примечанием "запрос обязан быть отсортирован по возрастанию даты и по возрастанию номера смены". Типа - порядок сортировки не важен, главное, чтоб и то, и то стояло в ORDER BY? Местами их поменяйте - и наступит всем счастье, счастье на века.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 16:16 12-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