[Acces] beschikbare plaatsen ophalen in reserveringsform*

Pagina: 1
Acties:

  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
Goede avond mede-tweakers

Ik heb een opdracht gekregen om een database te bouwen voor een camping.
Nu loop ik tegen een probleem aan met reserveringen.
Je moet niet een standplaats dubbel boeken.
Ik wilde dit oplossen door dit:
Ik maak een formulier, zodra de vertrek en einddatum is in gevoerd dat er in een dropdown menutje gelijk de beschikbare standplaatsen te zien zijn, zodat de standplaatsen niet dubbel worden geboekt.

Na veel zoeken hier op het forum en met google, kwam ik tenslotte een probleem tegen van dezeflde aard. Daarin stond deels de code, deze heb ik aangepast, maar het werkt niet. Ik krijg een error

Ik heb de volgende event gehangen aan de tekstvak Vertrek_datum, dus zodra de vertrekdatum in is gevoerd dan moet de beschikbare huisjes opgezocht en in een drop-down menu gezet.

code:
1
2
3
4
5
6
7
8
Private Sub Vertrek_datum_AfterUpdate()


SID = "SELECT [Standplaatsen].[SID], [Klant_reserveringen].[Aankomst_datum], [Klant_reserveringen].[Vertrek_datum], [Klant_reserveringen].[SID] " & _
"FROM Klant_reserveringen, Standplaatsen" & _
"WHERE (NOT BETWEEN [Aankomst_datum] = [Klant_reserveringen].[Aankomst_datum] AND [Vertrek_datum]=[Klant_reserveringen].[Vertrek_datum]) AND NOT [Standplaats].[SID] = [Klant_reserveringen].[SID]"

End Sub


de error die ik krijg is: Run-time error '-2147352567 (800200090)' The value you entered isn't valid for this field.

Wat doe ik fout?

Alvast bedankt!!

edit: zaten nog wat foutjes in de code.
edit2: ik krijg nu geen errors meer, maar hij laat toch alle standplaatsen zien in de reserveringen, terwijl de standplaats bezet is

[ Voor 22% gewijzigd door Goegol op 03-02-2006 20:50 ]

Hemelaar Fotografie


  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
Nog door gezocht en nu heb ik deze code
code:
1
2
3
4
5
6
7
8
9
Private Sub Vertrek_datum_AfterUpdate()

Me.SID.RowSourceSID = "SELECT [Standplaatsen].[SID], [Klant_reserveringen].[Aankomst_datum], [Klant_reserveringen].[Vertrek_datum], [Klant_reserveringen].[SID] " & _
"FROM Klant_reserveringen, Standplaatsen" & _
"WHERE (NOT BETWEEN [Aankomst_datum] = [Klant_reserveringen].[Aankomst_datum] AND [Vertrek_datum]=[Klant_reserveringen].[Vertrek_datum]) AND NOT [Standplaats].[SID] = [Klant_reserveringen].[SID]"

Me.SID = Me.SID.ItemData(0)

End Sub


Maar het werkt nog steeds niet, iemand?

Hemelaar Fotografie


  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
niet kicken binnen 24 uur en gebruik de editknop als je nog iets aan je laatste post wilt toevoegen

[ Voor 142% gewijzigd door Lustucru op 04-02-2006 11:51 ]

Hemelaar Fotografie


  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 21-06 09:07
5 "FROM Klant_reserveringen, Standplaatsen" & _

2 opmerkingen bij regel 5 van jouw code:
- er moet een spatie tussen standplaatsen en de afsluitende quote
- op welke wijze zijn de 2 tabellen aan elkaar gelinkt, normaal maak je een join tussen 2 tabellen ;-)

Hans van Zijl


  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
Heb de sid via relaties aan elkaar gekoppeld, het eerste puntje nog niet gedaan, zal daarlijk even testen

Hemelaar Fotografie


  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
Ik zal het even verduidelijken met behulp van dit plaatje.
Afbeeldingslocatie: http://www.hans-paulhemelaar.nl/formulier.jpg

Je selecteerd eerst de klant, dan voer je de aankomst datum en de vertrekdatum in.
Zodra je de vertrekdatum hebt ingevuld moet acces gaan zoeken welke standplaatsen (het is een camping) er beschikbaar zijn.
Ik wilde dit oplossen door de tabel Klant_reserveringen en Standplaatsen aan te roepen, en dan alle gereserveerde standplaatsen in die periode er uit te filteren (dus een gast wil een stand plaats van 12-06-2006 tot en met 19-06-2006, standplaats 1 is bezet van 10-06-2006 tot en met 15-06-2006, dan mag hij standplaats 1 NIET tonen).

Dit probeer ik via de volgende code te doen:
code:
1
2
3
4
5
6
7
8
9
Private Sub Vertrek_datum_AfterUpdate()

Me.SID.RowSource = "SELECT [Standplaatsen].[SID], [Klant_reserveringen].[Aankomst_datum], [Klant_reserveringen].[Vertrek_datum], [Klant_reserveringen].[SID] " & _
"FROM Klant_reserveringen, Standplaatsen " & _
"WHERE (NOT BETWEEN [Aankomst_datum] = [Klant_reserveringen].[Aankomst_datum] AND [Vertrek_datum]=[Klant_reserveringen].[Vertrek_datum]) AND NOT [Standplaats].[SID] = [Klant_reserveringen].[SID]"

Me.SID = Me.SID.ItemData(0)

End Sub


Maar als ik nu een nieuwe reservering wil maken in een bepaalde periode, dan laat access niks zien bij standplaatsen, terwijl er in desbetrefende periode standplaatsen vrij zijn.

Ik heb verschillende sites afgezocht en met behulp van een eerder topic, en andere sites, heb ik de bovenstaande code in elkaar gedraaid.

Klant_reserveringen en Standplaatsen zijn aan elkaar gelinkt, dit is een een-op-veel relatie. (standplaatsen -> Klantreserveringen).

Waarom laat acces niet de vrije standplaatsen zien?

Alvast bedankt

edit: plaatje toegevoegd

[ Voor 7% gewijzigd door Goegol op 06-02-2006 16:09 ]

Hemelaar Fotografie


  • Boss
  • Registratie: September 1999
  • Laatst online: 22:38

Boss

+1 Overgewaardeerd

Is het niet WHERE aankomst_datum BETWEEN bla AND blabla in plaats van BETWEEN aankomst_datum = bla AND blabla?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Wat je zoekt zijn alle standplaatsen die NIET voorkomen in de reserveringstabel binnen een bepaalde periode. Dan moet je dus eerst ophalen welke reserveringen wél voorkomen en dan met een outer join of een not IN() statement die standplaatsen eruit gooien.
code:
1
2
3
4
5
6
7
SELECT s.*
FROM standplaatsen as s  LEFT JOIN 
       (SELECT reserveringen.standplaats
       FROM reserveringen
       WHERE((reserveringen.van<=[vertrekdatum]) AND (reserveringen.tot>=[aankomstdatum]))) AS r
ON s.id = r.standplaats
WHERE (r.standplaats Is Null);


óf
code:
1
2
3
4
5
6
SELECT s.*
FROM standplaatsen 
WHERE standplaatsen.id Not In 
          (SELECT reserveringen.standplaats
          FROM reserveringen
          WHERE((reserveringen.van<=[vertrekdatum]) AND (reserveringen.tot>=[aankomstdatum])));

offtopic:
kleine titelfix: event? snap ik niet zo goed als titel

[ Voor 6% gewijzigd door Lustucru op 07-02-2006 09:25 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Goegol
  • Registratie: November 2005
  • Laatst online: 21-08 11:14
Ik heb je bovenste code gebruikt, en aangepast aan me tabellen, maar krijg nog steeds errors dat de sql statement nog niet goed is.

Ik post zo even de error.

Edit: moet access overnieuw installeren, vanmiddag hoop ik de code + error te posten!

[ Voor 23% gewijzigd door Goegol op 08-02-2006 08:56 ]

Hemelaar Fotografie

Pagina: 1