record saven via VBA

Status
Niet open voor verdere reacties.

pdater

Gebruiker
Lid geworden
10 mei 2010
Berichten
55
Hallo forumleden,
Kan iemand mij zeggen hoe ik via VBA gemakkelijk een record kan opslaan?
ik probeer het via docmd.save ......
Alleen kan ik hier niet zetten acrecord of zo. het probleem is dat ik direct na het creeren van een unieke ID in mijn formulier een actiequery wil uitvoeren en hij moet deze unieke ID ook mee wegschrijven in een andere gekoppelde tabel maar hiervoor moet eerst de record opgeslagen worden alvorens de actiequery de ID kan ophalen.
en daar wringt het. via een macro lukt dit wel maar niet via VBA (ligt wel aan mijn beperkte kennis)
alvast bedankt,
gr, Rik
 
Als je formulier is gekoppeld aan een tabel, kan het zo:

Code:
If Me.Dirty = True Then Me.Dirty = False

Of met dit alternatief:

Code:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Vervolgens voer je de actiequery uit.
 
Laatst bewerkt:
Hoop echt dat dit een vergissing van je is en je DoCmd.RunCommand bedoelt.

Tardis
 
Laatst bewerkt door een moderator:
Hou nou toch eens op met die onzin commentaren, of geef het alternatieve commando (want deze werkt gewoon...) als je denkt dat het anders moet...
 
En omdat Mr. T. te lui is om het nieuwe commando in 2007/2010 te geven, doe ik het maar:

Code:
    DoCmd.RunCommand acCmdSaveRecord
 
alvast voor de hulp. maar nu zit ik met een ander probleem.
als ik via VBA een aantal gegevens vanuit een formulier (gegevensbad= een lijst met Leerlingen) direct wil overnemen in een ander formulier dan neemt hij steeds het stamnr op van de eerste in de lijst. terwijl ik dubbelklik op andere leerlingen. wat zou ik moeten toevoegen om dit op te lossen?
dit is het voorbeeld in vba:
Code:
Private Sub Leerling_DblClick(Cancel As Integer)
On Error Resume Next
DoCmd.GoToRecord acForm, "frmEvaluatieOpstellen", acNewRec
If IsNull([Forms]![frmEvaluatieOpstellen]![JufID]) Then Forms![frmEvaluatieOpstellen]![JufID] = Forms![frmGebruiker]![JufID]
If IsNull([Forms]![frmEvaluatieOpstellen]![EvaluatieID]) Then Forms![frmEvaluatieOpstellen]![EvaluatieID] = Forms![frmGebruiker]![initialen] & Forms![frmEvaluatieOpstellen]![E_ID]
If IsNull([Forms]![frmEvaluatieOpstellen]![StamnrID]) Then Forms![frmEvaluatieOpstellen]![StamnrID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![StamnrID]
If IsNull([Forms]![frmEvaluatieOpstellen]![klasID]) Then Forms![frmEvaluatieOpstellen]![klasID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![klasID]
If IsNull([Forms]![frmEvaluatieOpstellen]![LeerJID]) Then Forms![frmEvaluatieOpstellen]![LeerJID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![leerjaarID]

End Sub
 
Laatst bewerkt door een moderator:
het moet dus wel degelijk zijn: "bedankt voor de hulp":d
groeten,
Rik
 
Waarom open je het formulier niet op basis van één gegeven (namelijk het koppelveld)? Je wilt neem ik aan één record openen, op basis van het geselecteerde record op het formulier frmGebruiker. Geef die waarde mee als OpenArgs variabele, en lees die op frmEvaluatieOpstellen weer uit, en gebruik de variabele als filter.
 
Beste Michel,

Neen in feite wil ik het anders doen. Als een leerkracht Leerlingen wil evalueren moet ze gewoon op de leerling dubbelklikken ( de lijst staat op hetzelfde fomulier (subform) voorafgaandelijk heeft men wel moeten aanduiden welke vaardigheden men wil evalueren. dan kan de leerkracht nog steeds in hetzelfde formulier (dmv 2 andere subformulieren de evaluaties doen)In feite lukt alles goed alleen wordt blijkbaar steeds hetzelfde stamnr (uniek ID voor LL) gecopieerd in het hoofdformulier. Nochtans dubbelklik ik telkens op een andere LL. En ik weet niet waarom want het stamnr staat op de record waarop ik dubbelklik. heb jij enig idee wat ik verkeerd doe? Misschien staat de focus niet juist?? het is mij wel al eens gelukt dat hij de laatste record correct overnam maar nadien steeds de eerste. en dat is zeeeeeer vervelend.:mad:
Hopelijk kan jij mij verder helpen?
thx
Rik
 
Ik snap nog niet helemaal wat je aan het doen bent; ik neem aan dat het subformulier met leerlingen gekoppeld is aan het hoofdformulier op basis van leerkrachtID. En dat elke leerling met een leerlingID als sleutelveld in het subformulier staat? Op welk moment wordt de selectie dan gemaakt? Hoe je ook selecteert, er komt toch neem ik aan altijd een unieke leerlingID uit die je wilt openen. Maak anders een voorbeeldje, want dit kon anders wel eens een hele lange draad worden...
 
Michel,
Het subformulier( met de leerlingen) is niet gekoppeld aan het hoofdformulier. (is gekoppeld aan het frmgebruiker (dit is verborgen) dus van zodra men het formulier opent, staan alle LLeerlingen klaar. Bij het dubbelklikken wordt er inderdaad altijd een leerlingID opgehaald. ik heb wel gemerkt dat als ik het hoofdformulier de eerste keer open en dubbelklik op een LL dan doet hij het goed. nadien neemt hij altijd de eerste in de lijst. ik heb de indruk dat de gegevens ergens in het geheugen vast blijven zitten(want de eerste keer lukt het wel). Een voorbeeldje lijkt mij niet echt haalbaar omwille van de vele formulieren (er staan 4 subformulier op het hoofdform, 1 met de LL , 1 vr de socio -emotionele vaardigheden, 1 voor de andere vaardigheden en 1 met de lijst van de LL die al geëvalueerd zijn
Kan je mij verder helpen?
thx Rik
 
nog wat bijkomende info. ik heb de vba code wat aangepast in de hoop dat het zou helpen maar helaas. (ik heb de ifs statements weggelaten want als men eerst naar een nieuwe record gaat dan zijn de velden uiteraard leeg.
Code:
On Error Resume Next

        DoCmd.GoToRecord acForm, "frmEvaluatieOpstellen", acNewRec
        Forms![frmEvaluatieOpstellen]![StamnrID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![StamnrID]
        Forms![frmEvaluatieOpstellen]![EvaluatieID] = Forms![frmGebruiker]![initialen] & Forms![frmEvaluatieOpstellen]![E_ID]
        Forms![frmEvaluatieOpstellen]![EvaluatorID] = Forms![frmGebruiker]![JufID]
        Forms![frmEvaluatieOpstellen]![JufID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![JufID]
        Forms![frmEvaluatieOpstellen]![klasID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![klasID]
        Forms![frmEvaluatieOpstellen]![LeerJID] = Forms![frmEvaluatieOpstellen]![FrmLL_per_Evaluatie]![leerjaarID]
        DoCmd.RunCommand acCmdSaveRecord
        Forms.frmEvaluatieOpstellen.Requery

Wel is het zo dat het de eerste keer lukt als men het hoofdformulier opent. nadien neemt hij dus de eerste in de lijst. (wel werkt het ook nadat je eerst een record gedelete hebt, bizar, dus ik denk dat hij zijn geheugen niet vrij maakt?
Ik heb ook sterke twijfels dat de accmdSaveRecord wel echt werkt. (ik heb de andere ook geprobeerd.) in feite wordt de VBA code geactiveerd vanuit het subform maar hij moet de record in het hoofdform opslaan, kan dit aan de oorsprong liggen? want mijn actiequery neemt kan blijkbaar nog steeds niet het unieke "EvaluatieID" ophalen omdat dit volgens mij nog steeds niet opgeslagen is.(ik laat deze query lopen na deze code dus zou toch in orde moeten zijn?
Hopelijk kan iemand mij helpen.
Alvast bedankt.
Groeten,
Rik
 
Laatst bewerkt door een moderator:
Ik zou eens in de Stapmodus door het proces heenlopen, te beginnen bij de eerste keer waarin het nog goed gaat. Ergens pakt hij onderweg het leerlingID niet meer op, en zonder voorbeeld kan ik er weinig van zeggen.
 
Beste Michel,

ik heb uiteindelijk mijn opbouw veranderd , en dit probleem is dus niet meer relevant,
Toch bedankt voor de moeite,
groeten,
Rik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan