[access] Datum uit veld meegeven aan Query

Pagina: 1
Acties:

  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
Hai,

Ik heb een klein form waarin in een veld een datum ingetypt kan worden. Dit form heet frmSearchDate en het veld heet zoek_datum.

De querie heet qrySearchDate.
hieronder de querie:
code:
1
2
3
SELECT [tblRota].[RotaDateBegin], [tblRota].[RotaDateEnd], [tblEmployee].[EmployeeName], [tblRota].[RotaTotalDays]
FROM tblEmployee INNER JOIN (tblAbsenceType INNER JOIN tblRota ON [tblAbsenceType].[AbsenceTypeID]=[tblRota].[RotaType]) ON [tblEmployee].[EmployeeID]=[tblRota].[RotaEmployee]
WHERE (((' " & Forms!frmSearchDate!zoek_datum & " ')>[tblRota].[RotaDateBegin] And (' " & Forms!frmSearchDate!zoek_datum & " ')<[tblRota].[RotaDateEnd]));



Ik wil dat die waarde uit het form dus meegegeven wordt waardoor een zoek actie ontstaat. maar bij dit geeft hij de melding als ik op de strart knop (die de query runt):
" you cancelled the previous action "

weet iemand raad?

  • whoami
  • Registratie: December 2000
  • Laatst online: 07-09 19:30
Die quotes moeten volgens mij niet rond een datum-veld staan.
Daarnaast is het gebruikelijker om het als volgt te schrijven:
code:
1
WHERE veldnaam < parameternaam

dan op de manier waarop jij het doet:
code:
1
WHERE parameternaam >= veldnaam

https://fgheysels.github.io/


  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
met en zonder quotes... maakt niet uit dezelfde error blijft.
En wat betreft die volgorde maakt niks uit. T moet allebei werken want ik had eerst in dezelfde volgorde een waarde van de datum erin staan en die werkte perfect.

  • bazs2000
  • Registratie: November 2000
  • Laatst online: 04-09 17:40

bazs2000

Pixels zo groot als een atoom

whoami schreef op 08 September 2003 @ 15:22:
dan op de manier waarop jij het doet:
code:
1
WHERE parameternaam >= veldnaam
Kun je mij misschien vertellen waarom dit niet zo zou moeten?
Ik gebruik een dergelijke opzet vaker wanneer ik een rapportagetool moet opzetten die alles van vandaag+uit het verleden/de toekomst uit een DB moet halen.
>= of <= werkt daarbij uitstekend en ik heb er nog nooit problemen door gehad noch dat een query daardoor traag zou worden. Ik moet er dan bij vertellen dat ik deze dingen nooit gebruik bij een hele grote DB want dan kan een opzet als deze wel vertragend werken. :)

Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT TBL_Order_Invoer.[BSA nr],
 TBL_Order_Invoer.[Order nr BaaN],
 TBL_Order_Invoer.[Tel nr],
 TBL_Order_Invoer.Ordertype,
 TBL_Order_Invoer.LineID,
 TBL_Order_Invoer.Centrale,
 TBL_Order_Invoer.[SIP-Kast],
 TBL_Order_Invoer.Verdelerpunt,
 TBL_Order_Invoer.[Poort 1 Datum],
 TBL_Order_Invoer.[Poort 1 Gereed?],
 TBL_Order_Invoer.[Poort 2 Datum],
 TBL_Order_Invoer.[Poort 2 Gereed?]
FROM TBL_Order_Invoer

GROUP BY TBL_Order_Invoer.[BSA nr],
 TBL_Order_Invoer.[Order nr BaaN],
 TBL_Order_Invoer.[Tel nr],
 TBL_Order_Invoer.Ordertype,
 TBL_Order_Invoer.LineID,
 TBL_Order_Invoer.Centrale,
 TBL_Order_Invoer.[SIP-Kast],
 TBL_Order_Invoer.Verdelerpunt,
 TBL_Order_Invoer.[Poort 1 Datum],
 TBL_Order_Invoer.[Poort 1 Gereed?],
 TBL_Order_Invoer.[Poort 2 Datum],
 TBL_Order_Invoer.[Poort 2 Gereed?]
HAVING (((TBL_Order_Invoer.[Poort 1 Datum])<=[Formulieren]![FRM_Zoekscherm]![Tekst27]) AND ((TBL_Order_Invoer.[Poort 1 Gereed?]) Like "Nee"))
ORDER BY TBL_Order_Invoer.[Poort 1 Datum] DESC;

Hier zie je een query die een grote hoeveelheid data uit een tabel trekt ook met "<=" om ervoor te zorgen dat de datum als ingegeven ook meegenomen wordt.
Deze constructie is ook niet zoals het uit een boekje haalt maar het werkt niet traag. Daarom, wat is het nadeel hier dan van en hoe kun je het makkelijker anders doen dan? Het kan zijn dat ik het verkeerd heb geleerd ofzo maar ik vond dit altijd een eenvoudige manier. :)

Op verzoek kort ik het in maar met deze lap kan ik het beter laten zien. :)

Krankzinnige muziek vind je hier.


Verwijderd

misschien kan je die quotes vervangen voor

