Форум: "Базы";
Текущий архив: 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