![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
фильтр по датам в Access [D7, Access]
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]А ты откуда эти даты берешь?
В нормальных условиях они строкаминикогда не будут и в прараметр не попадут в этом ужасном виде.