[ASP] SQL-Selectie op datum in Access-tabel

Pagina: 1
Acties:

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
/Edit - oplossing gevonden en in dit topic gepost
\Einde edit

Beetje rare titel, maar het is dan ook een raar probleem.
Ik heb een Access-database met een tabel waar een veld "datum" in zit. Het gegevenstype is ook "datum" (lange en korte notatie en zo geprobeerd).

In mijn ASP-pagina doe ik een SQL-query in die tabel, like so:
code:
1
SELECT * FROM MijnTabel WHERE datum > #1-2-2002# AND datum < #6-4-2000#

Ik heb ook dit gedaan:
code:
1
SELECT * FROM MijnTabel WHERE datum BETWEEN #1-2-2002# AND < #6-4-2000#

De twee data komen uit variabelen maar worden correct in het SQL-commando geplaatst. In beide gevallen komen er verkeerde resultaten uit de query. Dit heeft hiermee te maken: ACC2002: Incorrect Records Are Selected When the Criterion Is a Date and the Short Date Format Is d/M/yy (Q295698). (Zoals gezegd, maakt Short Date Format of Long Date Format geen verschil.)

De afwijkingen in de resultaten van de query verschillen per criterium (zoek je met andere date, krijg je andere foute gegevens terug) en er is niet echt een lijn in te vinden.

In het genoemde artikel staat een workaround (format() gebruiken), maar die geldt alleen voor VB, en in mijn ASP-toepassing gebruik ik VBscript.

Kan iemand hier iets nuttigs over zeggen?

/Edit: tikf0ut3n

Bloed, zweet & koffie


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Je Database doet ook aan datum-transformaties ism. BETWEEN.

Er zijn al vaker van deze soort vragen gesteld, maar je hebt er zelf redelijk naar gezocht (en das de reden waarom ik er geen slot op zal gooien..)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op woensdag 06 februari 2002 15:41 schreef dusty het volgende:
Je Database doet ook aan datum-transformaties ism. BETWEEN.
Wat bedoel je met datum-transformaties ism BETWEEN? Als ik geen BETWEEN gebruik maar WHERE datum > #datum1# AND datum < #datum2# dan krijg ik ook van die rare resultaten. Op sommige datums werkt het goed, op de meeste andere niet.
Er zijn al vaker van deze soort vragen gesteld, maar je hebt er zelf redelijk naar gezocht (en das de reden waarom ik er geen slot op zal gooien..)
Ik heb in GoT gezocht op ASP, datum, access, SQL, fout resultaat, en een combinatie van die steekwoorden. In totaal vond ik twee resultaten in dit /14, maar die hadden niets met mijn vraag te maken.

En ik heb inderdaad heel intensief gezocht, en zelfs de oorzaak van het probleem gevonden.. het is de oplossing die ik zoek. :) Eigenlijk zou ik geen reden kunnen bedenken om hier een slot op te zetten.

Een paar andere dingen die ik geprobeerd heb: met Session.LCID = xxxx verschillende locales geprobeerd en mijn eigen system locale veranderd in verschillende waarden.

Wat ik uit het verhaal van Microsoft begrijp, is het een probleem tussen Access en ASP.

Bloed, zweet & koffie


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 06 februari 2002 15:51 schreef Vilenin het volgende:
[..]
Wat bedoel je met datum-transformaties ism BETWEEN? Als ik geen BETWEEN gebruik maar WHERE datum > #datum1# AND datum < #datum2# dan krijg ik ook van die rare resultaten. Op sommige datums werkt het goed, op de meeste andere niet.
to_date()/to_char() -methoden zitten ZELFS in access!
[..]
Ik heb in GoT gezocht op ASP, datum, access, SQL, fout resultaat, en een combinatie van die steekwoorden. In totaal vond ik twee resultaten in dit /14, maar die hadden niets met mijn vraag te maken.
Vreemd:
Je zoekactie naar 'select datum between access' leverde 9 resultaten op. Resultaten 1 - 9

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Ik heb niet zo'n trek om bonje te krijgen met een mod, dus dit is het laatste dat ik erover zeg: ik heb niet gezocht op "between" omdat dat geen vereiste is voor het fenomeen. Ik zal die 9 resultaten eens doorspitten (tnx!). :)