code:
1
"DateValue(" & Forms!frmSearchDate!zoek_datum & ")"


En die foutmelding lijkt me ook vaag.. weet je zeker dat de fout bij deze query ligt?
Wordt er niet een fout gegenereerd in de code? of combinatie met ofzo?

  • whoami
  • Registratie: December 2000
  • Laatst online: 07-09 19:30
Ik zeg niet dat het niet zou moeten, ik zeg wel dat de andere manier duidelijker is.

Wat je kunt doen is allereerst eens debuggen:
print je query eens naar het scherm ipv hem uit te voeren. Dan kan je de syntax ervan eens bekijken, en zie je misschien waar de fout zit.

https://fgheysels.github.io/


  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
whoami schreef op 08 september 2003 @ 16:00:
Ik zeg niet dat het niet zou moeten, ik zeg wel dat de andere manier duidelijker is.

Wat je kunt doen is allereerst eens debuggen:
print je query eens naar het scherm ipv hem uit te voeren. Dan kan je de syntax ervan eens bekijken, en zie je misschien waar de fout zit.
Als ik de query gewoon zelf run vraagt hij om de waarde
Forms!frmSearchDate!zoek_datum

en dan geef ik een datum in en dan zegt ie dat:
<error>
This expression is typed in incorrectly, or it is too complex to be evaluated....
</error>

als ik de query vanuit een knop start (die knop zet ik neer via wizard > run query) dan geeft ie mij die foutmelding. Maar als ik een andere query wil starten (als test) dan geeft ie ook een foutmelding:
Ambigious name detected

  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
ok ik heb alle overbodige code verwijderd. Dat ambigious name detected is nu weg.
Maar als ik nu de query start dan zegt ie nog steeds
you cancelled the previous action
??

  • bazs2000
  • Registratie: November 2000
  • Laatst online: 04-09 17:40

bazs2000

Pixels zo groot als een atoom

En als je ipv dit:
code:
1
WHERE (((' " & Forms!frmSearchDate!zoek_datum & " ')>[tblRota].[RotaDateBegin] And (' " & Forms!frmSearchDate!zoek_datum & " ')<[tblRota].[RotaDateEnd]));

Eens dit doet?
code:
1
WHERE ((([Forms]![frmSearchDate]![zoek_datum])>[tblRota].[RotaDateBegin] And ([Forms]![frmSearchDate]![zoek_datum])<[tblRota].[RotaDateEnd]));

Verder is het nogal raar dat je en alles wat groter is dan [RotaDateBegin] en kleiner dan [RotaDateEnd] in één keer wilt pakken.

Krankzinnige muziek vind je hier.


  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
bazs2000 schreef op 08 September 2003 @ 16:16:
En als je ipv dit:
code:
1
WHERE (((' " & Forms!frmSearchDate!zoek_datum & " ')>[tblRota].[RotaDateBegin] And (' " & Forms!frmSearchDate!zoek_datum & " ')<[tblRota].[RotaDateEnd]));

Eens dit doet?
code:
1
WHERE ((([Forms]![frmSearchDate]![zoek_datum])>[tblRota].[RotaDateBegin] And ([Forms]![frmSearchDate]![zoek_datum])<[tblRota].[RotaDateEnd]));

Verder is het nogal raar dat je en alles wat groter is dan [RotaDateBegin] en kleiner dan [RotaDateEnd] in één keer wilt pakken.
hee super hier werkt t idd mee! thx !!

  • leond
  • Registratie: Juni 2003
  • Laatst online: 27-05-2020
Ik pak niet alles wat groter is dan begin en alles wat kleiner is dat end.
Maar alle datums die daartussen zitten. Als ik zou doen wat jij zegt dan zou ik ipv AND OR moeten gebruiken. :)

  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
De bovenstaande queries werken al lees ik, maar zijn niet handig omdat je ze aan moet passen als je een formulier renamed. Makkelijker is wat je eerder had, maar je moet datumcriteria beginnen en afsluiten met een hekje (#):
code:
1
WHERE (((#" & Forms!frmSearchDate!zoek_datum & "#)>[tblRota].[RotaDateBegin]

etc. moet ook werken lijkt me.

Als je een interval wilt selecteren, kun je beter werken met between:
code:
1
WHERE ((([tblRota].[RotaDateBegin] BETWEEN #" & Forms!frmSearchDate!begindatum & "# AND #" & Forms!frmSearchDate!einddatum & "#)>"

De selectie is inclusief de eindwaarden, dus als je echt alleen de tussenliggende wilt dan moet je daar even voor corrigeren.

offtopic:
De tekstvolgorde van criteria zie je meestal inderdaad als
veldnaam <> criteria
in plaats van wat jij doet. Dit leest wat makkelijker en begrijpelijker:
"geef mij alle records waar X groter is dan 2" snap ik sneller dan "geef mij alle records waar 2 groter is dan X", alhoewel ze allebei prima werken.

[ Voor 32% gewijzigd door Bu588 op 08-09-2003 16:34 . Reden: Aanvulling en typo ]

Nothing is fool-proof to a sufficiently talented fool...

Pagina: 1