Toon posts:

[access en VB] problemen met datums

Pagina: 1
Acties:

Verwijderd

Topicstarter
Momenteel ben ik bezig met een VB project voor school. Ik heb erg veel problemen met de sql statements die vergelijkingen doet met datums. Een eenvoudige voorbeeld hieronder:
code:
1
2
3
Dim gbdatum as #29/02/2003#

Sql = “SELECT persoonid from persoon WHERE geboortedatum = “” & gbdatum & ””

En als ik deze sql laat uitvoeren vind hij helemaal niks terwijl er wel iemand is met 29-02-2005 als geboortedatum. De dagen en maanden haalt hij doorelkaar. Dit blijkt wel wanneer ik het laat afbeelden met behulp van een msgBox. BIJV: 2-29-2005

Volgens mij zeer eenvoudig op te lossen maar ik kom er maar niet uit. Ik heb verder in al mijn sql boeken gezocht maar niets lukt en op internet gezocht. Ik kan gewoon geen datums vergelijken enzo

De code hierboven is alleen een kleine voorbeeld om mijn vraag mee te stellen. Ik ben namelijk een reserveringsysteem aan het bouwen in vb, waar ik totaal geen ervaringen mee heb.
Met de code hierbeneden check ik welke bungalows voor een bepaalde periode beschikbaar zijn. Maar deze werkt natuurlijk niet omdat ik de datums niet kan vergelijken(zie boven). Om de code hier beneden te aten werken moet ik eerst mijn eerste statement hierboven werkend aken. Graag wil ik jullie vragen om deze beginner te helpen.

Reserveringregels met de volgende kolommen:

Reserveringregelid, persoonid, bungalowid, aankomst_datum, vertrek_datum

code:
1
2
3
4
5
6
7
8
9
‘reserveringregels tabel

Dim sqlDatum date

sqlDatum = “SELECT persoonID, bungalowID, aankomst_datum, vertrek_datum From Reserveringregels WHERE (“ & txtBegindatum.text & ”,” & txtEinddatum &”) NOT OVERLAPS (aankomst_datum, vertrekdatum)”

DBgridReserveringen.recourdsource = sqlDatum

DBgridReserveringen.refresh



Ook ben ik allerlei oplossingen tegen gekomen die niet bij mij werken. Sql statements zoals:
code:
1
2
3
4
Sql = “SELECT voornaam from persoon WHERE geboortedatum = ’13-05-2005’”
Werkt niet…..

Sql = ”SELECT voornaam FROM persoon WHERE geboortedatum = #13/05/2005#”

Werkt ook niet

VB geeft geen foutmelding maar kan verder ook niks vinden.
Kan iemand mij A.U.B. helpen of een kleine voorbeeld geven of een link geven waar ik het kan leze enz? Alvast bedankt

  • rdfeij
  • Registratie: September 2001
  • Laatst online: 30-04 19:05
Weet niet zo veel van programmeren, maar heb vroeger zelf ook wel eens last gehad met voorloopnullen.

Ik zie in je tekst dat je deze random gebruikt.
In je windows instellingen eens de volgende korte datum notatie neerzetten : dd-MM-jjjj
Doe dit dan voor het gemak ook met de tijd UU:mm:ss

Deze instellingen kun je vinden bij : start -> configuratiescherm -> landinstellingen - > knop aanpassen.

Zoi werkt windows altijd met dezelfde datum/tijd notatie.

2 feb 2005 -> wordt altijd vanzelf 02-02-2005

Ben benieuwd of dit het probleem is.

Verwijderd

Topicstarter
nee daar ligt het niet aan, maar bedankt voor je hulp

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 12-04 11:02

Shezzie

Lekker hoor!

De oplossing is simpel: SQL server lult de amerikaanse datum-tijd notatie na een standaard installatie. Je moet bij je input de dag en maand dus omdraaien:

cmd = new SqlCommand("SELECT dbo.posHeader.RecUID, dbo.PosHeader.FBCounter " +
"FROM #TMP_OUT inner join expAll on expAll.RecUID=#TMP_OUT.ExportRecUID " +
"LEFT OUTER JOIN dbo.posHeader ON dbo.expAll.HeaderRecUID = dbo.posHeader.RecUID " +
"WHERE dbo.posHeader.Branch = " + sqlbranchnr.ToString() + " " +
"AND (dbo.posHeader.DocumentType = 12) " +
"AND (dbo.posHeader.DocumentDate = '" + sqldate.ToString("MM-dd-yyyy") + "') " +
"GROUP BY dbo.posHeader.RecUID, dbo.PosHeader.FBCounter " +
"ORDER BY dbo.PosHeader.FBCounter ASC", this.Connection);

Draai die 2 om en je bent home-free :)

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
Je vergelijkt europese notatie met amerikaanse notatie. Dat gaat niet werken. Waarschijnlijk kan je access wel zo configureren dat data in europese notatie worden opgeslagen maar zelf zorg ik altijd dat de code de juiste notatie voert aan de db.
[google=access datumnotatie] geeft behoorlijk wat hits

Verwijderd

Topicstarter
bedankt bedankt, ik ga het testen. maar ik heb bijv ook 01-01-2005 geprobeerd dus eigenlijk moet het dan niks uitmaken. maar nog niks gevonden terweijl er wel zo'n record is

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 12-04 11:02

Shezzie

Lekker hoor!

Let er trouwens ook op dat je datum quoted is:

" + sqldate.ToString("MM-dd-yyyy") + "

Je geeft tekst door naar de database, geen sqldatetime type of iets dergelijks.

Succes! 8)

Verwijderd

Topicstarter
sqldate = bijv 12-02-2005?

dus
Dim sqldate ad date

sqldate = #12/02/2005#

zo iets? sqldate is een datunm?

[ Voor 64% gewijzigd door Verwijderd op 25-08-2005 16:27 ]


  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 12-04 11:02

Shezzie

Lekker hoor!

SELECT *
FROM posHeader
WHERE DocumentDate = "05/31/2005"

Dat is wat je letterlijk naar de database wilt sturen. De Sql Server rekent die tekst om naar een datetime formaat om de query uit te voeren.

Verwijderd

Topicstarter
ik gebruik access en visual basic, maakt dat wat uit?

[ Voor 18% gewijzigd door Verwijderd op 25-08-2005 16:55 ]


  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 12-04 11:02

Shezzie

Lekker hoor!

Niet substantieel, Microsoft zou wel gek zijn om per database-type en programmeertaal een andere manier van interfacen te maken :P

Verwijderd

Topicstarter
Het is nu eindelijk gelukt om datums te vergelijken. Het lag idd aan amerikaanse en europeese nonatie van datums.

Dan ben ik nu bij de volgende code om te vergelijken of bepaalde periode een bungalow is gereserveeerd.

strDatumDef = #12/02/2005#
strDatumVertrekef = #12/03/2005#

allebei van het type DATE

code:
1
2
3
strSQL = "SELECT * FROM Reserveringregels WHERE
(aankomst_datum, vertrek_datum) not overlaps 
(" &  strDatumDef &  "," & strDatumVertrek & ")"


dit werkt ook niet
code:
1
2
3
strSQL = "SELECT * FROM Reserveringregels WHERE
(aankomst_datum, vertrek_datum) not overlaps 
(strDatumDef ,  strDatumVertrek)"


Bovenstaande query geeft een foutmelding: syntax error(comma) in query.

weet iemand wat het is?

[ Voor 33% gewijzigd door Verwijderd op 25-08-2005 19:33 ]

Pagina: 1