Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

фильтр по датам в Access [D7, Access]


Страницы:   1 2

Strech ©   (2006-09-05 02:59:00) 

Помогите сделать фильтр по датам в Access. Даты передаю в запрос через параметры. Рузультат выборки удручает.
Запрос:

select * from sales
where (date >= :StartDate and date <= :EndDate)

параметры имеют тип ftDateTime

если даты 01.08.2006 и 30.08.2006 все работает, выборка правильная
если даты 01.08.2006 и 04.09.2006 пустой запрос


Strech   (2006-09-07 13:21:00) [1]

2 sniknik ©

ПРИНОШУ ПУБЛИЧНЫЕ ИЗВИНЕНИЯ!

начал вырезать из базы все лишнее и вдруг все заработало :)

вернулся к старому варианту - не работает

удалил с формы Query и поставил новый - работает

сравнил значение полей старого и нового варианта - идентичны

в неработающем варианте проделал операцию вырезать и вставить с Query - работает

СПАСИБО за помощь, если бы не Ваш последний пост - так бы ничего и не работало


sniknik   (2006-09-07 12:50:00) [2]

кстати, тут подумал... это уже дело принципа? тогда лучше не высылать лично мне (базу/исходники) расшарить в каком нибудь публичном месте, и дать ссылку, ну чтобы каждый мог скачать и убедиться.
например сдесь
http://www.webfile.ru/


sniknik   (2006-09-07 12:44:00) [3]

> тебе исходники выслать или принтскрины?
исходники + базу, и то и другое на 1 табицу, 1 форму, 1 запрос т.е. только "проблемное" место.

> ты бы, сделав вид, что оскорбился слинял с ветки
поводы были. после личных оскоблений, я был вправе не только "свалить" но и закрыть ветку, ни того ни другого как видиш не сделал. (беспланый совет, не суди о других по себе)


Strech   (2006-09-07 12:38:00) [4]


> выглядит во всяком случае так.

ага, удобный способ надеть на себя маску


> а вот тут ты попросту вреш.

тебе исходники выслать или принтскрины?

то, что ты не сможешь ответить на вопрос было ясно с поста [7], вот только если бы я сразу об этом сказал, ты бы, сделав вид, что оскорбился слинял с ветки. Сейчас ты уже вправе это сделать.


sniknik   (2006-09-07 12:24:00) [5]

> проверить правильность можно так
> проверил - не работает
а вот тут ты попросту вреш.

былобы расписано все изначально, да, возможно было бы допустить, проблема у парня, и искать в чем, базе/виндах/т.д. ... но после подобного "обсуждения" это уже просто попытка "спасти лицо"... типа, "а вот что бы вы тут не говорили не работает оно! а значит вы ничего не знаете"
выглядит во всяком случае так.

> ну и попробуй объяснить мне взаимосвязь между стилем вопроса и твоим постом [3]
зачем? типа, докажи что не верблюд? не в песочнице чтобы на это "велись".

p.s. завязывать надо общение с анонимами, какието они... неадекватные.


Strech   (2006-09-07 12:09:00) [6]


> надеюсь ты (а с тобой и другие, кто читает) понял что ошибался.

нет, я думаю то что я дописал в последнем посте абсолютно ничего не дополняет и не уточняет относительно вопроса


> нет типов "проблемных" полей, и ранее ничего не указывает
> что они дататайм, а не та же строка

это называется "прикидываться шлангом"


> не показано как  StartDate, EndDate получают значения

вот это уж точно абсолютно не важно, написано же DateTimeToStr(StartDate) возвращает '01.08.2006'


> не показано внесение запроса

он забит в Query (property SQL)


> пример данных?

две записи, поле date которых (тип TDateTime):
05.08.2006 12:00:00
03.09.2006 12:00:00

версия базы 2002, WinXP


> проверить правильность можно так

проверил - не работает


> стараюсь придерживаться авторского стиля ветки

ну и попробуй объяснить мне взаимосвязь между стилем вопроса и твоим постом [3]


http://www.ln.ua/~openxs/articles/smart-questions-ru.html