Anyway - ik ben niet zo thuis in Access. Hoe zit dat met die methoden? Oww wacht ik kijk wel in de Help van Access ;)

Bloed, zweet & koffie


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 06 februari 2002 16:07 schreef Vilenin het volgende:
Ik heb niet zo'n trek om bonje te krijgen met een mod
[..]
Ik ben geen mod. :)

En om ruzie met mij te krijgen moet je toch echt wel wat anders doen :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op woensdag 06 februari 2002 16:14 schreef dusty het volgende:
Ik ben geen mod. :)
Op woensdag 06 februari 2002 15:41 schreef dusty het volgende:
(en das de reden waarom ik er geen slot op zal gooien..)
Ik dagget ff, omdat je met je slotje begon :P

Ik heb die 9 topics gevonden en doorzocht, maar niets gevonden waar ik wat aan heb.

Nogmaals: de oorzaak van m'n probleem is duidelijk, ik zoek alleen de oplossing annex workaround...

Bloed, zweet & koffie


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Okay de oplossing dan maar?

to_date().

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
(->Wel reageren als je on-line bent hoor ;))

Hoe pas ik to_date() toe in mijn query? En ja, ik heb gezocht. Ik kan namelijk erg snel zoeken sinds ik die leuke trucs van GoT heb geleerd :)

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Ik heb de oplossing hier gevonden: 4GuysFromRolla - Working with Databases and International Date Formats (By Darren Neimke).

Het komt erop neer dat je je datums in dit formaat aan je database moet aanbieden: dd-MMM-yyyy (bv. 01-APR-2007 en 16-FEB-1938).

In het genoemde artikel van 4Guys staat een copy-n-paste-oplossing: een Function die je datum converteert naar het juiste formaat.

/Edit:
Ik had nog problemen als de maanden maart, mei en/of oktober in de query zaten. Dit komt doordat ik een Nederlandstalige Windows gebruik. Ik laat in de Function nu de maanden van de Nederlandse afkortingen naar de Engelse omzetten. Dit was de functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Function MediumDate (str)
    Dim aDay
    Dim aMonth
    Dim aYear

    aDay = Day(str)
    aMonth = MonthName(Month(str),True)

      aYear = Year(str)

    MediumDate = aDay & "-" & aMonth & "-" & aYear
End Function

Dit istie nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function MediumDate (str)
    Dim aDay
    Dim aMonth
    Dim aYear

    aDay = Day(str)
    aMonth = MonthName(Month(str),True)

    IF aMonth = "mrt" THEN
        aMonth = "mar"
    END IF
    IF aMonth = "mei" THEN
        aMonth = "may"
    END IF
    IF aMonth = "okt" THEN
        aMonth = "oct"
    END IF


    aYear = Year(str)

    MediumDate = aDay & "-" & aMonth & "-" & aYear
End Function

Je krijgt dan ipv 12-mrt-2002 12-mar-2002, ipv 01-mei-1987 01-may-1987 en ipv 20-okt-2006 20-oct-2006.

Bloed, zweet & koffie


Verwijderd

Probleem heb ik ook gehad.
Had een engelse sql server en zowel nl als engelstalige werkstations.
Ik heb het opgelost door in m'n asp de 'locale' op engels te zetten dmv

setlocale(1033)

Nu werkt alles intern tenminste op engelse notatie.

Verwijderd

Dergelijke problemen treden niet alleen op bij ASP/Access 2002 maar ook al in Access 97.

Daar is de oplossing altijd:
code:
1
Format(Datumveld, "mm/dd/yyyy")

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Topicstarter
Op donderdag 07 februari 2002 20:44 schreef IJskoud het volgende:
Dergelijke problemen treden niet alleen op bij ASP/Access 2002 maar ook al in Access 97.

Daar is de oplossing altijd:
code:
1
Format(Datumveld, "mm/dd/yyyy")
Had dat ff wat eerder gemeld, grappenmaker :D -- dat had mij een hoop moeite gescheeld! :P (Geintje hoor)

NIW lijkt mij dat we weer genoeg ref.material hebben verzameld. Ik (=topicstarter) zeg: slotje :7

Bloed, zweet & koffie

Pagina: 1