|
Вопрос # 1 889/ вопрос решён / |
|
Приветствую, уважаемые эксперты!
у меня такой вопрос : я с помощью SQL-запроса выбираю записи из таблицы . но у меня отображаються те данные которые не попали в концы отрезка отбора.
А мне нужны данные с концами отрезка выборки.
В чем ошибка в запросе?
Приложение: Переключить в обычный режим- var
- s1,s2:string;
- begin
- s1:=floattostr(DateTimePicker1.DateTime);
- s2:=floattostr(DateTimePicker2.DateTime);
- if (RadioGroup1.ItemIndex=0) then
- begin
- Form7.ADOQuery1.Close;
- Form7.ADOQuery1.SQL.Clear;
- Form7.ADOQuery1.sql.Add('select
PorNomer,DataPost,StatusKol,fio,KemPereslano,Adress,Soderganie,Ispolnitel,Status,DataIspolnen from
Zurnal where DataPost >= '+s1+' and DataPost<= '+s2);
- 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]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|