кроме умения задавать вопрос, нужно еще умение отвечать на вопрос или хотябы отсутствие желания поумничать и поиздеваться над другими


sniknik   (2006-09-07 11:12:00) [7]

> я думал что в вопросе все предельно ясно написано
надеюсь ты (а с тобой и другие, кто читает) понял что ошибался.

> [21]
уже лучше но.
1. нет типов "проблемных" полей, и ранее ничего не указывает что они дататайм, а не та же строка.

2. не показано как  StartDate, EndDate получают значения (проблема может быть в логике программы, и в момент присваивания когда ты думаеш что они = '01.08.2006'/'30.08.2006', реально равны чемуто другому)
не показано внесение запроса (и не указано что в десигне), т.е. фактически там может быть другой запрос...

3. пример данных? (все что не показано для меня не существует, т.к. не проверяется)

4. некритично но желателно версия базы (95/97/2000/2002, некритично потому как скорее всего новая, да и у старых таких проблем не наблюдалось (другие были))

проверить правильность можно так

ADODataSet1.Close;
ADODataSet1.CommandText :=
 'select * from sales '+
 'where (date >= :StartDate and date <= :EndDate)';
ShortDateFormat:= 'dd.mm.yyyy';
ADODataSet1.Parameters.ParamByName('StartDate').Value := StrToDateTime('01.08.2006');
ADODataSet1.Parameters.ParamByName('EndDate').Value := StrToDateTime('30.08.2006');
ADODataSet1.Open;


при соответствующем типе в базе, это просто обязано сработать правильно т.к. убраны все возможные нестыковки которые описаны выше в неприведенных исходных данных (а на тип поля в базе дана поправка).


Strech   (2006-09-07 09:09:00) [8]


> sniknik ©   (07.09.06 08:51) [20]

я думал что в вопросе все предельно ясно написано

есть комонент Query, в нем забит запрос:
select * from sales
where (date >= :StartDate and date <= :EndDate)
и 2 параметра: StartDate и EndDate типа ftDateTime

у формы:
StartDate, EndDate: TDateTime;

обработчик кнопки:
 ADOQuery1.Close;
 ADOQuery1.Parameters.ParamByName('StartDate').Value := StartDate;
 ADOQuery1.Parameters.ParamByName('EndDate').Value := EndDate;
 ADOQuery1.Open;

возвращает пустую выборку при
DateTimeToStr(StartDate) = '01.08.2006'
DateTimeToStr(EndDate) = '04.09.2006'

возвращает нормальную выборку при
DateTimeToStr(StartDate) = '01.08.2006'
DateTimeToStr(EndDate) = '30.08.2006'

в таблице забиты данные за 08 и 09 месяца


sniknik   (2006-09-07 08:51:00) [9]

> а почему бы хоть одному из миллиона у кого работает, не написать мне как сделать, чтобы и у меня работало.
по той же причине по какой от тебя есть "обвинение" метода с параметрами, но не показано как сделано... т.е. предлагается поверить на слово что все сделано правильно но вот не рабатает...
я уже гдето писал, что стараюсь придерживаться авторского стиля ветки (что авторов почемуто не радует)... т.е. в ответ на неподкрепленное ничем заявление аналогично заявляю - нет работает, и виноват в "нерабочести" твоей интерпретации метода только ты.
не вериш на слово? аналогично, я не верю что ты сделал правильно (и не вижу другого способа узнать в чем ты ошибся, (с моей точки зрения там просто не в чем...), потому, что как только ктото покажет тебе правильную работу, так ты слиняеш, и не скажеш в чем ошибся. (не надо говорить что ты "не такой", подавляющее большинство анонимов так делает), и ветка потеряет смысл для читающих)
хочеш решить? меняй стиль общения. ну или разбирайся сам, это вовсе не сложно (тайн там точно нет).

> Очень прошу.
ни это, ни эмоции делу не помогут. только факты.

> Ты можешь для меня тупого сказать, как обойтись без преобразований?
береш... и не преобразовываеш. еще никого не подводило...

===================================
а это я подумываю себе постоянным посскриптумом сделать...
http://www.ln.ua/~openxs/articles/smart-questions-ru.html


