Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 889

/ вопрос решён /

Приветствую, уважаемые эксперты!
у меня такой вопрос : я с помощью SQL-запроса выбираю записи из таблицы . но у меня отображаються те данные которые не попали в концы отрезка отбора.
А мне нужны данные с концами отрезка выборки.
В чем ошибка в запросе?

Приложение:
  1. var
  2. s1,s2:string;
  3. begin
  4. s1:=floattostr(DateTimePicker1.DateTime);
  5. s2:=floattostr(DateTimePicker2.DateTime);
  6. if (RadioGroup1.ItemIndex=0) then
  7. begin
  8. Form7.ADOQuery1.Close;
  9. Form7.ADOQuery1.SQL.Clear;
  10. Form7.ADOQuery1.sql.Add('select PorNomer,DataPost,StatusKol,fio,KemPereslano,Adress,Soderganie,Ispolnitel,Status,DataIspolnen from Zurnal where DataPost >= '+s1+' and DataPost<= '+s2);
  11. Form7.ADOQuery1.Open;


Танюшка Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 9 сентября 2008, 17:22
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Танюшка!
попробуем визуализировать запрос. например, у нас есть десять записей с датами от 1 до 10 (чисто условные абстрактные даты). и хочеться отобрать концы с 3 до 7. Ваш запрос выдаст даты 3 4 5 6 7, а Вы хотите 1 2 3 7 8 9 10. Да?
Тогда условие надо переписать где то так.
where DataPost <= '+s1+' or DataPost>= '+s2
Если я всё таки не угадал:), то приведите, какую последовательность Вы хотите.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 сентября 2008, 17:37
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Мережников Андрей

Здравствуйте, Танюшка!
Думаю, что проблема у Вас не в запросе, а в строках s1:=floattostr(DateTimePicker1.DateTime);
s2:=floattostr(DateTimePicker2.DateTime);
Проверьте свойство time у компонентов DateTimePicker - наверняка у Вас там стоят отличные от 0 значения, в этом вся проблема.

Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 9 сентября 2008, 18:07
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Шичко Игорь

Здравствуйте, Танюшка!
Согласен с предыдущими отвечающими. Скорее всего DateTimePicker1.DateTime у Вас дробное число.
Я бы предложил попробовать выделить из него целую дату:
Для этого использовать:
s1:=floattostr(DateOf(DateTimePicker1.DateTime));
s2:=floattostr(DateOf(DateTimePicker2.DateTime));
Только перед использованием необходимо в раздел uses подключить модуль DateUtils.
Тогда у Вас будет происходить отбор по датам (без учета дробной части).

Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 10 сентября 2008, 07:57
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 27; последнее сообщение — 10 сентября 2008, 17:22; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2]

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 сентября 2008, 16:02 [#21]:

to Шичко Игорь
Конкретная реализация была предложена - обнулить значение time в компонентах DataTimePicker, тогда не надо применять DateOf или что-то еще для получения целой части числа, которое получается при преобразовании даты-времени с помощью floattostr.
Вадим К

Вадим К (статус: Академик), 10 сентября 2008, 16:17 [#22]:

Для пущей уверености, надо не просто "обнулить дробную часть" (по правильному это называется "отбросить дробную часть"), а сделать округление до целого, например с помощью round.
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 сентября 2008, 16:37 [#23]:

если использовать round, то можно нарваться на неприятность: например в поле дата занесено 10.09.2008 в поле time 18:35,
то после round получится дата 11.09.2008 вместо 10.09.2008
Вадим К

Вадим К (статус: Академик), 10 сентября 2008, 16:44 [#24]:

в моём предыдущем посте стоит читать вместо ", а сделать округление" "и сделать округление".
А отбросить дробную часть можно с помощью floor.
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 сентября 2008, 16:59 [#25]:

to Вадим К
наглядный пример как одна буква меняет смысл и может привести к неприятностям :-) Говорят когда-то американцы отправили межпланентную станцию не в ту сторону только из-за того, что в программе были перепутаны , и ;
Вадим К

Вадим К (статус: Академик), 10 сентября 2008, 17:05 [#26]:

маловероятно. Я даже не знаю, где в с/С++ или форте (не фортране, не путать!) возможно такое. компилятор пошлёт. Скорее всего байка.
А вот о том, что программисты решили, что отрицательной высоты над уровнем моря не бывает, и самолёт над Мертвым (или Красным?) морем перевернулся - это правда.
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 сентября 2008, 17:22 [#27]:

to Вадим К
я знаю чем отличается форт от фортрана - в институте учил и тот и другой :-) правда давно это было. Думаю, что дальше уже оффтоп - тема исчерпана

31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 5 апреля 2020, 07:48
Выполнено за 0.01 сек.
Рейтинг@Mail.ru