inhoud velden meegeven

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.682
Hallo,

als ik schrijf:

DoCmd.OpenForm "weergave fiche", , , , acFormAdd,acDialog,

kan ik dan velden op deze nieuwe fiche waarden meegeven?

bvb als een veld "Telefoon" is kan ik dan iets schrijven als:

DoCmd.OpenForm "weergave fiche", , , , acFormAdd,acDialog,Me.Telefoon="03/123456"

bedankt

JP
 
Nee, dat kan zo niet. OpenArg parameters meegeven bestaat uit twee (of 3, afhankelijk of je één of meerdere parameters meegeeft) stappen:
1. formulier openen en parameter meegeven
2. in geopende formulier parameter uitlezen en plaatsen

Code:
DoCmd.OpenForm "weergave fiche", , , , acFormAdd,acDialog, "03/123456"

En op het geopende formulier:
Code:
Private Sub Form_Load()
    If Not Me.OpenArgs = "" Then Me.Telefoon.Value = Me.OpenArgs
End Sub
 
In je eerste idee...
Hoe weet de code in welk veld de string weggeschreven moet worden
Ontbreekt hier niet een stukje code voor?
 
Wat als on meerdere velden, verschillende strings wil doorgeven?
 
Daarom had ik het over twee of drie stappen :). In beginsel kan het niet: de OpenArgs parameter kent maar één string. Je zult dus alle waarden in die ene string moeten gooien. Dat kan, als je een scheidingsteken gebruikt. Ik gebruik dan vaak het pipe teken: "|". Dan ziet je string er bijvoorbeeld zo uit: "03/123456|Jansen|Bredastraat|12|Eindhoven"
Hier zitten dus vijf variabelen in. Je moet, in dit geval, wel onthouden welke waarde op welke positie staat, maar dat zie je zo wel. Je Load krijgt nu een extra taak: het splitsen van de parameter. Dat doe je zo:
Code:
Private Sub Form_Load()
Dim sArgs as Variant
    If Not Me.OpenArgs = "" Then 
        sArgs = Split(Me.OpenArgs, "|")
        With Me
            .Telefoon.Value = sArgs(0)
            .Naam.Value = sArgs(1)
            .Adres.Value = sArgs(2)
            .Nummer.Value = sArgs(3)
            .Plaats.Value = sArgs(4)
        End With 
    End If 
End Sub
 
Als je wil gebruik maken van dat "Split-idee", hoe declareer je dan de data die je wil meegeven?
Iets als:


gegevens = Me.fiche_NAAM & "|" & Me.fiche_STRAAT & "|" & Me.fiche_COMBO4 & "|" & Me.fiche_RRN & "|"

om dan nadien te schrijven:

DoCmd.OpenForm "Weergave fiche", WindowMode:=acDialog, OpenArgs:=gegevens

en dan in het Form_load argument van "Weergave fiche" je "Split-code" te gebruiken?

MVG
JP
 
Laatst bewerkt:
Dan krijg je zoiets:
Code:
Private Sub Form_Open(Cancel As Integer)
Dim sArgs() As String
Dim i As Integer
    If Not Me.OpenArgs = "" Then
        sArgs = Split(Me.OpenArgs, "|")
        For i = LBound(sArgs) To UBound(sArgs)
            Me("Textbox" & i) = sArgs(i)
        Next i
    End If
End Sub

Of, als ik ga gokken met jouw veldnamen:
Code:
Private Sub Form_Open(Cancel As Integer)
Dim sArgs() As String
Dim i As Integer
    If Not Me.OpenArgs = "" Then
        sArgs = Split(Me.OpenArgs, "|")
        Me.fiche_NAAM = sArgs(0)
        Me.fiche_STRAAT  = sArgs(1)
        Me.fiche_COMBO4  = sArgs(2)
        Me.fiche_RRN  = sArgs(3)
    End If
End Sub
 
Je hebt goed gegokt Michel... zo is het inderdaad
Het ging eerder om het aansturen van een vorig formulier...
maar het is me aardig gelukt en alles werkt naar behoren (voorlopig toch)
Ik bouw nu alles zoveel mogelijk om naar dat OpenArg gedoe en, geloof het of niet, maar het lukt aardig

Ik vraag me alleen af waarom er Me. voor OpenArg staat... da's toch geen veld binnen een formulier

en het DoCmd.Echo False/True-gedoe is me ook niet duidelijk
Ik gooi het stelselmatig uit mijn code en dat blijkt geen invloed te hebben
of heb ik het mis

Bedankt voor je hulp Michel
JP
 
Tip: je kan ook alle waarden die je wil meegeven als eigenschap definiëren in het doelformulier via property procedures, één per eigenschap. Bij het openen van dat formulier geef je alle eigenschappen één per één door. En bij de OnOpen event van het formulier zelf kan je dan de eigenschappen oppikken en de juiste velden vullen. Dan hoef je niet alles in één string te steken en werk je toch iets meer object georiënteerd.
 
Me. gebruik je op het moment dat je naar eigenschappen van een object (in dit geval: een formulier) kijkt. OpenArgs is een eigenschap van een formulier, dus kun je die opvragen met IntelliSense. Je mag het best weglaten, maar dan moet je dus het complete commando overtypen. En dat is a) meer werk en b) vergroot de kans op fouten.

Ik vind het werken met OpenArgs super handig, razend snel, simpel (als je eenmaal door hebt hoe je met Split de handel weer uit elkaar trekt) en lekker overzichtelijk. Het maken van extra property procedures kan natuurlijk best, maar doet niets voor je snelheid of overzichtelijkheid. Ik heb daar wel eens naar gekeken, en zie er eerlijk gezegd de voordelen (nog) niet van in. Zeker niet in dit soort gevallen. Maar goed, Noella heeft een leger aan programmeurs in dienst, en die moet je natuurlijk wel aan het werk houden :).
 
tip: als je met zelfgemaakte eigenschappen werkt hoef je de velden niet in de juiste volgorde op te geven en kan je, door elke eigenschappen een duidelijke naam te geven, gemakkelijk zien welk veldje invult/opvraagt
 
en het DoCmd.Echo False/True-gedoe is me ook niet duidelijk. Ik gooi het stelselmatig uit mijn code en dat blijkt geen invloed te hebben
Echo True/False onderdrukt eventuele bevestigingsmeldingen, en dat verhoogt dan de snelheid van je code. Als je de Echo uit zet aan het begin, moet je hem daarna weer aanzetten, want anders krijg je ook geen meldingen meer in Access zelf. En dat is dan weer vervelend als je een query maakt/aanpast, want dan wil je wél de vraag krijgen of je de wijzigingen wilt opslaan. Kortom: mits goed gebruikt, gewoon laten staan :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan