Keuzeveld met SQL

Status
Niet open voor verdere reacties.

RadboudAKF

Gebruiker
Lid geworden
3 nov 2010
Berichten
219
Ik heb een keuzeveld met invoervak met daarachter een SQL statement:

SELECT Tbl_Meetpunten.Id_Meetpunten, Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt, Tbl_Ruimten.Naam FROM Tbl_Ruimten INNER JOIN Tbl_Meetpunten ON Tbl_Ruimten.Id_Ruimte=Tbl_Meetpunten.Id_Ruimte WHERE (((Tbl_Ruimten.RuimteNummer) Like "apo*") AND ((Tbl_Meetpunten.Meetpunt) Like "c*") AND ((Tbl_Ruimten.Actueel)=-1)) ORDER BY Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt;

Komt hierop neer: laat alle ruimtes zien binnen onze afdeling waarvan de status ACTUEEL is (en nog een paar criteria). Hierna kan er data voor die betreffende ruimte worden ingevuld.

Als een ruimte niet meer 'actueel' is blijft de data uiteraard bewaard maar kan de betreffende ruimte niet meer worden gekozen in het keuzeveld. Als ik dit sql statement gebruik dan zie je in het invulformulier nog wel de ingevoerde data maar geen ruimtenummer meer.

Wat moet ik nu wijzigen aan mijn SQL om alle reeds ingevoerde ruimtes wel te kunnen tonen met alle data. (dus ongeacht Actueel of nietActueel) De ruimte mag echter niet meer worden kunnen gekozen voor nieuwe data. Ik probeerde van alles maar kom daar niet goed uit. (bv. met de gebeurtenis "Bij Kiezen" )

Wie kan mij helpen?

Jan
 
vervolg

Wat ik nog vergat:

Ik wilde het SQL statement dan maar uitvoeren bij het kiezen van de keuzelijst:

Ik probeer :

Private Sub Id_Locatie_Enter()

RuimteSQL = "SELECT Tbl_Meetpunten.Id_Meetpunten, Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt, Tbl_Ruimten.Naam, Tbl_Ruimten.Actueel " _
& FROM Tbl_Ruimten INNER JOIN Tbl_Meetpunten ON Tbl_Ruimten.Id_Ruimte = Tbl_Meetpunten.Id_Ruimte" _
& WHERE (((Tbl_Ruimten.RuimteNummer) Like "apo*") And ((Tbl_Meetpunten.Meetpunt) Like "c*") And ((Tbl_Ruimten.Actueel) = -1))" _
& "ORDER BY Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt;"

DoCmd.RunSQL RuimteSQL

End Sub


Nu wordt het hele SQL statement ROOD. Wat doe ik in godsnaam verkeerd. (Had ik maar een vak geleerd)

Jan
 
Laten we even teruggaan naar je eerste bericht, want daar zit de oorzaak/oplossing. Je hebt namelijk een gefilterde recordbron op je keuzelijst zitten, en die laat dus alleen de ruimtes zien die in dit geval actueel zijn. Dat werkt prima zolang er een actieve ruimte in het record zit. Het probleem wordt veroorzaakt doordat een ruimte die later op niet-actief wordt gezet niet meer aan het criterium voldoet en dus niet gekozen kan worden.
En, en dat is belangrijker, ook niet meer getoond wordt. Met als resultaat een leeg veld. Dat los je allemaal door deze query als basis te gebruiken onder je formulier:
Code:
SELECT Tbl_Meetpunten.Id_Meetpunten, Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt, Tbl_Ruimten.Naam FROM Tbl_Ruimten INNER JOIN Tbl_Meetpunten ON Tbl_Ruimten.Id_Ruimte=Tbl_Meetpunten.Id_Ruimte WHERE ((Tbl_Ruimten.RuimteNummer Like "apo*") AND (Tbl_Meetpunten.Meetpunt Like "c*")) ORDER BY Tbl_Ruimten.RuimteNummer, Tbl_Meetpunten.Meetpunt;

Alleen zie je nu dus ook de niet-actieve als je een ruimte wilt toevoegen aan een nieuw record, dus daar heb je dan weer de andere query nodig. Je zult dus moeten wisselen van queries om alles correct te laten werken. Een goed wisselmoment kan de gebeurtenis <Bij aanwijzen> zijn, omdat je daar de status van het record kunt gebruiken.
dat ziet er dan zo uit:
Code:
Private Sub Form_Current()
    If Me.NewRecord Then
        Me.cboKeuzelijst = strSQL_Actief
    Else
        Me.cboKeuzelijst = strSQL_Alles
    End If
    Me.cboKeuzelijst.Requery
End Sub
Ik heb de code simpel gehouden voor de duidelijkheid. Je moet zelf de juiste Querycode bij de juiste variabele zetten als je het zo wilt doen. Of je zet de volledige SQL in de constructie.
 
Octafish,

Zeer bedankt voor jouw hulp bij dit probleempje ... langzaam maar zeker ga ik denken dat ik dit allemaal nog eens écht ga snappen.....da's dan vooral dank zij jou.

En toch lukt mij dit niet. Ik zie geen geen gebeurtenis "Bij Aanwijzen" als optie bij het veld in mijn formulier. Ik zie wel bij klikken, muis, kiezen, focus e.d. Misschien moet ik dat allemaal even uitproberen.

Als ik het goed begrijp dan vul ik achter bv. Me.cboKeuzelijst = [het querie-statement voor alle actieve ruimtes] .

Groet,

Jan
 
Laatst bewerkt:
Ik zie geen geen gebeurtenis "Bij Aanwijzen" als optie bij het veld in mijn formulier.
Dat kan heel goed kloppen; de gebeurtenis is gekoppeld aan het formulier. En daar moet je hem ook plaatsen, want je wilt de keuzelijst resetten (alles laten zien) als je naar een ander record bladert. Dan treedt immers de situatie op dat de keuzelijst geen waarde meer kan laten zien. Bij het muteren van een record zou je er ook nog voor kunnen kiezen om de keuzelijst te beperken tot de gefilterde lijst. In dat geval moet je de keuzelijst aanpassen als hij actief wordt bijvoorbeeld.
Dank voor het compliment trouwens :).
 
Het stomme is: Ik raak nu toch weer 'de weg kwijt'. De criteria/query ga je dus nu plaatsen als basis voor het hele formulier waar deze keuzelijst op staat. Het gaat kennelijk niet om de query/sql achter de keuzelijst met invoervak. Dat ontgaat me dan weer volledig ... want het formulier zoals ik dat nu heb gemaakt is gebaseerd op een totaal andere query. Ik was erg blij: "oplossing !!" , maar nu denk ik .... dit begrijp ik niet.

Misschien moet ik dit nog maar tot me laten doordringen, ik had gehoopt dat er een oplossing zou zijn voor de keuzelijst zelf (althans voor het veld RUIMTE -dat wordt gevuld middels de keuzelijst)

Eigenlijk hoop ik dat ik het verkeerd heb begrepen want de query ombouwen voor het hele formulier lijkt me een geen optie.
 
Beste Octafish,

Tóch opgelost ... ik maakte het mijzelf lastiger dan moest. (bovendien las ik jouw bericht niet helemaal goed).

Nogmaals bedankt....

Jan
Nijmegen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan