Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Расчеты из полей с датой |
Автор: crem78 4.8.2008, 14:13 |
Доброго время суток, господа эксперты. Есть две задачи, вроде решаются просто, но с чего подойти, толком не знаю. Итак, первое: - Есть компонент Table, DBGrid, поле с датой из базы, назовем ее Data1. При нажатии кнопки должна происходить процедура. Берется текущая дата на сегодня, к ней прибавляется неделя или 7 дней, получается результат расчета (число месяц год). Если результат совпадает со строчкой в поле Data1, то строка закрашивается красным цветом. ![]() Вторая задача, такого же типа только наоборот. Из текущей даты вычитаем 3 месяца (90 дней), полученный результат сверяется с полем Data 2, если совпадает, строка закрашивается зеленым цветом. ![]() |
Автор: Savek 4.8.2008, 14:24 | ||
|
Автор: pseud 4.8.2008, 15:42 | ||
crem78, Savek, 3 месяца - все-таки никогда не равны 90 (кроме январь_фераль_март);
|
Автор: crem78 4.8.2008, 17:35 |
Хорошо, а если использовать SQL запросы, какой результат. Думаю, что только он имеет такие широкие возможности. В SQL запросах не селен, помогите решить задачи. ![]() |
Автор: Poseidon 4.8.2008, 19:15 |
Используя SQL-запрос ты не закрасишь строку в DBGrid. И вообще, ты не правильно понимаешь суть задачи. Ты получаешь данные в DBGrid и исходя из этих данных должен закрасить одну из строк DBGrid. Получается, что от БД тебе нужно только получить данные. Закрашивание уже происходит на уровне компонента DBGrid, а не на уровне базы. SQL-запросы работают на уровне базы. Вот если тебе надо получить из БД только данные, удовлетворяющие условию "Если результат совпадает...", то тогда можно. Но, как я понимаю, тебе нужно видеть все данные, и только нужные выделять закрашиванием. Тогда через DrawColumnCell, как тебе и подсказали. |
Автор: crem78 5.8.2008, 07:30 | ||||
Пишет ошибку: Invalid typecast ![]() А по поводу 90 дней или 3 месяцев, так ты прав необходимо 3 месяца. ![]() Добавлено @ 07:30 Что про SQL запросы, так понимаю, что он работает на уровне запросов. Если попробовать выдернуть данные из базы, как код запроса будет выглядеть? В последующем передать их допустим в QReport ![]() |
Автор: crem78 5.8.2008, 11:59 | ||||
![]()
Теперь вопрос на засыпку, если за место строки в коде:
Прописать отправку найденных строк в Qreport, возможно ли это организовать, если да то как? ![]() |
Автор: pseud 5.8.2008, 13:48 | ||
1. точно не в этом методе. 2. лучше сформировать отдельную выборку SQL. метод формирования выборки зависит от используемой СУБД. Добавлено через 13 минут и 16 секунд предположим у тебя база Paradox тогда можешь подключить к отчету приблизительно такой DataSet
|
Автор: crem78 6.8.2008, 16:16 | ||||||
Пробовал использовать твой код:
В итоге DBGide не остается не одной строчки. ![]() ![]() Недавно начал использовать FastReport 4.0, все нравиться. Вопрос до сих пор остается открытый, как организовать задачи для передачи результатов в рапорт, а именно FastReport 4.0? ![]() |
Автор: Poseidon 6.8.2008, 23:47 | ||
DBGide - это что? И у тебя в проекте только приведенный код? Query1 у тебя вообще связана с БД? С Query1 что-нибудь связано?
|
Автор: crem78 7.8.2008, 15:06 |
Сначала была задача просто сделать раскраску для строк при определенных условия (кто не помнит, смотри выше). Теперь задача несколько поменялась. Необходимо вывести отбор записей по условиям и передать их в отчет. Прочитав множество материалов про FastReport, узнал множество интересного, а именно про то, что внутри программы имеется скриптовый язык (PascalScript, C++Script, Jscript, BasicScript). Т.е. перед тем, как отчет будет создан, можно задать условия, по которым отчет должен формироваться. В моем случае задача простая, но большими знаниями в разработке программ просто не имею, поэтому прошу помочь мне в моей задаче. Если спросите, что есть же PascalScript он простой, написан 100% на PascalObject, скажу, просто не помню. Использую базу base.DB, компоненты Table, DBGrid. Вроде бы все, что нужно было, создал, но остался последний рывок, это формирование отчетов. Посоветуйте как решить задачу. ![]() ![]() |
Автор: Kbl4AH 7.8.2008, 15:33 |
2crem78, а зачем тебе вообще DBGrid, если результат запроса нужно вернуть только в отчет? Делай нужную выборку данных при помощи DataSet и сразу в отчет вставляй. |
Автор: crem78 7.8.2008, 17:37 |
Дык, DBGrid мне и не нужен, мне и нужно сразу ставить в отчет выборку. Т.е. в отчете должны быть только отфильтрованные строки, строки по условию. Меня интересует конкретный пример как это реализовать. Спасибо. ![]() |
Автор: Akella 7.8.2008, 21:45 |
учти, что 3 месяца <> 90 дней!!! |
Автор: morpheyushka 8.8.2008, 11:55 | ||
если хочешь делать это дело на уровне SQL-запроса, то тебе поможет чудо функция DATEDIFF ( datepart , startdate , enddate )
И смотри разницу хоть в месяцах, хоть в днях, хоть в неделях - вобщем как хочешь) ЗЫ Если что то не понятно - пиши, реализуем! |
Автор: pseud 8.8.2008, 15:18 |
morpheyushka, ну и при чем здесь жареные гвозди? |
Автор: morpheyushka 8.8.2008, 15:36 |
Да я просто из справки цитату сделал...суть же не в этом...человек хочет разницу в датах получить, причем, если я правильно понял, на уровне запроса. Вот я и подсказал ему функцию, которая облегчает в данной ситуации жизнь ![]() А в цитате синтаксис расписан (правда на англ. языке)...чего тут не понятно? ![]() |
Автор: pseud 8.8.2008, 16:46 |
я не спорю, что в MS SQL твоя чудесная функция заработает. можно еще накопать кучу функций из Oracle, Informix и пр. но ни одна из них не заработает. думаю ты уже догадался почему. |
Автор: morpheyushka 8.8.2008, 17:29 |
да...теперь понял...просто увидел слово SQL и включил бронь по поводу Microsoft SQL Server. Перечитал заново ветку, и не нашел ни одного слова про тип базы))) Интересно, а можно съехать на конец рабочей недели ![]() |
Автор: crem78 16.8.2008, 09:21 |
Съехать на конец рабочей недели можно, а иногда даже нужно. Как говориться, если долго мучиться, что ни будь получиться. Так оно и вышло. Воспользовался всеми вашими советами и рекомендациями, получилось то, что хотел. Теперь запрос работает правильно, да еще и в отчет передает. Спасибо большое за помощь, очень помогли. Тема закрыта. ![]() ![]() |
Автор: crem78 16.8.2008, 12:18 | ||
В поисках решения, подсказали еще одно решение, может кому тоже поможет. ![]() Все зависит от конкретной СУБД. Но схема одна: (продолжаем):
|