| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Как сделать запрос даты без года |
| Автор: kovalenko123 17.12.2008, 17:50 | ||
| Здравствуйте уважаемые программисты! Столкнулся с такой задачей: надо профильтровать БД и вывести всех людей у кого сегодня день рожденья, написал вот такую ерунду
Все проблема в том что мне сдесь не нужен год, а когда вместо года в запросе ставлю * то ниче не отображаеться помогите пожалуйста. (я смотрел на форуме похожие темы и ответа в них не нашел) |
| Автор: Akella 17.12.2008, 19:43 |
| http://forum.vingrad.ru/forum/topic-233250/kw-%D0%B4%D0%B0%D1%82%D0%B0-firebird-%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D1%82%D1%8C-%D0%B4%D0%B0%D1%82%D1%8B.html даны ответы и есть ссылки на др. сайты. Дерзай. |
| Автор: Akella 17.12.2008, 19:59 |
| http://www.sql.ru/forum/actualthread.aspx?tid=612122 ещё |
| Автор: kovalenko123 18.12.2008, 19:13 | ||
| Спасибо за ссылки! опираясь на них я написал
Говорит не опознанная ошибка... подскажи пожалуйста что тут не так |
| Автор: Akella 18.12.2008, 19:36 |
| убери ExecSQL и почитай, для чего ExecSQL, а для чего Open, т.е. в каких случаях что нужно использовать Добавлено через 7 минут и 37 секунд Ты так и не понял. DateToStr(DateTimePicker1.date) засунет в запрос всю дату, т.е. вместе с годом. Я не знаю синтаксиса акцесса. http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1676385 Посмотри и подумай, как можно в акцесс заменить EXTRACT Вот ещё http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1676388 Вот ещё http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1676397 Вот ещё http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1679001 Вот ещё сортировка http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1690254 http://forum.vingrad.ru/index.php?showtopic=233250&view=findpost&p=1690298 Это вырезки из всей темы. Возможно, что форумчане, которые больше соображают в акцессе, переведут код тебе и дадут готовый результат. Извини, так сложилось, что я с акцессом не подружился. |
| Автор: kovalenko123 19.12.2008, 18:48 |
| все равно спасибо за помошь!! (была бы возможность дал бы сразу 100 балов!!! ) но похоже запросы в ib отличаються от акцсесса (( и опять не опознанная ошибка (а команда ExecSQL применяется для запросов не возвращающих результат, вроде так ) |
| Автор: kovalenko123 21.12.2008, 11:04 |
| Да, я так пробовал и получилось, но мне же надо datetimepickerom в like загонять а не так "01.12.%" а это вряд ли получиться (( |
| Автор: Данкинг 21.12.2008, 12:59 |
| Разбей в самой таблице дату на три столбца - день, месяц, год, и не парься. |
| Автор: Kbl4AH 21.12.2008, 14:10 | ||||||||||
Ничего разбивать не нужно... Нужно обрезать год в строке...
А разве, чтобы
P.S. А вообще, нужно дату в типе даты, а не строковом хранить... |
| Автор: Данкинг 21.12.2008, 14:19 |
Кстати, я обычно храню в строковом. Чтобы не было проблем со всякими "региональными настройками". |
| Автор: Kbl4AH 21.12.2008, 14:32 | ||||||
Я раньше тоже в строковом хранил, так как мне это казалось удобнее... Пока со следущим не столкнулся: выбираю поле даты(строковое) датасетом и вставляю в грид... текст запроса такой (чтобы можно было сразу изменять таблицу стандартными возможностями)
В этом случае сортировка неправильная происходит (сортируется как строка, а не дата)... Если делаю так:
P.S. А какие могут быть проблемы с региональными настройками? В делфи тип ДАТА, в БД тип ДАТА... Все нормально должно быть.. Главное, чтоб в делфи ошибки из-за настроек не было при конвертациях всяких, а БД сама "догадается" в каком формате дату вывести.. |
| Автор: Данкинг 21.12.2008, 14:39 | ||
Если потом выбирать сортировать нужно - тогда дело иное. А всякие там порядки отображения даты, например? |
| Автор: Kbl4AH 21.12.2008, 14:42 |
Так это ведь уже над переменной делается... А тип он и есть тип... он для любых настроек одинаков... Ведь, по-моему, в БД дата хранится в полном формате (со временем), а уже отображается в предпочтительном виде... В любом случае представление переменной типа дата от самого типа не зависит... ... или я чего-то не понимаю... Можно пример в таком случае? |
| Автор: kovalenko123 21.12.2008, 16:26 | ||||
Ну это же глупость
а вот этот код ничего не вернул так опять же мне надо в like вставить дату из Datetimepickera тока чтоб год не учитывался а как это сделать незнаю |
| Автор: Данкинг 21.12.2008, 18:12 | ||
Я теперь и сам уже сомневаюсь. Почему это глупость?! А хранить ФИО разбитым по полям - тоже глупость?! В общем, на Access (проверял именно в самом .MDB) вот такой запрос у меня работает:
|
| Автор: Kbl4AH 21.12.2008, 19:39 | ||||||
может ничего и не должен вернуть? может нет записей удовлетворяющих условию? функция верная, я проверял пробными запросами... Для MS SQL
вернет 01.12. че за SQL у тебя используется? Может там другая функция? Хотя, если бы функция LEFT не работала, то ошибка бы выдавалась... Проверь, точно у тебя есть запись с такой датой 01.12.хххх? А, погодь... косяк... надо так...
P.S. kovalenko123, проверь в самом SQL Builder, что запрос возвращает... |
| Автор: Akella 22.12.2008, 10:35 |
| Данкинг, думаю, что ты неправильно делаешь, не зря ведь придумали специальный тип Дата в базах данных. Можно ж было как boolean хранить 0 или 1. |
| Автор: Данкинг 22.12.2008, 11:43 |
Что делаю - храню дату как строку? Да я и не спорю, что неправильно. |
| Автор: kovalenko123 22.12.2008, 18:47 | ||||
Данкинг,
Код сработал а как теперь его с datetimepickerom связать ?? я попробовал
но ничего не выходит.... что можно сделать ? Kbl4AH, не там точно есть запись на 01.12.2008 |
| Автор: Kbl4AH 22.12.2008, 19:45 | ||||
или
|
| Автор: Данкинг 22.12.2008, 19:50 | ||
Kbl4AH, а значение datepicker'а почему не обрезал?
|
| Автор: Kbl4AH 22.12.2008, 19:55 |
А оно уже обрезанное в следствие использования ShortDateFormat := 'dd.mm'; P.S. Хотя лучше без формата даты... мне твоя обрезка строки больше понравилась... просто мне это в голову не пришло |
| Автор: Akella 22.12.2008, 20:24 |
| товарищи |
| Автор: Kbl4AH 22.12.2008, 20:25 | ||
И что? Я для этого ShortDateFormat := 'dd.mm'; и использовал... Проверил, поставил американский формат... примеры работают... А с обрезкой строки, и правда, косяк будет... |
| Автор: Akella 22.12.2008, 20:29 | ||||
| Kbl4AH, Добавлено через 2 минуты и 8 секунд
переделай на
И ты увидишь то, что получит SQL сервер. А когда увидишь, то подумай, знает ли SQL сервер про твой DateTimePicker1? |
| Автор: Kbl4AH 22.12.2008, 20:32 | ||
|
| Автор: kovalenko123 23.12.2008, 13:57 | ||
| Kbl4AH, А с обрезкой строки, и правда, косяк будет... а какой косяк?? твой пример
Работает ! огромное спасибо !!! а так же спасибо всем кто принимал участие в обсуждении!!! |
| Автор: Kbl4AH 23.12.2008, 14:27 | ||
Допустим дата 10 декабря 2008 года... русский формат 10.12.2008 после вырезки первых 5ти символов будет '10.12' американский формат 12/10/2008 после вырезки первых 5ти символов будет '12/10' а при конвертации DateTimeToString(результат: string, 'dd.mm', дата: TDateTime) всегда получится строка того формата, который указан в процедуре, в данном случае '10.12'.... и без разницы стандарт даты какой страны будет на компьютере... |
| Автор: kovalenko123 23.12.2008, 18:37 |
| Так я дату та в базе хроню, мне разве не пофиг какой стандарт на компе стоит? и потом у меня на заполнение используеться "русский формат" и запрос я делаю "русским" поэтому косяков быть не должно |
| Автор: Kbl4AH 23.12.2008, 19:34 |
| У тебя и не будет косяков... Они при запуске твоей проги на другом компьютере были бы возможны... Универсальной прога должна быть в идеале... |
| Автор: Akella 23.12.2008, 20:11 |
тебе ж сказали, что DateTimePicker передаёт НЕ ТАК КАК ТЫ ХОЧЕШЬ, а так, как указано в ОСи |
| Автор: kovalenko123 24.12.2008, 18:33 |
| Понял, Спасибо! |