WHERE waarde optioneel maken Access SQL

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 12-10 14:03
Geachte,

Ik ben momenteel bezig om een query te maken in Microsoft Access waarmee een bestaande bestelling kan worden aangepast.
Echter kan er via 1 formulier, en 1 report de bestelling worden gewijzigd. Nu heb ik het voor elkaar dat ik zowel via het formulier en de report bij het goede formulier kom om de bestelling aan te passen.
Om vervolgens de gegevens uit de database te halen maak ik gebruik van een query.


SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT Orders.orderID, 
Orders.employeeID, 
Orders.orderDate, 
Orders.lastUpdate, 
Orders.orderTracking, 
Orders.cusomterID, 
Orders.Paid, 
OrderedProducts.productName, 
OrderedProducts.productPrice, 
OrderedProducts.Quantity
FROM (Employees 
INNER JOIN (Customers INNER JOIN Orders ON Customers.customerID = Orders.cusomterID) ON Employees.employeeID = Orders.employeeID) 
INNER JOIN OrderedProducts ON Orders.orderID = OrderedProducts.orderID
WHERE (((Orders.orderID)=[Forms]![searchAllOpenOrders]![orderID].[Value] Or (Orders.orderID)=[Reports]![selectDayOrders]![orderID].[Value]));


Nu is het probleem dat zodra ik een bestelling selecteer via het formulier, de query een orderID verwacht van mijn Report, en omgekeerd als ik in de report een bestelling aanklik verwacht hij een orderID van mijn searchAllOpenOrders formulier.

Hoe kan ik dit optioneel maken, dat 1 van de 2 waardes erin moet komen te staan? Ik dacht het met OR te kunnen doen, echter werkt dit niet zoals verwacht. Ik ben al 1 uur lang aan het puzzelen en kom er maar niet uit

Beste antwoord (via BladeSlayer1000 op 23-01-2016 21:45)


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Natuurlijk kan dat wel, dat bedoelde ik met de eerste optie. Wat je kan doen in Access om de sql dynamisch te maken is bijvoorbeeld de where-clause uit de recordsource halen en meegeven met OpenForm. Iets als
Visual Basic:
1
Docmd.OpenForm "NaamVanFormulier", acNormal, WhereCondition:="Orders.orderID=" & orderID.Value

Als je geen OpenForm gebruikt of wil gebruiken, omdat je bijvoorbeeld geen focus wil geven, dan kun je direct het Filter property gebruiken. Wat je ook nog zou kunnen doen is niet filteren maar steeds het juiste record opzoeken.

Enkel in alle gevallen is het een klein beetje programmeren.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Alle reacties


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Lijkt me een beetje lastig, hoe moet dit report weten welke van de twee gebruikt moet worden? En wat als beiden open staan? Wellicht kun je iets met IIf, maar als beiden open staan gaat het sowieso niet.

Wat je bijvoorbeeld zou kunnen doen is een event gebruiken op het form (Current) en het report om de query van dit report aan te passen. Alternatief zou je ook twee aparte formulieren kunnen maken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 12-10 14:03
pedorus schreef op vrijdag 22 januari 2016 @ 15:39:
Lijkt me een beetje lastig, hoe moet dit report weten welke van de twee gebruikt moet worden? En wat als beiden open staan? Wellicht kun je iets met IIf, maar als beiden open staan gaat het sowieso niet.

Wat je bijvoorbeeld zou kunnen doen is een event gebruiken op het form (Current) en het report om de query van dit report aan te passen. Alternatief zou je ook twee aparte formulieren kunnen maken.
Hmm jammer dat het niet gemakkelijker kan. Ik kies dan maar voor 2 aparte formulieren.
Wel jammer dat Microsoft Access in sommige punten niet efficiënt is.

Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 07:54
Dus er is 1 formulier waarin je de bestelling kunt aanpassen? En je kunt op twee manieren dat formulier openen (via een ander formulier en een rapport)? En je wil dat als het formulier op één van beide manieren wordt geopend er feitelijk een andere query wordt uitgevoerd? (Of dezelfde, maar dan met andere parameters)

Dan ligt jouw probleem toch bij SQL i.p.v. Access? Anyway, je kunt dit vast met SQL (met een if statement?) alleen oplossen, maar je kunt in Access toch ook een OpenArgs meegeven vanuit het formulier/rapport? En zo zijn er vast nog vele mogelijkheden.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Joep schreef op vrijdag 22 januari 2016 @ 18:47:
Dus er is 1 formulier waarin je de bestelling kunt aanpassen? En je kunt op twee manieren dat formulier openen (via een ander formulier en een rapport)? En je wil dat als het formulier op één van beide manieren wordt geopend er feitelijk een andere query wordt uitgevoerd? (Of dezelfde, maar dan met andere parameters)

Dan ligt jouw probleem toch bij SQL i.p.v. Access?
Als ik puur naar de query kijk, dan lijkt het me een probleem met Access. Het SQL-statement zou gewoon een van twee OrderID's moeten krijgen, niet een OR-clause moeten hebben daarvoor met twee dingen die verder uit de applicatie-laag komen.
Hoe dat in Access werkt weet ik niet, maar het lijkt me dat de where-clause zo zou moeten zijn:
code:
1
WHERE Orders.orderID = $someOrderId

Waarbij het voor SQL verder niet meer relevant is waar dat orderId vandaan kwam. Wellicht kan Access op de plek van de '$someOrderId' een if-statement uitvoeren dat verder geen onderdeel is van de query.

Als bovenstaande niet kan in Access, is dat een probleem dat Access veroorzaakt. Niet een die bij SQL ligt ;)

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Natuurlijk kan dat wel, dat bedoelde ik met de eerste optie. Wat je kan doen in Access om de sql dynamisch te maken is bijvoorbeeld de where-clause uit de recordsource halen en meegeven met OpenForm. Iets als
Visual Basic:
1
Docmd.OpenForm "NaamVanFormulier", acNormal, WhereCondition:="Orders.orderID=" & orderID.Value

Als je geen OpenForm gebruikt of wil gebruiken, omdat je bijvoorbeeld geen focus wil geven, dan kun je direct het Filter property gebruiken. Wat je ook nog zou kunnen doen is niet filteren maar steeds het juiste record opzoeken.

Enkel in alle gevallen is het een klein beetje programmeren.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 12-10 14:03
Ik zal eens kijken of het lukt met een dynamisch SQL.
Ik zal het resultaat straks eens plaatsen indien ik nog tijd heb.

Edit: Het is mijn gelukt om een dynamische query te maken. Daarmee is dit inderdaad een mooie oplossing om mijn probleem op te lossen.

[ Voor 36% gewijzigd door BladeSlayer1000 op 23-01-2016 21:45 ]

Pagina: 1