Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Формат календарных дат в запросе
 
 автор: Stas   (24.01.2007 в 12:35)   личное сообщение
 
 

Добрый день всем,
понимамаю, что вопрос дилетантский, но все же когда-то начинали.

В Access 2002 есть три контрола, значения которых подставляются в запрос. Два контрола содержат даты (Format Short Date, Input Mask 00.00.0000;0;_)
После подстановки значений запрос выглядит

PolPmntStr = "Update POLICY_PAYMENT set BILL_ID=17 where ID in " & _
"(SELECT PP.ID FROM POLICY AS P LEFT JOIN POLICY_PAYMENT AS PP ON P.ID = PP.POLICY_ID WHERE " & _
"(((PP.DATE_DUE)>'01.01.2007' And (PP.DATE_DUE)<'31.03.2007') And ((P.INSURER_ID) = 3) And ((PP.BILL_ID) = 0)))"

и не выполняется с сообщение Data type mismatch in selection criteria
форматы полей в таблице таковы:
PP.DATE_DUE -Date/Time, Short Date
P.INSURER_ID - Number, Long Integer
PP.BILL_ID - Number, Long Integer

Как "перетащить" даты в запрос в нужном формате? Совсем не хочется в таблице у поля формат даты на текст менять.

  Ответить  
 
 автор: Explorer   (24.01.2007 в 13:01)   личное сообщение
 
 

SELECT * FROM PP WHERE (((PP.DATE_DUE)=#01/01/2007#));

  Ответить  
 
 автор: Stas   (24.01.2007 в 13:05)   личное сообщение
 
 

Т.е. надо пользователя заставлять вводить дату в американском формате 03/31/2007? Его я даже почему-то не нашел в свойствах контрола.
Или надо value контрола преоборазовывать прежде чем в запрос вставлять?

  Ответить  
 
 автор: osmor   (24.01.2007 в 13:18)   личное сообщение
 
 

а как вы его подставляете? руками собираете строку SQL?
если да, то воспользуйтесь
format('01.01.2007',"\#dd\/mm\/yyyy\#")

  Ответить  
 
 автор: Stas   (24.01.2007 в 14:08)   личное сообщение
 
 

Не очень понял, что значит "руками". Даты в запрос подтаскиваются из контрола Text
Начальный код после подсказки про format выглядит так:

Dim NwBillFr As db1.Form_NEW_BILL
Dim PolPmntStr As String

PolPmntStr = "Update POLICY_PAYMENT set BILL_ID=" & BILL_ID & " where ID in " & _
"(SELECT PP.ID FROM POLICY AS P LEFT JOIN POLICY_PAYMENT AS PP ON P.ID = PP.POLICY_ID WHERE " & _
"(((PP.DATE_DUE)>format('" & NwBillFr.Text7.Value & "', '#mm/dd/yyyy#') And (PP.DATE_DUE)<format('" & NwBillFr.Text2.Value & "','#mm/dd/yyyy#') And ((P.INSURER_ID) = " & NwBillFr.Combo0.Value & ") And ((PP.BILL_ID) = 0)))"

Но теперь не работает, ругаясь на отсутствие закрывающей скобки -круглой или квадратной.
А в Вашем ответе нет опечатки? format('01.01.2007',"\#dd\/mm\/yyyy\#")

  Ответить  
 
 автор: Кукамака   (24.01.2007 в 16:18)   личное сообщение
 
 

зачем так слолжно: "(PP.DATE_DUE)>format('" & NwBillFr.Text7.Value & "', '#mm/dd/yyyy#')"
может проще так: "(PP.DATE_DUE)>" & Format(NwBillFr.Text7.Value, "mm/dd/yyyy") ?

>Но теперь не работает, ругаясь на отсутствие закрывающей скобки
Убери все сгенерированные скобки и расставь сам!

  Ответить  
 
 автор: ГлазастыйМышь   (24.01.2007 в 15:07)   личное сообщение
 
 

должно быть что-то вроде

PolPmntStr = "Update POLICY_PAYMENT set BILL_ID=17 where ID in " & _
"(SELECT PP.ID FROM POLICY AS P LEFT JOIN POLICY_PAYMENT AS PP ON P.ID = PP.POLICY_ID WHERE " & _
"(((PP.DATE_DUE)>#01.01.2007# And (PP.DATE_DUE)<#31.03.2007#) And ((P.INSURER_ID) = 3) And ((PP.BILL_ID) = 0)))"

т.е. дата ограничена #, а не '

  Ответить  
 
 автор: Stas   (24.01.2007 в 15:34)   личное сообщение
 
 

это первое, что я сделал, но так вообще не работает

  Ответить  
 
 автор: ГлазастыйМышь   (24.01.2007 в 16:20)   личное сообщение
 
 

PolPmntStr = "Update POLICY_PAYMENT set BILL_ID=" & BILL_ID & " where ID in " & _
"(SELECT PP.ID FROM POLICY AS P LEFT JOIN POLICY_PAYMENT AS PP ON P.ID = PP.POLICY_ID WHERE " & _
"(((PP.DATE_DUE)>" & cLng(NwBillFr.Text7) & ") And (PP.DATE_DUE)<" & cLng(NwBillFr.Text2) & " And ((P.INSURER_ID) = " & NwBillFr.Combo0.Value & ") And ((PP.BILL_ID) = 0)))"

  Ответить  
 
 автор: Stas   (24.01.2007 в 17:29)   личное сообщение
 
 

Спасибо большое, так заработало

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList