juiste record wordt niet getoond

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.697
Hallo,
Volgend probleem:

In het Open event schrijf ik:

Code:
Public Sub Form_Open(Cancel As Integer)
    Me.InsideHeight = 9930
    Me.InsideWidth = 15990
    If nieuw_voorschrift = "Neen" Then
        Me.RecordSource = "SELECT VOORSCHR.* FROM VOORSCHR WHERE VOORSCHR.identif = " & [Forms]![lijst_voorschriften]![Cbballe_voorschriften].Column(0)

    Else

de inhoud van de recordsource is bvb

SELECT VOORSCHR.* FROM VOORSCHR WHERE VOORSCHR.identif = 16921

dit record wordt effectief gevonden, maar wordt in het formulier niet getoond

als ik de eigenschappen van het formulier vraag, dan heb ik in recordbron: "SELECT VOORSCHR.* FROM VOORSCHR; "
staan. Als ik deze lijn schrap uit de eigenschappen dan verandert de situatie niet en wordt nog steeds de correcte record niet getoond

Wat doe ik verkeerd... hoe toon ik de inhoud van het record TOCH?

Bedankt
JP
 
Laatst bewerkt:
Ik blijf jou aangeven hoe je iets moet doen, maar op de een of andere manier komt dat niet echt aan, want je blijft het (consequent, dat wel ;)) fout doen :).
Al heb je hier een ander 'foutje' (meer een onlogisch ding, want het is technisch gezien dan niet echt fout) gevonden.
Een Form_Open kan namelijk nooit public zijn, maar is altijd Private. Maar zoals gezegd: echt fout is dat in dit geval niet. Wat wél fout is: je checkt op een veldwaarde die werkt op het eerste record van je recordset. Dat is ofwel de recordset die is gebonden aan het formulier (bij Recordbron) ofwel de recordset die je zelf toekent bij een niet-gebonden formulier. Maar in dát geval moet je eerst het formulier binden aan de recordset voordat je kan controleren of de waarde klopt. En jij doet dat dus andersom.

Dus dit:
Code:
    If nieuw_voorschrift = "Neen" Then
        Me.RecordSource = "SELECT VOORSCHR.* FROM VOORSCHR WHERE VOORSCHR.identif = " & [Forms]![lijst_voorschriften]![Cbballe_voorschriften].Column(0)
    End If
kan nooit werken. Want als je de tabel [VOORSCHR] aan het formulier hebt gekoppeld, kijk je, als je deze code uitvoert, naar het eerste record. Altijd. Dat heeft niks met je query te maken die je daarna uitvoert. En als je geen recordset hebt gekoppeld, gebeurt er uiteraard al helemaal niks.

Daarnaast ben ik dus, en dat heb ik je al heel wat keren verteld, niet gecharmeerd van deze constructie: WHERE VOORSCHR.identif = " & [Forms]![lijst_voorschriften]![Cbballe_voorschriften].Column(0). Die kan echt zó veel makkelijker en beter! Waarom doe je dat dan niet?
Ook heb ik in een ander draadje verteld dat de gebeurtenis Form_Open niet gebruikt kan worden om op records te acteren, omdat er nog geen recordset is geladen. Dat gebeurt pas bij de gebeurtenis Form_Load. Blijkbaar heb je dat óók gemist :).

Als je, vanuit een specifiek formulier, een ander formulier wilt openen, doe dat dan met een filter. Dat is een stuk sneller en makkelijker. Dat filter geef je mee middels de opdrachtknop waarmee je het formulier opent. Bijvoorbeeld m.b.v. de Openargs parameter, die we onlangs in een ander draadje hebben behandeld. Of pas, middels de QueryDefs, de query van het formulier aan. Werkt ook prima. Maar ga niet steeds het formulier openen met een andere recordset waar je dan verkeerde acties aan hangt :).

Nog wat dingetjes die je al heel lang (niet echt verkeerd, maar nogal onhandig) blijft doen:
Code:
        Me.RecordSource = "SELECT VOORSCHR.* FROM VOORSCHR WHERE VOORSCHR.identif = " & [Forms]![lijst_voorschriften]![Cbballe_voorschriften].Column(0)
kan dus veel korter zo:
Code:
        Me.RecordSource = "SELECT * FROM VOORSCHR WHERE identif = " & [Forms]![lijst_voorschriften]![Cbballe_voorschriften].Value
Maar geen van de twee oplossingen zou ooit in mijn hoofd opkomen ;)

Dus de beste oplossing is dan deze:
Code:
Private Sub cmdVoorschrift_Click()
    DoCmd.OpenForm "frmVoorschrift", WindowMode:=acDialog, OpenArgs:=Me.Cbballe_voorschriften.Value
End Sub
Code:
Private Sub Form_Load()
    If Not Me.OpenArgs = "" Then
        Me.Filter = "[identif] = " & Me.OpenArgs
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub
 
waarom ik hardleers ben?
Omdat ik geen programmeur ben (en dat weet je;))
Omdat ik alles wat je schrijft moet lezen, lezen en herlezen om er IETS van te begrijpen
Omdat ik met een erfenis van code zit die met haken en ogen aan mekaar hangt
Omdat ik niet de tijd heb om alles te herwerken
Omdat ik dit project ahw onmiddellijk moet kunnen gebruiken.... het doet mijn dagelijkse administratie, hoe vierkant ook, maar het werkt
alleen wil ik de vervelende zaken die er zijn weg werken en dat valt dikwijls ******* tegen
en omdat ik weet dat ik op jou (jullie) kan rekenen ;)
ik bestudeer en probeer
Bedankt
JP
 
Weet ik :). Al zou het leuk zijn om af en toe iets van de verbeteringen terug te zien :D.
 
heb je code toegepast, en...... HET WERKT!!!

alleen moest ik de lijn: DoCmd.OpenForm "frmVoorschrift", WindowMode:=acDialog, OpenArgs:=Me.Cbballe_voorschriften.Value
aanpassen naar: DoCmd.OpenForm "Weergave voorschrift", WindowMode:=acDialog, OpenArgs:=Me.Cbballe_voorschriften.Column(0)

de .value moest weg of ik kreeg een foutmelding

doe ik hier iets verkeerds mee?

Dikke merci Michel, ook voor je begrip... ik zal mijn best doen in de toekomst geen recordsets aan te maken waar niet nodig..
Heb trouwens nog nooit "filter" gebruikt... shame on me

JP
 
Normaal gesproken heb je in de eerste kolom van een keuzelijst de gebonden waarde (afhankelijke kolom) staan. Die kun je uitlezen met de code Me.Cbballe_voorschriften, Me.Cbballe_voorschriften.Value of Me.Cbballe_voorschriften.Column(0). De laatste variant vind ik de meest onhandige, dus die gebruik ik alleen als ik niet de afhankelijke kolom nodig heb. En dat is dan meestal alleen als ik op hetzelfde formulier tekstvakken vul met waarden uit een keuzelijst. Klantgegevens, artikelgegevens etc. Maar het zou niet zo moeten zijn dat je niet de waarde van je keuzelijst overzet naar een ander formulier, en jij doet dat blijkbaar wel :). Kun je trouwens simpel checken door te kijken wat deze codes opleveren:
Msgbox Me.Cbballe_voorschriften.Value of Msgbox Me.Cbballe_voorschriften.Column(0). Komen daar verschillende waarden uit, dan heb je dus niet de standaardwaarde uit de keuzelijst gebruikt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan