Synchroniseren tussen formulieren

Status
Niet open voor verdere reacties.

bikerron

Gebruiker
Lid geworden
9 mei 2009
Berichten
236
Hallo,
Een uitdaging voor een van jullie?
Ik heb een formulier, gestart via een "algemeen startformulier", met daarop in te vullen gegevens en ook te kiezen gegevens.
Je kunt byv kiezen voor een Naam van een bedrijf en als dat al voorkomt in de tabel Bedrijven dan wordt dat keurig ingevuld.
Prachtig.
Maar nu:
Halverwege het invullen kom je er achter dat het bedrijf er nog niet is, ik ga dan terug naar het (nog ge-opende startformulier) en open het onderhoudsformulier voor de bedrijven.
Ik voeg het nieuwe bedrijf toe en sluit het bedrijvenformulier.
Ik keer terug naar het nog geopend "invulformulier" en denk dan het nieuwe bedrijf te kunnen kiezen, helaas pindakaas.
Als ik echter het formulier netjes afsluit en weer open dan heb ik wel de beschikking over het "nieuwe" bedrijf.
Kortom: Hoe krijg ik het voor elkaar, zonder het formulier weer te sluiten en te starten, de gegevens tot mijn beschikking te krijgen.

Alvast bedankt voor de te nemen moeite,
Ronald
 
Hoeft niet echt een uitdaging te zijn.... Als je het bedrijf kiest via een keuzelijst, kom je er gauw genoeg achter dat het bedrijf nog niet bestaat; niet alleen krijg je de overige gegevens niet te zien, de naam van het bedrijf wordt in de keuzelijst ook niet aangevuld.
Om dit te verhelpen heb je de gebeurtenis <Bij niet in lijst>. Met deze gebeurtenis kun je bijvoorbeeld het record dat je zoekt, en dat niet bestaat, laten toevoegen aan de tabel waarin je zoekt. Een andere (mooiere vind ik) optie is om een formulier te openen waarin je de nieuwe gegevens kunt toevoegen. Daarbij wordt (uiteraard) de naam van het bedrijf al ingevuld, want dat heb je net getypt. Je vult vervolgens op je Bedrijven formulier de overige gegevens in, waarna je het formulier sluit.
Als laatste is dan je keuzelijst bijgewerkt, en heb je dus alles netjes op orde.
 
Hallo Michel,
Ziet er logisch uit.
Ik heb het geprobeerd maar kom er toch nog niet helemaal uit.
(in mijn vraag heb ik het over een "Bedrijf" maar in mijn database is het een "Bouwwerf")
Ik heb ingevuld, <bij niet in lijst>

Private Sub Kies_Bouwwerf_NotInList(NewData As String, Response As Integer)
DoCmd.OpenForm "FrmOnderhWervenNIEUW"
End Sub

Het genoemde formulier wordt inderdaad geopend, maar NIET met de opgegeven naam.
Ik kan wel de normale invoerhandelingen afhandelen en het formulier sluiten en ik keer terug naar het oorspronkelijke formulier.
Maar dan zie ik NIET de zojuist ingevoerde naam terug, er wordt WEER gesprongen naar het Bouwerven formulier, en daar zie ik dus wel dat de nieuwe gegevens aanwezig zijn.
Dit is een soort deadlock, springen tussen formulieren.
Ben ik ergens een parameter vergeten?

Ronald
 
Dat klopt; je moet de parameter die wordt gezet in Newdata meegeven aan het formulier; dat is namelijk de naam die je wilt toevoegen.
Ik zal morgen een (werkend...) voorbeeldje neerzetten.
 
De morgen duurt lang..... :) Ik zoek 'm op!
 
Eerst maar eens de code; misschien kun je daar al wel mee uit de voeten.

Code:
'---------------------------------------------------------------------------------------------------------------
'Deze code staat op de keuzelijst. Hier wordt de waarde ingetypt die nog niet in de lijst staat.
'---------------------------------------------------------------------------------------------------------------
Private Sub cboArtikel_NotInList(NewData As String, Response As Integer)
Dim Result
Dim Msg As String, CR As String
Dim iBedrijf As Integer

    CR = Chr$(13)
    If NewData = "" Then Exit Sub

    Msg = "'" & NewData & "' staat niet in de lijst." & CR & CR
    Msg = Msg & "Wil je " & NewData & " toevoegen?"
    If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
        iBedrijf = [B][COLOR="blue"]Me.Parent.cboBedrijf.Column(0)[/COLOR][/B]
        DoCmd.OpenForm "[B][COLOR="blue"]fArtikelen[/COLOR][/B]", , , , acAdd, acDialog, "ArtikelID|" & NewData & "|" & iBedrijf
    End If

    ' Zoek het nieuwe artikelID op in de tabel Artikelen.
    Result = DLookup("[ArtikelID]", "tArtikelen", "[Artikel]='" & NewData & "'")
    If IsNull(Result) Then
        ' Als het artikel niet is gemaakt, Response argument op Error message zetten en herstellen.
        Response = acDataErrContinue
        MsgBox "Nog een keer proberen...", vbOKOnly
    Else
        ' Als het artikel is gemaakt, het Response argument Added zetten.
        Response = acDataErrAdded
        Me.txtArtikelID = Result
    End If

End Sub
'===============================================================================================================

Op het formulier dat je opent vanuit de keuzelijst zet je deze code:

Code:
'---------------------------------------------------------------------------------------------------------------
'Deze code staat op het formulier dat je opent om het nieuwe artikel toe te voegen.
'---------------------------------------------------------------------------------------------------------------
Private Sub Form_Open(Cancel As Integer)

    If Not IsNull(Me.OpenArgs) Then
        Dim sArgs() As String
        sArgs = Split(Me.OpenArgs, "|")
        Me.cboBedrijfID.SetFocus
        Me.cboBedrijfID.Value = sArgs(2)
        Me.txtArtikel.SetFocus
        Me.txtArtikel.Value = sArgs(1)
        Me.txtArtikelID.SetFocus
        Me.txtArtikelID.Value = sArgs(0)
    End If

End Sub
'===============================================================================================================
De tweede code op het formulier dat je opent vanuit de keuzelijst leest de variabele uit die je mee hebt gegeven vanuit het hoofdformulier. De code vult de uit het hoofdformulier opgehaalde gegevens in op het vervolgformulier.

Na sluiten van het tweede formulier keer je weer terug in de hoofdroutine, en wordt de nieuwe waarde opgehaald uit de tabel, en in je hoofdformulier ingevuld.
 
Michel,
Bedankt. Je hebt me nu even van de straat. Ik ga de code proberen te doorgronden.

Ronald
 
Michel,
Zou je voor mijn beeldvorming OOK de formulieren en de tabellen kunnen tonen?
Ik zit even vast in de "vertaalslag" naar mijn omgeving.
Ik weer even niet wanneer ME.Parent in beeld moet komen, geeft bij mij een foutmelding, en het statement:
iPlaats = Me.BouwplaatsID.Column(0)
geeft de foutmelding: Ongeldig gebruik van Nul

Alvast bedankt,

Ronald
 
Ik ben er ondertussen achter hoe het werkt. Een periode er tussenuit geeft een frisse blik.
Tot een volgende vraag maar weer.
Ronald
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan