Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 01:00   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию Некорректно работает запрос

Здравствуйте.

Вот так выглядит запрос:
Код:
SELECT * 
FROM BASE
WHERE date_waybill  BETWEEN :s AND :po
В параметры подставляю значения с DateTimePicker1 и DateTimePicker2.
Когда ставлю с 19.08.09 по 19.08.09 ничего не нахрдит, хотя записи есть.
Ставлю с 18.08.09 по 19.08.09 находит за 19, всё верно.
Ставлю с 19.08.09 по 20.08.09 ничего не находит, а за 19 запись есть.
Поэтому если нужно узнать что за 18 и 19 число, то приходится ставить числа с 17.08.09 по 20.08.09. Незнаю почему так.

Пробовал и так, но результат тот же...
Код:
SELECT * 
FROM BASE
WHERE date_waybill >= :s AND date_waybill <= :po
Подскажите, пожалуйста,, почему так...???

Последний раз редактировалось Arkuz; 19.08.2009 в 01:06.
Arkuz вне форума Ответить с цитированием
Старый 19.08.2009, 09:00   #2
Власов А.С.
Пользователь
 
Регистрация: 04.08.2009
Сообщений: 48
По умолчанию

Давай пример поглядим
Власов А.С. вне форума Ответить с цитированием
Старый 19.08.2009, 09:10   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Код:
SELECT * 
FROM BASE
WHERE date_waybill >='''+datetost(DateTimePicker1)+''' AND date_waybill <= '''+datetost(DateTimePicker2)+'''
а так?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 19.08.2009, 11:03   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Arkuz, думаю дело в присутствии в дате временной составляющей.

Попробуйте использовать функции Trunc (или Truncate):
Код:
SELECT * 
FROM BASE
WHERE trunc(date_waybill)  BETWEEN :s AND :po
p.s. ну и надеюсь, параметры :s и :рo
задаёте через AsDateTime ?:
Код:
 Query1.ParamByName('s').AsDateTime := trunc(DateTimePicker1.Date);
 Query1.ParamByName('po').AsDateTime := trunc(DateTimePicker2.Date);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2009, 15:35   #5
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Serge_Bliznykov, увы trunc не помог, вообще ничего не находит.
Так не работает:
Код:
Query1.ParamByName('s').AsDateTime := DateTimePicker1.Date;
Нельзя записать ничего кроме ParamByName('s').Value;

Решил не париться и сделал так
Код:
DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('s').Value:=DateTimePicker1.Date-1;
DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('po').Value:=DateTimePicker1.Date+1;

Последний раз редактировалось Arkuz; 19.08.2009 в 21:50.
Arkuz вне форума Ответить с цитированием
Старый 19.08.2009, 21:30   #6
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Я в процессе создания отчётов понял, что вариация на тему +1, -1 искажает данные. Полскажите как исправить этот баг?

Исходники прилагаются.

Я не знаю что делать, ну может где-то что-то недоглядел...
Вложения
Тип файла: rar ПЕКАРНЯ.rar (339.5 Кб, 10 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 19.08.2009, 23:14   #7
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Народ, ну выручайте... Я уже не знаю где этот глюк искать...
Arkuz вне форума Ответить с цитированием
Старый 20.08.2009, 00:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Arkuz, сразу надо было сказать, что мучаете Access (и через ADOQuery)

1) не рекомендую держать AdoConnection.Connected := true; в Дизайнтайме это может вызвать всякие глюки и косяки...


НО. О Датах.

взял для пример Отчёты - "По предприятию за период"
(модуль ReportPredPerUnit)
присвоение переменных сделал так:
Код:
           DataModule1.PREDPRODUCTQuery.Active:=false;
           DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('s').DataType := ftDateTime;
           DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('po').DataType := ftDateTime;
           DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('s').Value:=trunc(DateTimePicker1.Date);
           DataModule1.PREDPRODUCTQuery.Parameters.ParamByName('po').Value:=trunc(DateTimePicker2.Date);
           DataModule1.PREDPRODUCTQuery.Active:=true;
и, обязательно исправьте запрос в PREDPRODUCTQuery
Код:
SELECT * 
FROM BASE
WHERE INT(date_waybill)  BETWEEN :s AND :po
у меня всё работает.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.08.2009, 01:13   #9
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Serge_Bliznykov, огромное спасибо... Вы мне очень помогли.
Замучали, дали по практике сделать программу, а теперь мучают... Сделай то, сделай так...
Ещё раз спасибо...

И скажите зачем делать это: INT(date_waybill)?
Дата в вещественном типе хранится же...
Если я правильно понял то там целая часть - дата, а после запятой - время?

Последний раз редактировалось Arkuz; 20.08.2009 в 01:16.
Arkuz вне форума Ответить с цитированием
Старый 20.08.2009, 07:04   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если я правильно понял то там целая часть - дата, а после запятой - время?
точно так! Кстати, так же и в Дельфи. поэтому функция trunc(), выделяющая из вещественного числа целую часть и помогает выделить дату, отбросив время.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректно работает запрос zulu80 БД в Delphi 10 16.02.2009 13:35
IdHTTP1 некорректно работает nike-p Работа с сетью в Delphi 9 23.07.2008 23:13
скажите почему работает некорректно pimiento Общие вопросы C/C++ 6 29.05.2008 17:21
Конструкция case of работает некорректно! Как исправить? SkAndrew Общие вопросы Delphi 6 06.04.2008 00:21
Не работает запрос Prisian БД в Delphi 1 30.08.2007 17:33