specafieke waarde ophalen

Status
Niet open voor verdere reacties.

allard1977

Gebruiker
Lid geworden
7 feb 2011
Berichten
215
Hallo allemaal,

ik heb een formulier1 waar een id-veld opstaat en een datum-veld deze zijn gekoppeld met tabel 2. In de tabel 1 staat ook een id-veld en een datum veld. in tabel 1 komt vaker de zelfde id voor mat een datum er achter.

Nu wil ik graag de laatste datum (uit tabel 1)van een specifiek id wat al bepaald is op formulier 1 in het Datum-veld krijgen. Ik heb geprobeerd met DLast ik krijg wel de laatste record te zien maar niet specifiek.
en als er een besturingselementbron is krijg dat ook niet voor elkaar.

hoop dat er iemand is die het mij kan uitleggen.

alvast erg bedankt.
 
DLast is een prima techniek, mits je het criterium goed instelt. Laat maar eens zien wat je ervan gemaakt hebt :).
 
Ben er net achter gekomen dat ik een query heb waar al alleen het specifieke id in staat. Dus nu heb ik een DLast gedaan daarop. Heb een veld aangemaakt unbound met daarin =DLast("Datum";""query1"). nu krijg ik de data die ik wil zien in het veld. Alleen dit veld is een tekst veld en unbound. nu wil ik graag in een veld (korte datum) waar een besturingselementbron is aangewezen de datum van die ik uit query 1 halen.
ik heb de DLast al op verschillende plaatsen ingevoegd, standaard waarde, bij klikken bij bewerken. Maar ik krijg de waarde niet te zien. Wat doe ik fout.

Groet Allard
 
Laatst bewerkt:
Je probleem zit hem niet in het tekstveld (dat kan er ook niks aan doen dat het een tekstveld is tenslotte), maar in de D-functies. Die leveren namelijk altijd een tekststring terug, ongeacht wat je opvraagt. Je zult het resultaat dus moeten 'vertalen' naar wat je wilt dat het is. En in dit geval is dat een datum. Naast D-functies (D=database) heb je ook C-functies (C=conversie). Dus met de formule =CDate(DLast("Datum";""query1")) vertaal je het resultaat weer terug naar een datum. Die formule zou je ook als standaard kunnen proberen, al heb ik mijn twijfels of die gaat werken. Ik zou eerder de waarde laten instellen op je veld vanuit de gebeurtenis <Bij aanwijzen>. Maar niet geschoten is doorgaans mis :).
 
Heel erg bedankt OctaFish voor de tot nu toe gegeven antwoorden maar ik kom er nog niet helemaal uit. als ik de formule rechtstreeks in een unbound veld zet gaat de formule helemaal goed. maar als ik hem bij na klikken zet gebeurd er niks. En dat gebeurd het zelfde bij een bound veld.
 
Ik snap niet helemaal wat je bedoelt met
... maar als ik hem bij na klikken zet gebeurd er niks.
Na klikken van wat? En heb je de formule wel aangepast? VBA gebruikt de komma en niet de puntkomma. En je moet in de formule dan wel aangeven bij welk veld de datum moet komen te staan.
 
ow bedoelde u bij aanwijzen ook al dat het een VBA code moet worden.

Bij standaard regel werkt het inderdaad niet.
 
<Bij aanwijzen> is een gebeurtenis die bij het Formulier hoort. De gebeurtenis wordt uitgevoerd als je door records bladert. En als je elke keer een ander ID op je formulier ziet, en dus een andere DMax datum ophaalt, is dat een prima plek om de waarden te initialiseren.
 
Dan krijg je zoiets:
Code:
Private Sub Form_Current()
    Me.txtArrivalDate = CDate(DLast("Datum", "query1"))
End Sub
 
DLast kijkt alleen naar het laatst ingevoerde record, DMax naar de hoogste waarde. Je kunt de functie derhalve al zo'n beetje uit de naam herleiden ;). Gebruik je DLast op een autonummerveld, dan zal het resultaat hetzelfde zijn als bij DMax, omdat de nummering per definitie oplopend is. Het laatst ingevoerde nummer is derhalve altijd gelijk aan het hoogst ingevoerde nummer. Bij andere velden kan het resultaat wel degelijk verschillen. Ik zou in jouw geval ook DMax gebruiken, want datums zijn ook getallen, en je wilt derhalve het grootste getal (=datum) hebben.
 
Ik heb het voorelkaar doormiddel van de VBA code De data op te halen. Maar nu zie ik dat ook nog een criteria kan toevoegen. hoe gaat dit in zijn werk dan.
 
Als je dat nodig hebt, kan dat inderdaad. Dat ziet er dan ongeveer zo uit:
Code:
Private Sub Form_Current()
    Me.txtArrivalDate = CDate(DMax("Datum", "query1", "[ID] = " & Me.ID))
End Sub
Als je wilt filteren op een specifieke ID in dit geval.
 
Dus me. txt..... is het tekst veld waar je het in wilt hebben, CDate is om het om te zetten van txt naar een datum DMax is om de hoogste waarde op tezoeken. Datum is het veld waar de datum in staat die je wilt hebben, Query1 is de bron, [ID] is het veld wat in query1 staat en deze wil je het zelfde als in het veld als je met het formulier de datum opvraagt.

Heb ik hem zo'n beetje door?

Maar nu loop ik nog tegen een ander probleempje aan. de record is nog niet opgeslagen/verwerkt als ik de datum opvraag.
nu gaat het moeilijk worden om uitteleggen, ik heb een formulier met een sub formulier waar check boxen opstaan. met deze check boxen roep ik formuliertjes op. deze formuliertjes moeten de laatste datum van de query afhalen wat bij het subformulier hoort. En bij de eerste keer krijg je een error 094
 
Kijk, had je dat gelijk uitgelegd dan had je dit draadje 14 berichten bespaard, en was je een stuk sneller klaar geweest. Je hebt je vraag dus verkeerd gesteld, want wat je wilt is de datum van een specifiek record overbrengen naar een ander formulier. En dat doe je met het OpenArgs argument. Als je dat meegeeft met het openen van het losse formulier, dan kun je hem daar weer uitlezen en terugzetten.
 
Nou ik denk toch dat een DLAst argument beter is ivm dat mijn subformulier een doorlopend formulier is. Veld ID wat het zelfde blijft. Veld datum wel veranderd, en met een check box een ander formulier oproep, de query van het formulier dat ik oproep heeft al een selectie gemaakt op de specifieke ID. Nu moet ik alleen de datum uit het subformulier halen of de query van het subformulier, de datum moet dat automatisch verschijnen in het opgevraagde formulier.
Maar als ik dat op dit moment doe dan krijg ik een fout melding 094 er bij de eerste check box als ik het bij de tweede check box doe haalt hij de eerste datum op. ik denk dat de record na het aanvinken van de check box nog niet goed verwerkt is naar de tabel of query.

Groet Allard
 
Nou ik denk toch dat een DLAst argument beter is ivm dat mijn subformulier een doorlopend formulier is.
Vind ik dus niet. Maar als jij het beter denkt te weten...

Veld ID wat het zelfde blijft.
Wie heeft het over het veld ID gehad? Het ging toch over een datum overzetten?

Veld datum wel veranderd, en met een check box een ander formulier oproep, de query van het formulier dat ik oproep heeft al een selectie gemaakt op de specifieke ID. Nu moet ik alleen de datum uit het subformulier halen of de query van het subformulier, de datum moet dat automatisch verschijnen in het opgevraagde formulier.
Dat bedoel ik dus ook: je neemt de datum mee in de OpenArgs naar het tweede formulier. En daar lees je hem uit, en vul je hem in op het tekstveld. En ja, dat werkt perfect vanuit een doorlopend formulier...
 
Mijn excuses als ik u aan gevallen heb maar ben eens gaan werken met het idee van u. OpenArgs, Werkt perfect zoals u al zei.
onder check box volgende code gezet.
DoCmd.OpenForm "FormInjectie", DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=Datum

en in het formulier:
Private Sub Form_Load()
If Not Me.OpenArgs & "" = "" Then
Me.Datum.Value = Me.OpenArgs
End If
End Sub

heel erg bedankt voor uw idee en uit leg over beide mogelijk heden.
Denk dat we nu aan het eind van deze vraag zijn gekomen. of heeft u nog toevoegingen.
 
Dat ik me niet aangevallen voelde :). Maar als iemand een beter idee heeft dan ik, dan hou ik me natuurlijk graag aanbevolen! Jammer genoeg deze keer dus niet ;).
Mag de vraag naar <Opgelost>.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan