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

Вниз

Запрос с выборкой по дате   Найти похожие ветки 

 
Виталька2005   (2005-07-26 23:13) [0]

Здравствуйте, мастера. В ADOQuery задаю такой запрос:
select * from Таблица1 where Дата < "15.05.1984"
При выполнении вылетает ошибка что-то вроде "Несоответствие типов парамтеров"
В базе (Access) поле "Дата" имеет тип дата/время.
Подскажите, что не так.. уже всё перепробовал:(


 
Ученик   (2005-07-26 23:27) [1]

формат должен быть #MM/DD/YYYY#
название поля [Дата]


 
sniknik ©   (2005-07-26 23:41) [2]

> формат должен быть #MM/DD/YYYY#
аксесу практически вообще пофигу формат, он на него плевал с высокой колокольни...
в итоге
        #21/01/2004# = #01/21/2004# = #2004/01/21#
        #21-01-2004# = #01-21/2004# = #2004/01/21#
можеш проверить

лучший выход - параметры.


 
sniknik ©   (2005-07-26 23:45) [3]

один равно пропустил :(. в обшем все приведенное(возможно + еще чтото) равнозначно и взаимозаменяемо...


 
Anatoly Podgoretsky ©   (2005-07-26 23:47) [4]

sniknik ©   (26.07.05 23:41) [2]
С акцесом действительно проблема,
#21/01/2004# = #2004/01/21#
#01-02-2004# = #2004/01/02#
Он собака слишком интеллектуально развязен, поэтому только параметны, когда работает с дата, а то не знаешь от куда по зубам получишь.


 
Ученик   (2005-07-27 07:27) [5]

>sniknik ©   (26.07.05 23:41) [2]
Так в чем будет проблема ? - Access формирует запросы именно в таком формате :-)


 
sniknik ©   (2005-07-27 08:32) [6]

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


 
sniknik ©   (2005-07-27 08:41) [7]

кстати еще вариант
#January 21 2004# = #21 January 2004# = #2004 January 21# = #2004 21 January#
;о))
но он получше предыдущих, тут месяц с числом трудно перепутать ;) при составлении в такой форме ошибки не будет, но сложнее формировать и понятно никто этим поэтому не пользуется.


 
Anatoly Podgoretsky ©   (2005-07-27 08:55) [8]

Ну его нафиг, играть в рулетку, как положено выигрывает казино, только параметры.


 
Виталька2005   (2005-07-27 14:57) [9]

>Anatoly Podgoretsky ©   (27.07.05 08:55) [8]
>Ну его нафиг, играть в рулетку, как положено выигрывает казино, только параметры.

Проблему примерно осознал. Только не совсем понял, что за параметры нужно использовать?=)


 
evvcom ©   (2005-07-27 15:01) [10]

select * from Таблица1 where Дата < :param


 
Ученик   (2005-07-27 22:02) [11]

>sniknik ©   (27.07.05 08:32) [6]
Вы уже сообщили в Microsoft что их Access работает неправильно ?


 
sniknik ©   (2005-07-27 23:24) [12]

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

date literal
Any sequence of characters with a valid format that is surrounded by number signs (#). Valid formats include the date format specified by the locale settings for your code or the universal date format.

+ к тому что локальные/универсальные форматы смешиваются, так еше в jet и VB подключен (частичный функционал), естественно пришол он туда не просто так а притянул свои "прибамбахи" ;о))

до кучи
 #21-Jan-2004# = #Jan 21 04#
в последнем варианте уже немудрено год спутать. ;)


 
Ученик   (2005-07-27 23:39) [13]

>sniknik ©   (27.07.05 23:24) [12]
Зачем
sniknik ©   (26.07.05 23:41) [2]
sniknik ©   (26.07.05 23:45) [3]
sniknik ©   (27.07.05 08:32) [6]
sniknik ©   (27.07.05 08:41) [7]
sniknik ©   (27.07.05 23:24) [12]  ?

в которых так и не видно рабочего ответа на вопрос


 
Anatoly Podgoretsky ©   (2005-07-27 23:50) [14]

Ученик   (27.07.05 23:39) [13]
Зачем

Параметры рулез


 
Ученик   (2005-07-28 00:09) [15]

