query met wisselknop

Status
Niet open voor verdere reacties.
Lijkt mij een prima zaak. Dan schrijven we 'm niet voor niets :).
 
Even een update (anders denk je dat ik niks doe ;) ). Om te beginnen: ik vind het een erg vermoeiende database om naar te kijken; ik zou hem zelf zo nooit gebouwd hebben, en dan is het heel erg moeilijk om de logica (die er vast wel zal zijn) te zien of te doorgronden. Zo heb je in de query [Klanten_Contacten_ProjectQ] een relatie gelegd tussen [KlantGegevensT] en [ContactpersoonGegevensT] op basis van het veld [KlantID] wat prima is, maar de relatie met [ProjectGegevensT] ligt op de tabel [ContactpersoonGegevensT]. En daar snap ik dus helemaal niks van; die relatie hoort m.i. te liggen met de tabel [KlantGegevensT]. Gek genoeg héb je het veld KlantID ook in [ProjectGegevensT] zitten, dus daar snap ik echt niks van.
Verder heb je zoveel verschillende categorieën, dat ik daar een aparte tabel voor zou maken. Nu is er niks, en kun je invullen wat je wilt.

Verder klopt het selecteren op je hoofdformulier niet; als je een status selecteert, zou je in Klanten alleen de klanten moeten zien die de gekozen status leveren, niet alle klanten. En datzelfde geldt voor Projecten. Ik zou dat dus zo doen:
Recordbron MainKlantselectieCombo:
Code:
SELECT KlantGegevensT.KlantID, KlantGegevensT.Firmanaam, KlantGegevensT.Plaats, ProjectGegevensT.Status FROM KlantGegevensT INNER JOIN ProjectGegevensT 
ON KlantGegevensT.KlantID = ProjectGegevensT.KlantID WHERE (((IIf([Formulieren]![MainMenu]![ProjectstatusCombo] Is Null,True,
[Status]=[Formulieren]![MainMenu]![ProjectstatusCombo]))<>False));

Recordbron MainProjectSelectieCombo:
Code:
SELECT ProjectGegevensT.ProjectnummerID, ProjectGegevensT.Omschrijving, ProjectGegevensT.KlantID FROM KlantGegevensT INNER JOIN ProjectGegevensT 
ON KlantGegevensT.KlantID = ProjectGegevensT.KlantID WHERE (((IIf([Formulieren]![MainMenu]![MainKlantselectieCombo] Is Null,True,
[ProjectGegevensT].[KlantID]=[Formulieren]![MainMenu]![MainKlantselectieCombo]))<>False));

En dezelfde techniek zou ik gebruiken op je eigenlijke vraag, want die keuzelijsten moeten op dezelfde manier gefilterd worden.
 
Michel,
dank weer voor je reactie


ik vind het een erg vermoeiende database om naar te kijken; ik zou hem zelf zo nooit gebouwd hebben,
Wat vind je dan vermoeiend / wat zou je anders doen?



Zo heb je in de query [Klanten_Contacten_ProjectQ] een relatie gelegd tussen [KlantGegevensT] en [ContactpersoonGegevensT] op basis van het veld [KlantID] wat prima is, maar de relatie met [ProjectGegevensT] ligt op de tabel [ContactpersoonGegevensT]. En daar snap ik dus helemaal niks van; die relatie hoort m.i. te liggen met de tabel [KlantGegevensT]. Gek genoeg héb je het veld KlantID ook in [ProjectGegevensT] zitten, dus daar snap ik echt niks van.
Ik snap het zelf ook niet meer, Dit is nog steeds mijn eerste ACCESS project, er zullen ongetwijfeld veel zaken in zitten die veel beter kunnen. Hoe zou jij de tabellen aanpassen, de relaties leggen?.

Ik heb de bewuste query aangepast:
Code:
SELECT KlantGegevensT.Firmanaam, KlantGegevensT.PostcodePostbus, KlantGegevensT.Postbus, KlantGegevensT.Straatnaam, KlantGegevensT.Nummer, KlantGegevensT.Postcode, KlantGegevensT.Plaats, KlantGegevensT.Land, KlantGegevensT.Memo AS KlantGegevensT_Memo, ContactpersoonGegevensT.ContactVNaam, ContactpersoonGegevensT.ContactInit, ContactpersoonGegevensT.ContactANaam, ContactpersoonGegevensT.Functie, ContactpersoonGegevensT.Memo AS ContactpersoonGegevensT_Memo, ProjectGegevensT.ProjectnummerID, ProjectGegevensT.ContactpersoonID AS ProjectGegevensT_ContactpersoonID, ProjectGegevensT.Omschrijving, ProjectGegevensT.Memo AS ProjectGegevensT_Memo, ContactpersoonGegevensT.KlantID, ProjectGegevensT.Status
FROM (KlantGegevensT INNER JOIN ContactpersoonGegevensT ON KlantGegevensT.KlantID = ContactpersoonGegevensT.KlantID) INNER JOIN ProjectGegevensT ON KlantGegevensT.KlantID = ProjectGegevensT.KlantID;
Dit geeft echter nog niet het gewenste resultaat, de output geeft dubbele records



Verder heb je zoveel verschillende categorieën
(welke categorien bedoel je hier?) ,

De querys voor de beide comboboxen heb ik aangepast zoals je aangaf, deze werken, alleen geven ze de foute output; veel dubbele waarden . Dit zal ongetwijfeld allemaal terug te voeren zijn naar de fouten in
Klanten_Contacten_ProjectQ
 
Ik noem het categorieën, jij fabrikaat. En dan heb je gelijk een voorbeeld waarom deze db mij moe maakt :). Hij voelt voor mij heel onnatuurlijk aan, ik vind je formulier Calculatie ook een beetje druk, en de naamgeving onlogisch. Maar dat wil natuurlijk niet zeggen dat het ook zo is, hooguit dat jij misschien hetzelfde zult vinden van mijn databases. Maar het kost mij dus al energie om überhaupt te snappen waar ik naar zit te kijken.

Ik heb de bewuste query aangepast:
...
Dit geeft echter nog niet het gewenste resultaat, de output geeft dubbele records
En dan te bedenken dat de query (onaangepast uiteraard) het perfecte resultaat levert. Waarom dan aanpassen zodat-ie dat niet meer doet?
 
Volgens mij zijn we nu aardig afgedwaald van mijn oorspronkelijke probleem waar ik nog steeds mee worstel.
Ik heb je code van 19 januari achter de knop gehangen en de kolom met voorkeur zichtbaar gemaakt in de "typenummer keuzelijst" ter controle.
met niet geactiveerde wisselknop komen alleen waarden met voorkeur is nee naar voren en niet met ja én nee
Zit dit toch in je code of heb ik iets over het hoofd gezien?

Zou je de code niet willen aanbrengen in de frontend van de db die ik je gestuurd hebt en me die weer terug mailen?:eek:

Wellicht dat het kwartje dan valt.

groeten,

Henny Poort
 
Laatst bewerkt:
Michel,

Ik ben er nog niet uit....

toewijzen aan een bestaande query
Hoe doe je dit met VBA code?

En waar komen nu de quootjes waar je het hiervoor over hebt in de onderstaaande code?

Code:
Private Sub Wisselknop1876_Click()
Dim strSQL As String
strSQL = "SELECT artcode, oms30, artgrp, voorkeur FROM Artikelen_LeverancierQ "
strSQL = strSQL & "WHERE (artgrp = " & Me.FabrikaatCombo & ") "
If Me.Wisselknop1876 Then strSQL = strSQL & "And (voorkeur = True) "
strSQL = strSQL & "ORDER BY artcode;"

MsgBox strSQL
End Sub

Groeten en alvast dank voor een reactie,

Henny
 
De quootjes zouden zo moeten staan, als je op tekst filtert. Ik geef gelijk de 2 varianten:
Code:
Private Sub Wisselknop1876_Click()
Dim strSQL As String
     strSQL = "SELECT artcode, oms30, artgrp, voorkeur FROM Artikelen_LeverancierQ "
     strSQL = strSQL & "WHERE (artgrp = """ & Me.FabrikaatCombo & """) "
     If Me.Wisselknop1876 Then strSQL = strSQL & "And (voorkeur = True) "
     strSQL = strSQL & "ORDER BY artcode;"
     MsgBox strSQL
End Sub
en
Code:
Private Sub Wisselknop1876_Click()
Dim strSQL As String
     strSQL = "SELECT artcode, oms30, artgrp, voorkeur FROM Artikelen_LeverancierQ "
     strSQL = strSQL & "WHERE (artgrp = '" & Me.FabrikaatCombo & "') "
     If Me.Wisselknop1876 Then strSQL = strSQL & "And (voorkeur = True) "
     strSQL = strSQL & "ORDER BY artcode;"
     MsgBox strSQL
End Sub
 
't Is jouw code :). Zit-ie niet achter de knop Wisselknop1876 dan?
 
Ik heb de code achter de wisselknop geplaatst.
Bij een ingedrukte knop krijg ik alle componenten met voorkeur op ja, bij een niet-ingedrukte knop krijg ik alle componenten met voorkeur op nee.
Bij een niet ingedrukte wisselknop wil ik echter alle artikelen zien voorkeur of geen voorkeur.
Wat kan ik nog fout doen?Knipsel.JPG
Bijgevoegd de query, zie je daar wellicht een afwijking?

Alvast dank voor een reactie,

Henny
 
Dat gaat ook niet lukken op deze manier. Een wisselknop is Aan of Uit; meer smaken zijn er niet. Je filtert dus altijd op 0 of -1. En wat jij wilt is een heel andere filtering: alleen filteren als de knop is ingedrukt. Kortom: dat kan alleen als je de complete query met VBA maakt en deze vorm van criteria afzweert :).
 
Dan ben ik weer helemaal terug bij vraag #1.

Geen idee hoe ik zoiets volledig in VBA moet doen...

Zou het misschien met een keuzerondje op te lossen zijn? keuze 1 is filteren, keuze 2 is alles weergeven?
 
Keuzerondjes veranderen niets aan het probleem; dat blijft gelijk. Ik ga weer even terug naar een eerdere code die ik heb gepost, met een kleine uitbreiding.
Code:
Private Sub Wisselknop1876_Click()
Dim strSQL As String
[B][COLOR="#0000CD"]Dim qTmp As QueryDef
[/COLOR][/B]
    strSQL = "SELECT artcode, oms30, artgrp, voorkeur FROM Artikelen_LeverancierQ "
    strSQL = strSQL & "WHERE (artgrp = " & Me.FabrikaatCombo & ") "
    If Me.Wisselknop1876 Then strSQL = strSQL & "And (voorkeur = True) "
    strSQL = strSQL & "ORDER BY artcode;"
[COLOR="#0000CD"][B]    Set qTmp = CurrentDb.QueryDefs("QueryNaam")
    qTmp.SQL = strSQL[/B][/COLOR]
End Sub

Zoals ik al zei, moet je de SQL anders opbouwen en de filtering niet via verwijzingen naar knoppen etc. meer doen. Want dat werkt nu niet. De ene keer moet de knop namelijk wel worden meegenomen (knop is ingedrukt) en de andere keer niet. En dat betekent dus dat je eigenlijk 2 verschillende queries hebt. En dat kan prima, want de code die ik je gegeven hebt doet dat ook. (De If Me.Wisselknop1876 regel).
De oplossing die ik in dit soort gevallen bijna altijd gebruik, is dus om een vaste query te maken, en daar de SQL steeds van aan te passen. En dat doe je door de QueryDefs collectie te gebruiken. De query krijgt nu geen verwijzingen meer (criterium [Formulieren]![MainMenu]![ProjectstatusCombo] etc) maar de op dat moment gekozen waarde. Dat betekent ook dat die waarde 'hard' in de query is opgeslagen en dat de query dus ook altijd dat resultaat zal laten zien, tot je een andere selectie maakt. En dan wordt dat de nieuwe vaste waarde. En de ene keer is dat dus met de wisselknop (waarde TRUE voor het veld [voorkeur]) en de andere keer wordt dat veld helemaal niet meegenomen.
Simpel en elegant, als je het mij vraagt :D.
 
Michel, dank voor je uitgebreide antwoord,

Ik heb de volledige code achter de wisselknop gehangen maar krijg nu een kringverwijzing als foutmelding.
Knipsel.JPG

Wat kan er nu nog fout zijn gegaan?
 
Laatst bewerkt:
Die zie ik voor het eerst :). Daar heb ik meer info bij nodig.
 
Als-tie binnen is kijk ik er wel even naar. Mijn internet verbinding is een beetje in de war, want hij wil er 1 uur over doen :).
 
Als je dan toch naar mijn db kijkt, weet je dan wellicht ook waar deze melding vandaan komt?
Bij elke toevoeging bij "Samenstellen macro's" komt altijd eerst deze melding.

Knipsel5.jpg
 
Beste Octafish,

Twee weken geleden heb je mijn db gedownload, ben erg benieuwd of je nog een oplossing hebt kunnen bedenken....

groeten Henny
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan