query werkt niet goed

Status
Niet open voor verdere reacties.

jvondermans

Gebruiker
Lid geworden
14 feb 2005
Berichten
75
Ik heb een query gemaakt die een selectie uitvoert in een lijst. er is 1 criterium, heel makkelijk!
Dat criterium is een vinkvakje op een ander formulier, daar vink ik het aan of uit. De query leest van dat formulier wat ik heb gekozen en voert dat uit.

Dit werkt allemaal prima, maar.........

Als ik het formulier nieuw open dan is er geen keuze gemaakt bij het vinkvakje (geen ja of nee, maar blanco) en als ik dan de query uitvoer dan is er totaal geen uitvoer (eigenlijk wil ik dan dus alle records, want ik maak geen keuze)

Kan iemand mij vertellen hoe ik dan alle records weergeef ipv geen enkele?

Alvast bedankt
 
Je kunt bijvoorbeeld bij het openen van je formulier de volgende code opnemen:

Me.naamvinkvakje = True

of bij de eigenschappen van het vinkvakje de standaardwaarde instellen op True of False


Rebmog
 
bedankt voor het meedenken, maar in sommige situaties wil ik juist geen keuze maken. dus als ik een standaard waarde instel kan ik geen totaallijst meer krijgen.

hopelijk heb je nog andere ideeën?!
 
Wat ik zelf meestal doe, is het criterium niet vastleggen in de query, maar pas aan de query hangen op het moment dat je een optie aanklikt. Zodat je dus altijd alles ziet bij openen.
De suggestie van Reb is inderdaad maar half werk, omdat je één van de drie opties gebruikt. Je leest het goed, drie: Waar (True of -1), Niet waar (False of 0) en Null (leeg dus). Ook daar zou je op moeten filteren. Je kunt die filtering toewijzen met de gebeurtenis <Na bijwerken> van het selectievakje.
Ik maak overigens eerst een copy van de query in een variabele, ga dan los, en bij sluiten van het formulier herstel ik de oorspronkelijke query weer.
 
Hoi Octafish,

ik begrijp gedeeltelijk wat je bedoelt. Dat van die 3 mogelijkheden was ik al uit, maar de rest ;)

Ik snap het verhaal van een query zonder criteria, ik ken de optie <na bijwerken>, maar het idee wat je bedoelt snap ik niet.

nu heb ik het formulier geopend met een vinkvakje dat op neutraal staat als ik het open, als ik dan geen keuze maak (waar/niet waar), dan moet ik toch gewoon alles krijgen ipv niets?

ik snap ook niet wat je bedoelt met de query in een variable zetten, het kan ook gewoon zijn dat mijn uitleg niet goed is :confused:

jordy
 
Je uitleg is prima; die van mij blijkbaar niet...
Wat ik bedoel is het volgende: ik gebruik voor een formulier vaak een standaard query zonder filter. Dus geen vast criterium, en zeker geen verwijzing naar een formulierveld, want dan kun je de query of formulier niet meer zelfstandig gebruiken.
Op het formulier maak je een selectie. Die selectie wil je op een ander formulier loslaten. Dan maak ik op de actie <Na bijwerken> van het selectievakje in dit voorbeeld een procedure die eerst de SQL van de query of het formulier inleest.
Dus:
sTabel=Forms![Formuliernaam].Form.Rowsource
Dat is dan een query, dus je krijgt dan in sTabel de waarde: [QueryNaam]
Dan maak je de nieuwe SQL statement aan:
strSQL="SELECT * FROM " & sTabel & vbCrLf
strSQL=strSQL & "WHERE VinkVakje=" & Me.chkVink.Value
En vervolgens zet je de nieuwe query op het formulier:
Forms![Formuliernaam].Form.Rowsource=strSQL
En dan open je het formulier Modaal, zodat je na het sluiten de query weer terug kan zetten.
Docmd.OpenForm "JouwFormulier",, acNormal, , , , acDialog
Na sluiten:
Forms![Formuliernaam].Form.Rowsource=sTabel

Dit is een beetje schematisch, en kun je niet helemaal letterlijk overnemen. Maar hopelijk is het idee duidelijk nu?
 
Je verhaal is me nu redelijk duidelijk, buiten het feit dat ik het zonder VBA doe en daar op deze manier niet aan ontkom ;) en er niet veel van weet!

ik snap het volgende:
  • <na bijwerken> zet ik de query in de variable
  • dan de SQL statement met de voorwaarde van het vakje
  • op het moment dat ik die heb kan ik er alles mee doen toch? exporteren, etc
    of inderdaad weer op het scherm zetten.

OK tot zover snap ik het, nu het volgende (en dat had ik beter meteen kunnen melden, sorry), maar ik heb meerdere vinkvakjes. Ik kan dan aan het einde wel een query laten draaien met alle variabelen, maar die kunnen ook leeg zijn (als er niet wordt geselecteerd)

Wat doe ik dan?
 
Laatst bewerkt:
Dat is het mooie van deze oplossing: dat maakt allemaal niets uit. Je kunt de query opbouwen met een variabel filter, door alle velden die zijn aangeklikt op te nemen in de filtering. Wat er dan wel bij komt kijken, is dat je de veldnamen ergens vandaan moet halen. Die haal ik tegenwoordig uit de TAG van de objecten. Die vul je in op het tabblad Overige, bij de regel <Extra Info>. Dus, als een checkbox chkBenzine is gekoppeld aan het veld Benzine, dan vul je bij Extra Info de tekst Benzine in.
In de procedure lees je vervolgens alle checkboxen uit, en op basis van de keuzes bouw je een Filterstring op, die je koppelt aan de regel WHERE.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan