data meegeven met addnew

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.682
Hallo,
Stel ik heb volgende code:

DoCmd.OpenForm "Fiche", acNormal, , ,acFormAdd

Dit zorgt er voor dat er een nieuw record aan het bestand toegevoegd wordt

Stel, ik roep dit fiche-formulier op als ik van een ander (het eerste dus) formulier kom en ik wil data van het eerste formulier al wegzetten in bepaalde velden van het Fiche-formulier..
Kan dat en indien ja, hoe ga je dan concreet te werk?

Bedankt
 
Dat kan met de OpenArgs parameter. Dat is een tekstvariabele waar je dus een waarde aan mee kunt geven. Op het 'ontvangende' formulier lees je de waarde weer uit, en wijs je die toe aan de gewenste velden. Je praat over 'meerdere velden' en dat maakt het iets ingewikkelder, want OpenArgs kan maar één string zijn. In dat geval moet je je toevlucht zoeken tot een hulpgreep: de waarden scheiden door een teken. Ik gebruik dan altijd het pipe teken (|). Maar mag uiteraard ook een ander teken zijn, zolang het meer niet in een veld voorkomt. Voorbeeldje:
Code:
    If sArgs(LBound(sArgs) + 1) = "Nieuw" Then
        DoCmd.OpenForm "fBetaalwijze", OpenArgs:=sArgs(LBound(sArgs)) & "|Nieuw|Verkoopsters"
    ElseIf sArgs(LBound(sArgs) + 1) = "Edit" Then
        DoCmd.OpenForm "fBetaalwijze", OpenArgs:=sArgs(LBound(sArgs)) & "|Edit|" & sArgs(UBound(sArgs))
    End If

Hier wordt dus het formulier fBetaalwijze geopend met drie argumenten. Deze worden op het formulier dan weer uitgelezen, op deze manier:
Code:
Private Sub Form_Load()
    If Not Me.OpenArgs & "" = "" Then
        sArgs = Split(Me.OpenArgs, "|")
    End If
    Me.Veld1.Value = sArgs(0)
    Me.Veld2.Value = sArgs(1)
    Me.Veld3.Value = sArgs(2)
End Sub
In werkelijkheid gebeurt er wat anders in de db, maar dat doet er niet toe. Het gaat er om, dat er 3 velden in de string zitten die met een | zijn gescheiden, en die worden weer gesplitst bij het openen van het formulier in een array (sArgs). Vervolgens worden de velden gevuld vanuit de array. Je moet hierbij dus wel in de gaten houden dat je het juiste veld vult met de juiste dimensie uit de array.
 
in
DoCmd.OpenForm "fBetaalwijze", OpenArgs:=sArgs(LBound(sArgs)) & "|Nieuw|Verkoopsters"
staat nergens its als acFormAdd
Kan dat dan lukken?

JP
 
Ik krijg een foutmelding bij LBound: er wordt een Matrix verwacht

Ik dacht ook dat ik sArgs vooraf moet definieren dus ik schreef:

Code:
Private Sub Nieuw_Click()
    Dim sArgs As String
    DoCmd.OpenForm "fiche", OpenArgs:=sArgs(LBound(sArgs)) & "|Jan|Janssens"
End Sub

wat gaat hier fout?

Bedankt
JP
 
Als je mijn code letterlijk hebt overgenomen, dan snap ik de foutmelding wel. In mijn proces vul ik een array (sArgs) en ik gebruik de onderste dimensie in de OpenArgs bij het openen van het formulier samen met twee tekststrings. Die tekststrings heb jij vervangen door Voornaam | Achternaam, maar de eerste variabele is dus a) geen matrix, en b) niet gevuld. En dat gaat dus fout.
 
oeoeoeoe... ingewikkeld

Ik het sArgs gedeclareerd als een String: Dim sArgc as string

de rest van de code bij het openen van het formulier is me ook niet erg klaar:

If Not Me.OpenArgs & "" = "" Then
sArgs = Split(Me.OpenArgs, "|")
End If
Me.NAAM.Value = sArgs(0)
Me.Spec.Value = sArgs(1)

Me.OpenArgs betekent toch dat er ergens op het formulier een tekstvak staat dat OpenArgs noemt en ergens ingevuld moet worden...

JP
 
OpenArgs is geen tekstvak op je formulier, maar een formuliereigenschap. Daarom geef je de parameter ook mee als optie bij het openen van een formulier. Er gebeurt verder niks mee, tenzij je op het geopende formulier weer iets doet met de ingelezen parameter. En dat is dus: ofwel toewijzen aan een tekstvak (als je één variabele waarde meegeeft), ofwel uit elkaar trekken om aan meerdere tekstvakken mee te geven. Dat laatste is bij jou van toepassing.

Code:
     If Not Me.OpenArgs & "" = "" Then
          sArgs = Split(Me.OpenArgs, "|")
     End If
     Me.NAAM.Value = sArgs(0)
     Me.Spec.Value = sArgs(1)

In jouw geval lijk je twee waarden mee te geven. Je formulieraanroep moet dan dit zijn:
Code:
    DoCmd.OpenForm "fiche", OpenArgs:="Jan|Janssens"
Waarbij 'Jan' dus aan Me.Naam wordt toegewezen, en 'Janssens' aan Me.Spec.
 
met het risico helemaal als een oen beschouwd te worden...
eerlijk Michel... ik begrijp er geen jota van

Wat ik dus doe

Als ik het goed begrijp dan schrijf ik:
Code:
Private Sub Form_Open(Cancel As Integer)
     If Not Me.OpenArgs & "" = "" Then
          sArgs = Split(Me.OpenArgs, "|")
     End If
     Me.NAAM.Value = sArgs(0)
     Me.Spec.Value = sArgs(1)
End Sub

dus in de OnOpen-eigenschap van het formulier

gevolg:
sArgs is niet bekend, dus ik schrijf

Code:
Private Sub Form_Open(Cancel As Integer)
    Dim sArgs As String
     If Not Me.OpenArgs & "" = "" Then
          sArgs = Split(Me.OpenArgs, "|")
     End If
     Me.NAAM.Value = sArgs(0)
     Me.Spec.Value = sArgs(1)
End Sub

bij het openen van het formulier krijg ik die foutmelding niet meer, maar krijg ik er een bij sArg(0): "er wordt een matrix verwacht"

Dus, ik raak al niet gestart

Word hier depri van

JP
 
Er zit vrees ik een klein foutje in de code.
Code:
Private Sub Form_Open(Cancel As Integer)
     If Not Me.OpenArgs & "" = "" Then
         sArgs = Split(Me.OpenArgs, "|")
         Me.NAAM.Value = sArgs(0)
         Me.Spec.Value = sArgs(1)
     End If
End Sub
De hele check en het vullen moet dus binnen de IF .. END IF zitten.
 
OK Michel maar er verandert niets aan de foutmeldingen:

eerst is sArgs niet bekend... dus Dim sArgs as string
en dan zoals altijd
matrix fout bij de eerste sArgs(0)

dus... bedankt voor de reactie maar ik kom er niets mee vooruit... jammer
JP
 
Dan doe je toch iets verkeerd. Ik zou, om te beginnen, sArgs als Variant declareren en niet als string. Split maakt er dan zelf een array van. Verder heb je misschien Option Base 1 bovenin gedeclareerd, en dan klopt het ook niet.
Probeer hem eens zo:
Code:
Private Sub Form_Open(Cancel As Integer)
Dim sArgs As Variant
     If Not Me.OpenArgs & "" = "" Then
         sArgs = Split(Me.OpenArgs, "|")
         Me.NAAM.Value = sArgs(LCase(sArgs))
         Me.Spec.Value = sArgs(UCase(sArgs))
     End If
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan