Standaardwaarde in keuzelijst opslaan

Status
Niet open voor verdere reacties.

flbos

Gebruiker
Lid geworden
5 feb 2004
Berichten
267
VBA: Standaardwaarde keuzelijst veranderen

Ik dacht met de volgende code simpel de standaardwaarde van een keuzelijst op de huidige waarde te kunnen zetten:

Private Sub kzlArtikelsoort_AfterUpdate()
Dim vWaarde As String
vWaarde = kzlArtikelsoort.Value
kzlArtikelsoort.DefaultValue = Chr(34) & vWaarde & Chr(34)
End Sub

Dit werkt op zich wel. Als ik de waarde in de keuzelijst wijzig dan wordt de standaardwaarde aangepast (dit heb ik nagekeken bij eigenschappen van de keuzelijst). Als ik nog iets anders op het formulier wijzig, zodat er bij het afsluiten van het formulier gevraagd wordt om de wijzigingen op te slaan dan werkt het. Bij het openen van het formulier staat dan de nieuwe standaardwaarde in de keuzelijst. Wanneer ik echter niets anders wijzig en het formulier sluit en weer open dan wordt de nieuwe standaardwaarde niet opgeslagen en zie ik bij heropenen weer de oude standaardwaarde. Ook als ik het formulier met DoCmd.Save acForm, "formulier"
opsla bij het afsluiten werkt het niet. Wie heeft er een oplossing?
 
Laatst bewerkt:
Zou het iets te maken kunnen hebben met de eigenschappen van het formulier?
 
probeer eens als je de docmd.save code plaatst achter het wijzigen van de default value. Het kan zijn dat de save actie niet uitgevoerd wordt zoals je verwacht omdat het formulier al gesloten wordt.


Grtz,
 
Heb het geprobeerd, maar ook dit is helaas niet de oplossing. Ik snap het echt niet, hij zou wijzigingen toch gewoon moeten opslaan bij het doen van het save command. Op de een of andere manier wordt niet onderkend dat er een wijziging heeft plaatsgehad waardoor er niet gesaved wordt. Kan ik hier niet iets aan doen door met 'dirty' flag te werken of iets dergelijks?
 
De dirty clag heeft hier geen betrekking op. Die wordt alleen gebruikt voor de gegevens van het huidige record.

Een workaround kan zijn om de defaultwaarde in een aparte tabel op te slaan en bij het openen van het form deze in te laden. Wel wat werk, maar voorkomt dit geneuzel met opslaan van het design. Daarnaast werkt dit ook als je ooit met beveiliging in je DB wil gaan werken.


Grtz,
 
Bedankt voor de tip, ik ben inmiddels een heel stuk verder. Ik sla de waarde van de keuzelijst op door middel van een update query bij het afsluiten van het formulier.

Ik weet echter niet hoe ik de waarde goed in de keuzelijst krijg. Ik heb veel keuzelijsten, zodoende had ik een functie gemaakt die de waarde van de bij de functieaanroep gekozen keuzelijst opslaat (strobjectnaam is de naam van de keuzelijst, strwaarde is de huidige waarde van de keuzelijst (met .value verkregen)):

Function Waarde_opslaan(strObjectnaam As String, strWaarde As String)

Dim vKolom As String

DoCmd.SetWarnings False
vKolom = Screen.ActiveForm.Name & "_" & strObjectnaam
DoCmd.RunSQL ("Update t5kzllst Set " & vKolom & " = " & strWaarde & "")
DoCmd.SetWarnings True

End Function


Deze functie werkt perfect. Nu zou ik graag iets soortgelijks maken voor het ophalen van de waardes. Ik zit met het probleem dat ik niet weet hoe ik de uitvoer van de query als resultaat van de functie terug kan geven. Ik had zoiets in gedachten:

Function Waarde_ophalen(strObjectnaam As String)

Dim vKolom As String

vKolom = Screen.ActiveForm.Name & "_" & strObjectnaam
Waarde_ophalen = DoCmd.RunSQL ("SELECT " & vKolom & " FROM t5kzllst")

End Function

De laatste regel : Waarde_ophalen = DoCmd.RunSQL ("SELECT " & vKolom & " FROM t5kzllst")

werkt niet. De SQL instructie is goed en die werkt op zich ook. Ik zou graag weten hoe ik het queryresultaat wel als resultaat van de functie kan geven. Ik zou dan vervolgens eenvoudig dit resultaat als waarde van een keuzelijst kunnen toewijzen.
 
Met hulp van iemand op een ander forum:

Function Waarde_ophalen(strObjectnaam As String)

Dim vKolom As String
Dim sql As String
Dim rst As DAO.Recordset
Dim db As DAO.Database

Set db = CurrentDb()
vKolom = Screen.ActiveForm.Name & "_" & strObjectnaam
sql = "SELECT " & vKolom & " FROM t5kzllst"
Set rst = db.OpenRecordset(sql)
Waarde_ophalen = rst(vKolom)
rst.Close
Set rst = Nothing
Set db = Nothing

End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan