[VB6] SQL en datums

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • wolly_a
  • Registratie: September 2002
  • Niet online
Ik kan er even helemaal niet meer uitkomen. Het gaat om het volgende: ik wil graag alle items uit een database halen die tussen twee datums vallen. Dat deed ik als volgt:

Data1.RecordSource = "SELECT * FROM data WHERE datumin <= #" & Date & "# AND datumout > #" & Date & "#"

In de database is datumin 22-7-2006 0:00:00 en datumout 9-9-9999 23:59:59. Dit zijn beide datum/tijd velden in de database.

Ik dacht dat dit werkte, dat deed het ook, totdat het nu ineens 1 augustus is. Nu blijkt 1-8-2006 kleiner te zijn datum 22-7-2006. Dus er gaat toch nog iets fout. Hoe kan ik dit in vredesnaam oplossen?

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
probeer het eens met 2006-08-01 en 2006-07-22

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 20:05

Reinier

\o/

Gebruik je wel netjes datumvelden voor datumin en datumout? sorry, ja dus :X
Je kunt ook between gebruiken trouwens.

[ Voor 10% gewijzigd door Reinier op 01-08-2006 14:42 ]


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gebruik parameters ipv string concatenation om query op te bouwen.
Zie oa hier.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
lol dat is precies waar ik nu ook mee zit :P
alleen heb ik het met PHP dus ik zal hiervoor dan wel een andere topic starten aangezien het niet over VB6 gaat.

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • wolly_a
  • Registratie: September 2002
  • Niet online
Hmm... de between van Reinier functioneert ook niet. De parameters zeggen me zo niets en ik heb dan ook geen flauw idee hoe ik bovenstaande query kan ombouwen naar iets met parameters. Het is overigens niet zo dat de query een foutmelding geeft, maar het geeft helemaal geen resultaten.

Acties:
  • 0 Henk 'm!

  • wolly_a
  • Registratie: September 2002
  • Niet online
Hmmm.... t sorteren op datums werkt nu. Ik heb het zo opgelost, tenminste... Zo werkt het nu, maar is dit ook een goede methode?

strdate = Format$(CStr(Date), "yyyy-mm-dd")
Data1.RecordSource = "SELECT * FROM data WHERE datumin <= #" & strdate & "# AND datumout > #" & strdate & "#"
Data1.Refresh

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 20:05

Reinier

\o/

Is date geen reserved word?

Acties:
  • 0 Henk 'm!

Verwijderd

Date is inderdaad een functie ergens in VB6 die de huidige datum teruggeeft (afaik). Verder kan je inderdaad beter parameters gebruiken zoals Kenneth aangeeft. Dat scheelt rare conversiefouten en mogelijkheden tot SQL insertions.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het probleem is dat jij 1-8-2006 als 1 augustus ziet, maar de Query Engine ziet het als January Eigth :) Kortom: verschillende datumnotaties.
Een mogelijke oplossing is het gebruiken van de ISO-datumnotatie (yyyy-mm-dd) zoals hierboven aangegeven.
De uiteindelijke oplossing is parametriseren, omdat je dan geen datum<->string<->datum conversie meer hebt.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

Verwijderd

wolly_a schreef op dinsdag 01 augustus 2006 @ 15:36:
Hmmm.... t sorteren op datums werkt nu. Ik heb het zo opgelost, tenminste... Zo werkt het nu, maar is dit ook een goede methode?

strdate = Format$(CStr(Date), "yyyy-mm-dd")
Volgens mij ga je hier sowieso de mist in door CStr aan te roepen.

Haal de "-" uit de formattering. Dit teken wordt aangepast aan je lokale instellingen. Niet handig dus als je ISO 8601 notatie wilt hebben.

Zoiets krijg je dan als je parameterized queries gebruikt...
Visual Basic:
1
strdate = Format$(Year(Date),"0000" & "-" & Format$(Month(Date),"00") & "-" & Format$(Day(Date),"00")

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Visual Basic:
1
strdate = Format(Date,"yyyy-mm-dd")
:)


En als je parametriseert, hoef je helemaal niet meer te formatteren en te converteren, dat is het hele punt ervan.

[ Voor 55% gewijzigd door kenneth op 01-08-2006 18:16 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Pagina: 1