>Anatoly Podgoretsky ©   (27.07.05 23:50) [14]
Ну и предложили бы рабочий вариант вариант с параметрами, зачем треп разводить ?


 
Anatoly Podgoretsky ©   (2005-07-28 00:23) [16]

Потому что вопрос
Подскажите, что не так
Про остальное пока вопроса нет. Есть рекомендации, нет желания.


 
sniknik ©   (2005-07-28 00:28) [17]

> Зачем
считаеш зря?
перечитай > Виталька2005   (27.07.05 14:57) [9]
хотя бы одного от возможных проблем мои рассуждения спасли. (а скорее всего больше, народу которые их прочитают (а возможно даже поймут и примут к сведению :) намного больше одного)

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


 
sniknik ©   (2005-07-28 00:50) [18]

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

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


 
Anatoly Podgoretsky ©   (2005-07-28 00:55) [19]

sniknik ©   (28.07.05 00:50) [18]
Да, да, да - обязанность автора задавать вопросы, конечно он может поручить эту работу другому, но это уже сервис.
Автор не сделал ни шага ни в одном из направлений.


 
Ученик   (2005-07-28 07:32) [20]

>sniknik ©   (28.07.05 00:28) [17]
>sniknik ©   (28.07.05 00:50) [18]
>Anatoly Podgoretsky ©   (28.07.05 00:55) [19]

 Ну то что вам нравится "пудрить" людям мозги, вместо того чтобы просто давать рабочие ответы на их вопросы, это хорощо заметно :-)


 
Anatoly Podgoretsky ©   (2005-07-28 07:48) [21]

Ученик   (28.07.05 07:32) [20]
По обсуждению не заметил разницы


 
Ученик   (2005-07-28 08:24) [22]

>Anatoly Podgoretsky ©   (28.07.05 07:48) [21]
Разницы в чем именно ?


 
sniknik ©   (2005-07-28 08:51) [23]

Ученик   (28.07.05 07:32) [20]
ну. во первых от вопроса зависит, как его задали.

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

в третьих если не нравится мой стиль ответов, ответь сам в своем стиле. никто же не запрещает.

> Разницы в чем именно ?
видимо с тобой. "пудриш" мозги разговорами о нужности "давать рабочие ответы на вопросы" вместо того чтобы просто дать "рабочий ответ". ;)


 
Ученик   (2005-07-28 22:14) [24]

>sniknik ©   (28.07.05 08:51) [23]

Ты каждый раз такой смешной
"как?! вы посмели предположить, что я этого не знаю!". - точно описывает твои ответы

Рабочие ответы:
Ученик   (26.07.05 23:27) [1]
evvcom ©   (27.07.05 15:01) [10]

Все остальное попытка sniknik © продемонстрировать свои "знания"


 
sniknik ©   (2005-07-28 22:46) [25]

> Все остальное попытка sniknik © продемонстрировать свои "знания"
да? а я наивно предполагал, что это комуто еще и интересно, кроме меня.
мне то точно эти данные были интересны, иначе бы не "раскапывал" как оно там устроено/работает, не читал бы справочники, хелпы. просто остановился бы на варианте > Ученик   (26.07.05 23:27) [1], (первом встреченном. рабочий! а дальше неинтересно) а потом бы бегал по форумам клянчил "обьясните где у меня глюк. пожалуйста!!!" вместо того чтобы самому чужие проблемы решать.

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

Рабочие ответы:
> Ученик   (26.07.05 23:27) [1]
> evvcom ©   (27.07.05 15:01) [10]
зато > sniknik ©   (26.07.05 23:41) [2]
ответ который заставляет думать... (надеюсь ;). остальное и в правду лишнее, но у есть алиби... я отвечал на твои вопросы!!! (вопросы-провокации как оказалось ;) и как кроме того оказалось, отвечая на них я "попытался продемонстрировать свои "знания"". почему в кавычках кстати? ты проверил, несовпало с реальным, т.е. я обманул и знания были ложными?

или в тебе говорит обида, изза того что твой ответ "перебили", он не оказался "истиной в последней инстанции", тебе не сказали спасибо, ... ets.?


 
Ученик   (2005-07-28 22:56) [26]

>sniknik ©   (28.07.05 22:46) [25]

Попробуем еще раз :-)
В чем проблема использования формата #MM/DD/YYYY# ?
Одной фразай, я понимаю, сложно, но попытайся.


 
sniknik ©   (2005-07-29 00:14) [27]

нет уж, одной и пытатся не буду.
сколько уж получится... попробуем.

только извини заранее за азбучные истины, если спрашиваеш проще принять что ты их не знаеш.

итак #MM/DD/YYYY# - месяц - число - год, замечательно, а ты в курсе в какой стране живем? впрочем страна невеважна главное локальные настройки. у меня они на русской винде как и у многих #DD/MM/YYYY# т.е. день с месяцем поменяны местами в сравнении с классикой. вот в этом проблема - локальный формат действует наряду с классическим!
дальше делаем например отчет сумма продаж за воскресенья в январе/и т.д. месяце... проверяем на январе.
если не принять мер (а мы их не примем, условились же - ошибка с нашей стороны) то преобразование в строку пойдет по локальному формату т.е. DateTimeToStr() выдаст воскресенья - 2 января -> "02/01/2005" 9-> "09/01/2005" 16-> "16/01/2005" 23-> "23/01/2005" 30-> "30/01/2005"
аксесс же (jet) преобразует обратно по #MM/DD/YYYY#
т.е. "02/01/2005"->1 февраля, "09/01/2005"->1 сентября "16/01/2005"->16 января (вот она подлость! поддерживался бы только один формат уже тут бы получили ошибку и знали что с датой чегото не так задаем (месяц 16-м не бывает)/но нет jet спокойно переключился на #DD/MM/YYYY# т.к. по #MM/DD/YYYY# ему не получается сформировать дату) "23/01/2005"->23 января "30/01/2005"->30 января.

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

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

надеюсь понятно... я старался. ;о))


 
Ученик   (2005-07-29 07:26) [28]

>sniknik ©   (29.07.05 00:14) [27]
Очередной треп, можешь кратко и ясно, ну, очень хочется, я помогу:

Приводишь конкретный пример (данные таблицы из двух полей), приводишь SQL-запрос, в котором используется формат #MM/DD/YYYY#
и описываешь какая конкретная ошибка возникает, не надо теории, нужна практика.


 
sniknik ©   (2005-07-29 08:38) [29]

Ученик   (29.07.05 07:26) [28]
в том то и дело, ошибки не "возникает" (похоже ты не читаеш того, что я пишу, игнорируеш, ну... тогда любые пояснения безсмысленны, не стоит и пытатся)

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


 
evvcom ©   (2005-07-29 09:02) [30]


> sniknik ©   (29.07.05 08:38) [29]

Николай, заканчивай с ним, он же провокатор! :) Даже анкету не завел.


 
Fay ©   (2005-07-29 09:13) [31]

2 sniknik ©   (29.07.05 8:38) [29]
Вы слишком категоричны. Мне вот не нравится использовать параметры типа даты.
Дата на серверах - точный тип данных, в Delphi - "плавающий"; это неприятно иногда неудобно.

Если я хочу, чтобы в запросе фигурировала дата "20050101 12:34.56.987", то я буквально так и напишу, не задумываясь о том, насколько хорошо она переживёт EncodeDate, EncodeTime и Param[n].AsDateTime.


 
evvcom ©   (2005-07-29 09:34) [32]


> Fay ©   (29.07.05 09:13) [31]

Далеко не везде такое можно использовать. В оракле можно явно указать, как воспринимать написанное тобой: TO_DATE("20050101 12:34.56", "YYYYMMDD HH24:MI.SS"); но в других, не знаю. Параметры же есть везде, и однозначность переданных через них данных у меня пока еще не вызывала сомнений. Поэтому не понимаю, о чем это:
> Мне вот не нравится использовать параметры типа даты.
> Дата на серверах - точный тип данных, в Delphi - "плавающий";
> это неприятно иногда неудобно.


 
Fay ©   (2005-07-29 09:59) [33]

2 evvcom ©   (29.07.05 9:34) [32]

MSSQL 2000
ADOQuery1.SQL.Text := "select * from Table1 where GetDate() = :DT"

procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQuery1.Close;
 ADOQuery1.Parameters.ParamByName("DT").Value := Now;
 ADOQuery1.Open;
end;


В профайлере видим
exec sp_executesql N"select * from Table1 where GetDate() = @P1
", N"@P1 datetime", "Jul 29 2005  9:48:42:000AM"