Strech   (2006-09-07 02:26:00) [10]

если я кого-то оскорбил, то прошу прощения. Однако на помощь надеяться все-таки приходится. Хотелось бы разобраться. Я признаю, что туплю и что в базах данных ничего не понимаю, но учиться то надо.

2 sniknik ©   (06.09.06 17:02) [16]

> у тебя не работает... а на одного тебя миллионы у которых
> работает.

а почему бы хоть одному из миллиона у кого работает, не написать мне как сделать, чтобы и у меня работало. Очень прошу.

сейчас я сделал преобразование TDateTime -> строка в формате #Год/Месяц/День#. Параметры как ftString. Так работает. Однако это ничем не отличается от генерирования полного текста sql запроса вручную, и смысл использования параметров пропадает.


> нет, читать надо буквально.

Ты можешь для меня тупого сказать, как обойтись без преобразований?


Desdechado   (2006-09-06 21:28:00) [11]

Anatoly Podgoretsky ©   (06.09.06 20:41) [17]
Нет, это похоже на:
"Так, салаги, вам тест на соответствие. А, все равно не прошли. Только время на вас потратил."

автору
надеяться на помощь после оскорблений глупо

PS "ошибаться может каждый, но только дурак упорствует в своих заблуждениях" (с)тырено


Anatoly Podgoretsky   (2006-09-06 20:41:00) [12]

Чем дальше в лес, тем толще партизаны.


sniknik   (2006-09-06 17:02:00) [13]

> ошибаешься, они преобразуются именно в строки
ну буду спорить, т.к. у тебя они преобразуются (в запросе именно они, что было ясно еще в [3]), кто это делает под сомнением (но разработчики винды, ltkmab? ADO, компанент в этом случае заранее реабилитированы ;)

> так вот оказалось, что туда именно строки и надо пихать, иначе не работает
и тут не спорю, с уточнением... у тебяне работает... а на одного тебя миллионы у которых работает.

> нужно понимать как "пихай туда строки"
нет, читать надо буквально.


Strech   (2006-09-06 16:48:00) [14]

извеняюсь, слово "сами" не узрел
к сожалению с моим примитивным разумом мне сложно сделать вывод, что текст "и нехрена в параметры строки пихать..." нужно понимать как "пихай туда строки"

спасибо за помощь


Strech   (2006-09-06 16:40:00) [15]

2 sniknik ©   (06.09.06 16:33) [13]
ошибаешься, они преобразуются именно в строки


> и нехрена в параметры строки пихать...


так вот оказалось, что туда именно строки и надо пихать, иначе не работает


sniknik   (2006-09-06 16:33:00) [16]

если уж возник формат... то речь точноо строке.


sniknik   (2006-09-06 16:31:00) [17]

> ты к чему весь этот пост написал?
типа в помощь...
> Типа сумничать хотел - у тебя это получилось.
нда, простое разяснение воспринимается как умничанье? что же будет на сложных вещах? о смене профессии не думал? подумай.
> Лучше бы дельный совет дал.
я дал см. [3]

> Параметры в строки преобразуются не по моей воле, а по воле программистов писавших компоненты ADO.
> Как они преобразуются я не знаю. Если ты мне объяснишь - буду признателен.
разьясняю. сами в строки они НЕ ПРЕОБРАЗУЮТСЯ, и програмисты "писавших компоненты ADO" НЕ ВИНОВАТЫ.

> Может это дало бы мне возможность понять алгоритм преобразования и справиться с проблемой.
ты ищеш не там где "потерял" а там где светлее.


Desdechado   (2006-09-06 16:31:00) [18]

TDateTime - это тип данных, он фиксирован
#год/месяц/день# - это ФОРМАТ представления данных, он произволен


Strech   (2006-09-06 16:25:00) [19]

даты типа TDateTime
я думал что поскольку параметры имеют тип ftDateTime то они автоматом преобразуются в нужную строку #год/месяц/день#


Desdechado   (2006-09-06 15:36:00) [20]

А ты откуда эти даты берешь?
В нормальных условиях они строкаминикогда не будут и в прараметр не попадут в этом ужасном виде.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо