Вопрос: Проблемы с датами
Совет:
...а я пользую функцию типа to_lng и по-любому везде с датами все работает...
' "SELECT * FROM Rates WHERE to_lng(InputDate)=" & to_lng(Format(Now(),"dd.mm.yyyy"))
а собственно Date работает
попробуй с to_lng, указанным выше, а то с этими датами проблем не оберешься...
- неправильные национальные настройки
- прибабахи SQL по работе только с амрыканскими датами, да еще и ## решетки им дай
... уж и не вспомню, что еще, но меня эта лабуда достала еще в аксес2.0 и я пользую to_lng или to_dbl (если и время надо) а точнее вот такой маленький модуль... в неизменном виде с 1994 года...
Option Compare Database
Option Explicit
Public X, Y, Z
Function to_cur(Num) As Currency
On Error Resume Next
to_cur = CCur(Num)
If Err <> 0 Then to_cur = 0
If IsNull(Num) Then to_cur = 0
On Error GoTo 0
End Function
'==============
Function to_dbl(Num) As Double
On Error Resume Next
to_dbl = CDbl(Num)
If Err <> 0 Then to_dbl = 0
If IsNull(Num) Then to_dbl = 0
On Error GoTo 0
End Function
'==============
Function to_int(Num) As Integer
On Error Resume Next
to_int = CInt(Num)
If Err <> 0 Then to_int = 0
If IsNull(Num) Then to_int = 0
On Error GoTo 0
End Function
'==============
Function to_lng(Num) As Long
On Error Resume Next
to_lng = CLng(Num) 'ВНИМАНИЕ! См. замечание ниже
If Err <> 0 Then to_lng = 0
If IsNull(Num) Then to_lng = 0
On Error GoTo 0
End Function
'==============
Function to_sng(Num) As Single
On Error Resume Next
to_sng = CSng(Num)
If Err <> 0 Then to_sng = 0
If IsNull(Num) Then to_sng = 0
On Error GoTo 0
End Function
'==============
Function to_str(VarStr) As String
On Error Resume Next
to_str = CStr(VarStr)
If Err <> 0 Then to_str = ""
If IsNull(VarStr) Then to_str = ""
On Error GoTo 0
End Function
'==============
Function to_date(VarDate) As Date
On Error Resume Next
to_date = CDate(VarDate)
If Err <> 0 Then to_date = 0
If IsNull(VarDate) Then to_date = 0
On Error GoTo 0
End Function
'==============
AR
========
========
Некоторое замечание...
Если использовать CLng() для полной даты, то можете ошибиться.
Например сейчас Now дает
?now()
28.01.2003 13:03:14
В Double это:
?cdbl(cdate("28.01.2003 13:03:14"))
37649,543912037
CLng() даст 37650, т.е. другую дату:
?cdate(37650)
29.01.2003
Надо еще Int пользоваться
?сLng(Int(now()))
37649
Serge_Gavrilov
|