Только секунды! Это ADO-шный прикол, но мне от этого не легче.

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


Это очень, ОЧЕНЬ весомый аргумент 8)


 
sniknik ©   (2005-07-29 11:15) [34]

Fay ©   (29.07.05 09:13) [31]
к сожалению универсальный формат "20050101" работающий в MSSQL не работает в accsess. а разговор как раз про него.

Fay ©   (29.07.05 09:59) [33]
> Только секунды! Это ADO-шный прикол, но мне от этого не легче.
ну... бывают в жизни огорчения, действительно округляет до секунд ;(. хотя кто именно виноват (ADO или Delphi) еше надо разбираться. (не ковырялся с этим, мне и минут за глаза хватает по специфике моих данных)
запишем как "фичу" уже против параметров. ;о))


 
Fay ©   (2005-07-29 11:39) [35]

2 sniknik ©   (29.07.05 11:15) [34]

Миллисекунды в вариантах не передаются. Это прикол ADO, а не Delphi.

Про Access. Формат [1], т.е. америкосовский формат в # понимается однозначно. Во всяком случае так было, когда я последний раз проверял.


 
Ученик   (2005-07-31 20:11) [36]

>sniknik ©   (29.07.05 08:38) [29]
Хорошо, с тем что ошибки при формате #MM/DD/YYYY# не возникает, разобрались.

Остался гланый вопрос: почему такое неуважительное отношение к чужим ответам: sniknik ©   (26.07.05 23:41) [2]

>evvcom ©   (29.07.05 09:02) [30]
Анкету сьела проблема 10000 (по-моему это раньше так называлось)


 
Anatoly Podgoretsky ©   (2005-07-31 20:29) [37]

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


 
Ученик   (2005-07-31 21:49) [38]

>Anatoly Podgoretsky ©   (31.07.05 20:29) [37]
А зачем разрешены ответы (вопросы) без регистрации ?


 
sniknik ©   (2005-07-31 22:36) [39]

>sniknik ©   (29.07.05 08:38) [29]
> Хорошо, с тем что ошибки при формате #MM/DD/YYYY# не возникает, разобрались.
если бы ты читал, то что пишут опоненты "разброрка" кончилась бы не бы не начавшись... на шестом посте, первом на твое "непонимание"
sniknik ©   (27.07.05 08:32) [6]
>> Так в чем будет проблема ?
ну как в чем. риск получить неверные данные при ошибочном вводе. т.е. ошибка при составлении запроса из
> синтаксической становится логической
т.е. ты вроде как непонял, что я сказал, переспросил, я вроде как пояснил ... все, кончилась разборка. ты же избрал путь "непонимающего идиота" (дао у тебя чтоли такое?), и до сих пор типа "не врубился". (играеш или серьезно?)

> Остался гланый вопрос: почему такое неуважительное отношение к чужим ответам: sniknik ©   (26.07.05 23:41) [2]
позвольте поддержать еврейские традиции и ответить вопросом на вопрос.
в чем вы его там видите, это неуважение? по отношению лично к вам? по моему оно у меня только вот сейчас на этом посте возникло.

evvcom ©   (29.07.05 09:02) [30]
>> sniknik ©   (29.07.05 08:38) [29]
> Николай, заканчивай с ним, он же провокатор! :) Даже анкету не завел.
аминь. воистину так. и анкета совсем тут не причем.

p.s. думаю ветку надо либо закрывать либо в потрепатся перекидывать... еще не решил. ;о))


 
Ученик   (2005-07-31 22:49) [40]

>sniknik ©   (31.07.05 22:36) [39]

Ученик в [1] дает правильный ответ

sniknik © отвечает

"...аксесу практически вообще пофигу формат, он на него плевал с высокой колокольни..."



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

Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.033 c
1-1122893881
surkis
2005-08-01 14:58
2005.08.21
create Sub menu Popupmenu


4-1120218420
misyachniy
2005-07-01 15:47
2005.08.21
Компонент для работы с COM портом работает в Me в XP не хочет


14-1122613410
Rentgen
2005-07-29 09:03
2005.08.21
АвтоПереименование в IDE Delphi


4-1117111379
strong
2005-05-26 16:42
2005.08.21
дочернее окно как новая задача


1-1122575548
Андрей Молчанов
2005-07-28 22:32
2005.08.21
наследники





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский