[ACCESS] fout in sql query

Pagina: 1
Acties:

  • AdP
  • Registratie: Februari 2003
  • Laatst online: 17-08 16:47
Ik zit hier met een access database waar ik een sql query op moet uitvoeren waarmee ik tussen 2 door de gebruiker in te geven datums kijk welke prestaties nog niet betaald zijn.

Ik dacht het zo te doen:

SELECT [Prestaties].[PrestDatum], [Prestaties].[Patnaam], [Prestaties].[Patvnaam], [Prestaties].[Patopnamenr], [Prestaties].[MutualiteitNr], [Prestaties].[VerzekeringNr], [Prestaties].[Betaaldatum], [Prestaties].[betBedrag]
FROM Prestaties
WHERE (([Prestaties].[PrestDatum] > [Geef begin en jaar op Vb mm/jjjj]) AND ([Prestaties].[PrestDatum] < [Geef eind datum])) AND ([Prestaties].[betBedrag] = "0" );

betBedrag bevat namelijk 0,00 als de prestatie nog niet betaald is. Maar access zegt dat de query te complex is dus ik zie vast iets over het hoofd maar heb wat zitten proberen en zoeken maar ben er niet achter gekomen...

  • Noork
  • Registratie: Juni 2001
  • Niet online
Wat een gare query is dit zeg.

Gebruik even Select * from prestaties (dit houdt het wat overzichtelijker)

waarom overal de naam van de tabel ervoor? dit is toch ook niet nodig.

En staat er nu 0 of 0,00 in betbedrag? of toch 0.00? Dit is wel van belang voor de vergelijking die je maakt.

[ Voor 24% gewijzigd door Noork op 04-06-2003 10:29 ]


Verwijderd

Haakjesfoutje:

code:
1
2
3
WHERE (([Prestaties].[PrestDatum] > [Geef begin en jaar op Vb mm/jjjj]) 
AND ([Prestaties].[PrestDatum] < [Geef eind datum])) 
AND ([Prestaties].[betBedrag] = "0" );


moet zijn:

code:
1
2
3
WHERE ([Prestaties].[PrestDatum] > [Geef begin en jaar op Vb mm/jjjj]) 
AND ([Prestaties].[PrestDatum] < [Geef eind datum]) 
AND ([Prestaties].[betBedrag] = "0" );

[ Voor 7% gewijzigd door Verwijderd op 04-06-2003 10:28 ]


Verwijderd

Noork schreef op 04 June 2003 @ 10:27:
Wat een gare query is dit zeg.

Gebruik even Select * from prestaties (dit houdt het wat overzichtelijker)

waarom overal de naam van de tabel ervoor? dit is toch ook niet nodig.
Nooit Select * als je niet alles nodig hebt, maakt het alleen maar trager...

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 04 juni 2003 @ 10:29:
[...]


Nooit Select * als je niet alles nodig hebt, maakt het alleen maar trager...
Er staat ook "gebruik EVEN.....". Ik bedoel daarmee even, als in tijdelijk. Dit om het overzichtelijk te houden. Want daar zal de fout niet in zitten, maar je wordt er wel gek van als je er naar kijkt.

  • pagani
  • Registratie: Januari 2002
  • Niet online
Er bestaat voor een 'between' functie, kun je een hoop regels mee vervangen...

[ Voor 46% gewijzigd door pagani op 04-06-2003 10:36 ]


Verwijderd

Noork schreef op 04 June 2003 @ 10:31:
[...]


Er staat ook "gebruik EVEN.....". Ik bedoel daarmee even, als in tijdelijk. Dit om het overzichtelijk te houden. Want daar zal de fout niet in zitten, maar je wordt er wel gek van als je er naar kijkt.
Apologies accepted :P

TS, in wat voor soort veld staat die betaling? Een nummeriek of textfield?

Verwijderd

johnnyv.nl schreef op 04 June 2003 @ 10:33:
Er bestaat voor data een 'between' functie :D
Bijna goed. BETWEEN is een >= en <= functie. De TS heeft > en <.

(Oftewel bij BETWEEN wordt de grenswaarde ook meegepakt... kan lastig zijn)

  • pagani
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 04 June 2003 @ 10:35:
[...]


Bijna goed. BETWEEN is een >= en <= functie. De TS heeft > en <.

(Oftewel bij BETWEEN wordt de grenswaarde ook meegepakt... kan lastig zijn)
Dat kun je oplossen met NOT grenswaarde

Verwijderd

johnnyv.nl schreef op 04 June 2003 @ 10:36:
[...]

Dat kun je oplossen met NOT grenswaarde
Eeeeuh, ik volg je even niet. Je bedoelt NOT BETWEEN?


Damn... ik ook altijd met m'n grote mond... :P

[ Voor 14% gewijzigd door Verwijderd op 04-06-2003 10:39 ]


  • pagani
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 04 juni 2003 @ 10:38:
[...]


Eeeeuh, ik volg je even niet. Je bedoelt NOT BETWEEN?


Damn... ik ook altijd met m'n grote mond... :P
IF waarde BETWEEN grenswaarde1 AND grenswaarde2
AND waarde NOT IN (grenswaarde1,grenswaarde2)

Bijvoorbeeld...

Verwijderd

johnnyv.nl schreef op 04 juni 2003 @ 10:42:
[...]


IF waarde BETWEEN grenswaarde1 AND grenswaarde2
AND waarde NOT IN (grenswaarde1,grenswaarde2)

Bijvoorbeeld...
Op dat moment is de hele meerwaarde van je BETWEEN toch weg? Je query's worden er dan niet schoner op....

code:
1
2
WHERE waarde BETWEEN grenswaarde1 AND grenswaarde2
AND waarde NOT IN (grenswaarde1,grenswaarde2)


of

code:
1
2
WHERE waarde > grenswaarde1 
AND waarde < grenswaarde2


Ik zou het wel weten ;)

[ Voor 6% gewijzigd door Verwijderd op 04-06-2003 10:48 ]


  • pagani
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 04 June 2003 @ 10:44:
[...]


Op dat moment is de hele meerwaarde van je BETWEEN toch weg? Je query's worden er dan niet schoner op....

code:
1
2
WHERE waarde BETWEEN grenswaarde1 AND grenswaarde2
AND waarde NOT IN (grenswaarde1,grenswaarde2)


of

code:
1
2
WHERE waarde > grenswaarde1 
AND waarde < grenswaarde2


Ik zou het wel weten ;)
Volgens mij werkt waarde1 > waarde2 bij twee data (datums, whatever) niet zoals de TS het doet, toch? Daar gebruik ik iig between voor...

[ Voor 3% gewijzigd door pagani op 04-06-2003 10:50 ]


Verwijderd

johnnyv.nl schreef op 04 June 2003 @ 10:49:
[...]


Volgens mij werkt waarde1 > waarde2 bij twee data (datums, whatever) niet zoals de TS het doet, toch? Daar gebruik ik iig between voor...
Op het moment dat de TS in zijn database de geode datatypes heeft aangemaakt (dus datums van het datatype datum :X ) dan hoort het (in Access iig) gewoon te werken. BETWEEN is niets anders dan een verkorte notatie voor >= en <=...

  • pagani
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 04 juni 2003 @ 10:52:
[...]


Op het moment dat de TS in zijn database de geode datatypes heeft aangemaakt (dus datums van het datatype datum :X ) dan hoort het (in Access iig) gewoon te werken. BETWEEN is niets anders dan een verkorte notatie voor >= en <=...
Meen me nog uit een van mijn vroegere projecten te herinneren dat dat niet goed werkte in access, maar kan het fout hebben. (offtopic: over het 'database zijn' van access ga ik hier geen discussie aan :P)

[ Voor 3% gewijzigd door pagani op 04-06-2003 11:00 ]


  • AdP
  • Registratie: Februari 2003
  • Laatst online: 17-08 16:47
Ben nu ondertussen zover:

SELECT *
FROM Prestaties
WHERE ([Prestaties].[PrestDatum] between [Geef begin en jaar op Vb mm/jjjj] and [Geef eind datum])
AND ([Prestaties].[betBedrag] = "0" );

Datums lukken (hiervoor ook al), maar krijg nog steeds de melding dat nadat ik allebei de datums heb ingevuld: The expression is typed incorrectly or is too complex to be evaluated.

betBedrag is opgebouwd als: 0,00

  • pagani
  • Registratie: Januari 2002
  • Niet online
Moet "0" niet gewoon 0 of '0' zijn? betBedrag is toch geen integer he? (weet dat 0,00 geen int kan zijn)

[ Voor 32% gewijzigd door pagani op 04-06-2003 11:42 ]


  • AdP
  • Registratie: Februari 2003
  • Laatst online: 17-08 16:47
Bedankt! :) :)

Het is nu gelukt! Moest idd 0 zijn ipv "0"!

Topic mag slotje op!

  • pagani
  • Registratie: Januari 2002
  • Niet online
AdP schreef op 04 June 2003 @ 11:55:
Bedankt! :) :)

Het is nu gelukt! Moest idd 0 zijn ipv "0"!

Topic mag slotje op!
Nog even voor de duidelijkheid: de TS probeerde een integer met een string te vergelijken, dit kan niet...

[ Voor 3% gewijzigd door pagani op 04-06-2003 12:52 ]

Pagina: 1