![]() |
|
![]() ![]() ![]() |
|
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Доброго время суток, господа эксперты. Есть две задачи, вроде решаются просто, но с чего подойти, толком не знаю. Итак, первое: - Есть компонент Table, DBGrid, поле с датой из базы, назовем ее Data1. При нажатии кнопки должна происходить процедура. Берется текущая дата на сегодня, к ней прибавляется неделя или 7 дней, получается результат расчета (число месяц год). Если результат совпадает со строчкой в поле Data1, то строка закрашивается красным цветом.
![]() Вторая задача, такого же типа только наоборот. Из текущей даты вычитаем 3 месяца (90 дней), полученный результат сверяется с полем Data 2, если совпадает, строка закрашивается зеленым цветом. ![]() |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Это сообщение отредактировал(а) Savek - 4.8.2008, 14:26 |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
crem78, Savek,
3 месяца - все-таки никогда не равны 90 (кроме январь_фераль_март);
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Хорошо, а если использовать SQL запросы, какой результат. Думаю, что только он имеет такие широкие возможности. В SQL запросах не селен, помогите решить задачи.
![]() |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 3 Всего: 133 |
Используя SQL-запрос ты не закрасишь строку в DBGrid. И вообще, ты не правильно понимаешь суть задачи. Ты получаешь данные в DBGrid и исходя из этих данных должен закрасить одну из строк DBGrid. Получается, что от БД тебе нужно только получить данные. Закрашивание уже происходит на уровне компонента DBGrid, а не на уровне базы. SQL-запросы работают на уровне базы. Вот если тебе надо получить из БД только данные, удовлетворяющие условию "Если результат совпадает...", то тогда можно. Но, как я понимаю, тебе нужно видеть все данные, и только нужные выделять закрашиванием. Тогда через DrawColumnCell, как тебе и подсказали.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
crem78 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Пишет ошибку: Invalid typecast ![]() А по поводу 90 дней или 3 месяцев, так ты прав необходимо 3 месяца. ![]() Добавлено @ 07:30 Что про SQL запросы, так понимаю, что он работает на уровне запросов. Если попробовать выдернуть данные из базы, как код запроса будет выглядеть? В последующем передать их допустим в QReport ![]() Это сообщение отредактировал(а) crem78 - 5.8.2008, 07:35 |
||||
|
|||||
pseud |
|
||||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
Добавлено через 2 минуты и 15 секунд
ответ на твой вопрос прост:
как говорится "какой вопрос" ты конкретизируй что тебе надо. я, честно говря, из первого поста не понял, что тебе надо выдернуть. Добавлено через 3 минуты и 47 секунд да и что за БД не забудь указать. а то, если надо выдернуть нечто специфическое, то у каждой БД свои особенности языка SQL. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||||
|
|||||||
crem78 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
![]()
Теперь вопрос на засыпку, если за место строки в коде:
Прописать отправку найденных строк в Qreport, возможно ли это организовать, если да то как? ![]() |
||||
|
|||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
1. точно не в этом методе. 2. лучше сформировать отдельную выборку SQL. метод формирования выборки зависит от используемой СУБД. Добавлено через 13 минут и 16 секунд предположим у тебя база Paradox тогда можешь подключить к отчету приблизительно такой DataSet
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
crem78 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Пробовал использовать твой код:
В итоге DBGide не остается не одной строчки. ![]() ![]() Недавно начал использовать FastReport 4.0, все нравиться. Вопрос до сих пор остается открытый, как организовать задачи для передачи результатов в рапорт, а именно FastReport 4.0? ![]() Это сообщение отредактировал(а) Rodman - 7.8.2008, 21:48 |
||||||
|
|||||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 3 Всего: 133 |
DBGide - это что? И у тебя в проекте только приведенный код? Query1 у тебя вообще связана с БД? С Query1 что-нибудь связано?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Сначала была задача просто сделать раскраску для строк при определенных условия (кто не помнит, смотри выше). Теперь задача несколько поменялась. Необходимо вывести отбор записей по условиям и передать их в отчет. Прочитав множество материалов про FastReport, узнал множество интересного, а именно про то, что внутри программы имеется скриптовый язык (PascalScript, C++Script, Jscript, BasicScript). Т.е. перед тем, как отчет будет создан, можно задать условия, по которым отчет должен формироваться. В моем случае задача простая, но большими знаниями в разработке программ просто не имею, поэтому прошу помочь мне в моей задаче. Если спросите, что есть же PascalScript он простой, написан 100% на PascalObject, скажу, просто не помню. Использую базу base.DB, компоненты Table, DBGrid. Вроде бы все, что нужно было, создал, но остался последний рывок, это формирование отчетов. Посоветуйте как решить задачу.
![]() ![]() |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
2crem78, а зачем тебе вообще DBGrid, если результат запроса нужно вернуть только в отчет? Делай нужную выборку данных при помощи DataSet и сразу в отчет вставляй.
Это сообщение отредактировал(а) Kbl4AH - 7.8.2008, 15:36 |
|||
|
||||
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Дык, DBGrid мне и не нужен, мне и нужно сразу ставить в отчет выборку. Т.е. в отчете должны быть только отфильтрованные строки, строки по условию. Меня интересует конкретный пример как это реализовать. Спасибо.
![]() |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: нет Всего: 8 |
если хочешь делать это дело на уровне SQL-запроса, то тебе поможет чудо функция DATEDIFF ( datepart , startdate , enddate )
И смотри разницу хоть в месяцах, хоть в днях, хоть в неделях - вобщем как хочешь) ЗЫ Если что то не понятно - пиши, реализуем! Это сообщение отредактировал(а) morpheyushka - 8.8.2008, 11:57 |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
morpheyushka,
ну и при чем здесь жареные гвозди? -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: нет Всего: 8 |
Да я просто из справки цитату сделал...суть же не в этом...человек хочет разницу в датах получить, причем, если я правильно понял, на уровне запроса. Вот я и подсказал ему функцию, которая облегчает в данной ситуации жизнь ![]() А в цитате синтаксис расписан (правда на англ. языке)...чего тут не понятно? ![]() |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
я не спорю, что в MS SQL твоя чудесная функция заработает. можно еще накопать кучу функций из Oracle, Informix и пр. но ни одна из них не заработает. думаю ты уже догадался почему. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
morpheyushka |
|
|||
![]() Зеленый человек ![]() ![]() Профиль Группа: Участник Сообщений: 563 Регистрация: 26.2.2008 Где: Киев Репутация: нет Всего: 8 |
да...теперь понял...просто увидел слово SQL и включил бронь по поводу Microsoft SQL Server. Перечитал заново ветку, и не нашел ни одного слова про тип базы))) Интересно, а можно съехать на конец рабочей недели ![]() |
|||
|
||||
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
Съехать на конец рабочей недели можно, а иногда даже нужно. Как говориться, если долго мучиться, что ни будь получиться. Так оно и вышло. Воспользовался всеми вашими советами и рекомендациями, получилось то, что хотел. Теперь запрос работает правильно, да еще и в отчет передает. Спасибо большое за помощь, очень помогли. Тема закрыта.
![]() ![]() |
|||
|
||||
crem78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.8.2008 Репутация: нет Всего: нет |
В поисках решения, подсказали еще одно решение, может кому тоже поможет.
![]() Все зависит от конкретной СУБД. Но схема одна: (продолжаем):
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |