|
|
|
| Добрый день всем,
понимамаю, что вопрос дилетантский, но все же когда-то начинали.
В 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
Как "перетащить" даты в запрос в нужном формате? Совсем не хочется в таблице у поля формат даты на текст менять. | |
|
| |
|
|
|
| SELECT * FROM PP WHERE (((PP.DATE_DUE)=#01/01/2007#)); | |
|
| |
|
|
|
| Т.е. надо пользователя заставлять вводить дату в американском формате 03/31/2007? Его я даже почему-то не нашел в свойствах контрола.
Или надо value контрола преоборазовывать прежде чем в запрос вставлять? | |
|
| |
|
|
|
| а как вы его подставляете? руками собираете строку SQL?
если да, то воспользуйтесь
format('01.01.2007',"\#dd\/mm\/yyyy\#") | |
|
| |
|
|
|
| Не очень понял, что значит "руками". Даты в запрос подтаскиваются из контрола 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\#") | |
|
| |
|
|
|
| зачем так слолжно: "(PP.DATE_DUE)>format('" & NwBillFr.Text7.Value & "', '#mm/dd/yyyy#')"
может проще так: "(PP.DATE_DUE)>" & Format(NwBillFr.Text7.Value, "mm/dd/yyyy") ?
>Но теперь не работает, ругаясь на отсутствие закрывающей скобки
Убери все сгенерированные скобки и расставь сам! | |
|
| |
|
|
|
| должно быть что-то вроде
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)))"
|
т.е. дата ограничена #, а не ' | |
|
| |
|
|
|
| это первое, что я сделал, но так вообще не работает | |
|
| |
|
|
|
| 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)))" | |
|
| |
|
|
|
| Спасибо большое, так заработало | |
|
| |