Tema: Re: Q: Access
Autorius: Laimis
Data: 2010-02-09 18:59:14
Vaida rašė:
> Čia mano procedūra, į kurią kreipiamasi kaskart updatinus kuri nors lauka.
>
> <...>
>

> If Not IsNull(Me.DataNuo) And Not IsNull(Me.DataIki) Then
> Nuo = Me.DataNuo
> Iki = Me.DataIki

Koks yra Nuo, Iki kintamųjų duomenų tipas? Variant? Ir kokio formato yra 
įvedama data? Kompiuterio regioniniai nustatymai?


> strfiltras = strfiltras & "[dtmSiuntosData] >= '" & Nuo & "' And
> [dtmSiuntosData] <= '" & Iki & "' And "
> ElseIf Not IsNull(Me.DataNuo) Then
> Nuo = Me.DataNuo
> strfiltras = strfiltras & "[dtmSiuntosData] >= '" & Nuo & "' And "
> ElseIf Not IsNull(Me.DataIki) Then
> Iki = Me.DataIki
> strfiltras = strfiltras & "[dtmSiuntosData] <= '" & Iki & "' And "
> End If

Lyrinė priešistorija, nukrypimas -- *Access'o* užklausose access'o db 
datas reikia nurodyti įvelkant jas į ##, pvz.:  "[dtmSiuntosData] >= #" 
& Nuo & "# ..."

http://articles.techrepublic.com.com/5100-10878_11-6135056.html

When you specify the criteria argument, date literals (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.) must be in U.S. 
format, even if you are not using the U.S. version of the Microsoft 
Access database engine. For example, May 10, 1996, is written 10/5/96 in 
the United Kingdom and 5/10/96 in the United States. Be sure to enclose 
your date literals with the number sign (#) as shown in the following 
examples.


Pačios problemos esmė yra ta, kad naudojamas (kintamųjų) datos formatas 
yra (ar gali būti) vienoks (jis priklauso nuo kompiuterio regioninių 
nustatymų), o duomenų bazėje galbūt kitas
Reikėtų tai suderinti; vienas iš būdų būtų naudoti Format funkciją.

Jei db yra access'e:

If Not IsNull(Me.DataNuo) And Not IsNull(Me.DataIki) Then
    Nuo = Format$(Me.DataNuo, "mm\/dd\/yyyy")
    Iki = Format$(Me.DataIki, "mm\/dd\/yyyy")
    <...>

strfiltras = strfiltras & "[dtmSiuntosData] >= #" & Nuo & "# And 
[dtmSiuntosData] <= #" & Iki & "# And "

Tuo atveju, jei db yra SQL serveryje, tai datas reikėtų konvertuoti į 
ANSI/ISO) formatą:

If Not IsNull(Me.DataNuo) And Not IsNull(Me.DataIki) Then
    Nuo = Format$(Me.DataNuo, "yyyy-mm-dd")
    Iki = Format$(Me.DataIki, "yyyy-mm-dd")
    <...>

strfiltras = strfiltras & "[dtmSiuntosData] >= '" & Nuo & "' And 
[dtmSiuntosData] <= '" & Iki & "' And "

Tingiu tikrinti ar SQL serveriui tinka ANSI formato datos be laiko 
dalies (yyy-mm-dd); galbūt reikia pridėti ir pusiaudienio laiką (jei 
lygini tik datas):

    Nuo = Format$(Me.DataNuo, "yyyy-mm-dd 12:00:00")
    Iki = Format$(Me.DataIki, "yyyy-mm-dd 12:00:00")

Na, o ISO 8601 formato data turėtų būti:

    Nuo = Format$(Me.DataNuo, "yyyy-mm-dd") & "T12:00:00"
    Iki = Format$(Me.DataIki, "yyyy-mm-dd") & "T12:00:00"