| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Помогите составить запрос |
| Автор: ALEXPLUS 8.7.2005, 20:12 |
| Доброе время суток всем! Помогите пожалуйста составить запрос. Есть база данных, в которой дата содержится в трёх полях - Day, Month, Year. Как сделать написать запрос так, чтобы он выбирал записи только в заданном диапазоне даты? |
| Автор: Alex 8.7.2005, 21:01 | ||
А в типе Date не проще хранить? Тогда было бы что-то на подобии
|
| Автор: ALEXPLUS 8.7.2005, 22:29 |
| Я бы с огромным удовольствием переделал это в тип Date, но, к сожалению, нельзя |
| Автор: Alex 8.7.2005, 22:45 | ||
Ну тогда, делай вот так:
|
| Автор: ALEXPLUS 8.7.2005, 23:28 |
| Извини, но я не понял. Прокомментируй пожалуйста свой код. Почему ты умножаешь на 1000, 100? |
| Автор: offline 9.7.2005, 00:00 |
| Для сбора даты в одно пле в запросе используй просто DateSerial(Year;Month;Day), а затем сравнивай эту дату, т.е. установи критерий отбора, вот и все дела |
| Автор: Alex 9.7.2005, 00:02 | ||
| Идея состоит в том, что из трех чисел (год, месяц и день) получают одно большое число. из начальной и конечной даты выборки получают такиеже два больших числа и проверяют входит ли число в диапазон между этими числами. Я не притендую на то, что этот метод самый красивый и правильный, но в одном проекте такая схема работает уже второй год и пока сбоев не давала Добавлено @ 00:05 Ой, немного ошибся, нужно вот так
Добавлено @ 00:07 kirilllius, и где кроме Access вы видели DateSerial? |
| Автор: offline 9.7.2005, 00:25 |
| Да, я делал как-то что-то похожее с базай Access но правда через DateValue(Day+'/'+Month+'/'+Year) и все работало отлично |
| Автор: ALEXPLUS 9.7.2005, 20:02 | ||
Скажите, где тут ошибка?? Говорит, что "Несоответствие типов данных в выражении условия отбора". Все поля в БД текстового типа. Сама база была сделана через Access |
| Автор: offline 9.7.2005, 20:16 |
| DateValue('DayP/MonthP/YearP') Может так DateValue(DayP+'/'+MonthP+'/'+YearP) |
| Автор: ALEXPLUS 9.7.2005, 20:22 |
| DateValue(DayP+'/'+MonthP+'/'+YearP) не получается. |
| Автор: offline 9.7.2005, 20:29 | ||
Сейчас создал базу, подключил к Delphi и выполнил запрос
У меня все сработало и отобрало из данного промежутка даты |
| Автор: ALEXPLUS 9.7.2005, 20:50 | ||
| Я делаю так TADOQuery связываю с TADOConnection Драйвер - Microsoft.Jet.OLEDB.4.0
переменная k - типа string и равна символу одинарная кавычка. Просто так удобней переменная sql - текстовая |
| Автор: offline 9.7.2005, 21:46 | ||
Может это наведет тебя на мысль
|
| Автор: ALEXPLUS 9.7.2005, 22:12 |
| полоностью скопировал твой запрос, но результат тот же - несоответствие типов. Я разобрался немного с DateValue. Этой функции без разницы как я напишу дату. Она понимает и 09/07/2005, и 09.07.2005, и 09-07-2005. Вся проблема состоит в том, чтобы представить в качестве параметра этой функции три текстовых поля из БД. Если тебе несложно, пришли мне на почту свою базу данных и дельфийский проект. Если будешь посылать, то шли на alexplyus [собака] mail.ru |
| Автор: offline 9.7.2005, 22:47 |
| Пример отправил на ящик. Думаю разберешься |
| Автор: ALEXPLUS 10.7.2005, 19:53 |
| Спасибо, разобрался. Твоя база работает, перенёс твою базу в свою программу - работает. Перенес свою базу в твою прогу - не работает. Далее я выяснил, что запрос выполняется при i равном 1,2,3 и 4. При i=5 выдается пресловутая ошибка о несоответствии типов, что в твоей проге, что в моей. Короче разбираюсь дальше. |
| Автор: SergeBS 11.7.2005, 15:11 |
| ALEXPLUS Проверь на диапзон значений (месяц 1..12, день 1..28/30/31) |