Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

фильтр по датам в Access   Найти похожие ветки 

 
Strech   (2006-09-05 02:59) [0]

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

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

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

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


 
Fay ©   (2006-09-05 07:06) [1]

date - не функция, часом?


 
Fay ©   (2006-09-05 07:07) [2]

попробуй
select * from sales
where ([date] >= :StartDate and date <= :EndDate)


 
sniknik ©   (2006-09-05 08:25) [3]

> Даты передаю в запрос через параметры.
и нехрена в параметры строки пихать...


 
Fay ©   (2006-09-05 08:30) [4]

> и нехрена в параметры строки пихать...
Блин, мне такая хрень даже в голову не пришла!
А я сижу, думаю... Будь date функцией (я не знаю Access), да хоть процедурой Ж:) это не объясняет указанное поведение.


 
Strech   (2006-09-06 05:44) [5]


> date - не функция, часом?


была такая мысль, уточнил sales.date - не помогает


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


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

вопросов по этому форуму с такой же проблемой море, все советуют с параметрами работать, а хоть кто-нибудь это реализовал?


 
Strech   (2006-09-06 05:47) [6]

а есть что-нибудь типа монитора запросов для access? хотелось бы увидеть что за запрос в конечном итоге получается?


 
sniknik ©   (2006-09-06 09:14) [7]

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

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

> все советуют с параметрами работать,
правильно советуют

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

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


 
Strech   (2006-09-06 15:19) [8]

2 sniknik ©   (06.09.06 09:14) [7]
ты к чему весь этот пост написал? Типа сумничать хотел - у тебя это получилось. Лучше бы дельный совет дал.

Прочти еще раз вопрос, так как в руководстве написано не работает, поэтому за помощью и обратился.

Параметры в строки преобразуются не по моей воле, а по воле программистов писавших компоненты ADO. Как они преобразуются я не знаю. Если ты мне объяснишь - буду признателен.

Если кто-то это реализовал, значит у него были такие же проблемы и он их решил, мог бы поделиться инфой как это сделать.

Запрос в конечном итоге получается не такой, как он мной написан, а такой, который получился в результате тех самых преобразований. А какой он получился мне бы и хотелось увидеть. Может это дало бы мне возможность понять алгоритм преобразования и справиться с проблемой.

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


 
Desdechado ©   (2006-09-06 15:36) [9]

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


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

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


 
Desdechado ©   (2006-09-06 16:31) [11]

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


 
sniknik ©   (2006-09-06 16:31) [12]

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

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

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


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

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


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

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


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


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


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

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

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


 
sniknik ©   (2006-09-06 17:02) [16]

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

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

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


 
Anatoly Podgoretsky ©   (2006-09-06 20:41) [17]

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


 
Desdechado ©   (2006-09-06 21:28) [18]

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

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

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


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

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

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

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

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

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


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

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


 
sniknik ©   (2006-09-07 08:51) [20]

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

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

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

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


 
Strech   (2006-09-07 09:09) [21]


> 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 11:12) [22]

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

> [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 12:09) [23]


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

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


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

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


> не показано как  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 12:24) [24]

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

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

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

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


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


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

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


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

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

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


 
sniknik ©   (2006-09-07 12:44) [26]

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

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


 
sniknik ©   (2006-09-07 12:50) [27]

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


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

2 sniknik ©

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

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

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

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.114 c
4-1150985008
beard
2006-06-22 18:03
2006.11.05
Обработка прерываний


15-1160995571
default
2006-10-16 14:46
2006.11.05
Обязан работодатель отвечать на резюме?


2-1161072297
Raptoridze
2006-10-17 12:04
2006.11.05
путь к файлу


3-1157093965
Delphi basic
2006-09-01 10:59
2006.11.05
Неправильный расчет выражений в SQL


2-1161326710
yel
2006-10-20 10:45
2006.11.05
Получить список всех компьютеров в сети.