Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

фильтр по датам в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.038 c
4-1143738791
mlm68
2006-03-30 21:13
2006.11.05
Как сделать программное безопасное извлечение флешки?


2-1161170827
pkm
2006-10-18 15:27
2006.11.05
Объясните смысл ошибки.


15-1161196033
@!!ex
2006-10-18 22:27
2006.11.05
Наши министры....


3-1157531506
July
2006-09-06 12:31
2006.11.05
копирование blob


2-1161596663
Ося
2006-10-23 13:44
2006.11.05
Динамически созданные СheckBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский