Avatar billede torejessen Nybegynder
03. september 2003 - 12:35 Der er 9 kommentarer og
1 løsning

Opdatering af flere sammenkædede underformularer

Hej
Jeg har en hovedformular, med 3 kommandoknapper, der hver åbner en sammenkædet underformular. Der skal flere kommandoknapper på senere..
Det virker faktisk fint, bortset fra en (irriterende) detalje.
De to sidst lavede underformularer, åbnes korrekt. Men hvis jeg scroller videre til et andet firma på hovedformularen, ændres de tilhørende oplysninger ikke på underforlmularen. (Men som sagt ÅBNES de korrekt).
Ved den første kommandoknap virker det fint(den blev lavet vha. guiden, det er den der hedder"skiftkæde")

Problemet (tror jeg) er at SUBén "FilterchildForm" er specifikt skrevet til underformularen "KontaktpersonTbl", og derfor ikke virker med kommandoknap 9 eller 23.

Er det noget med at bytte ud på "Private" SUBér eller hvad?

Eller kan man ændre i FilterChildForm+OpenChildForm fra "Forms![KontaktpersonTbl]" til "Forms![generisk-underformularnavn]" ?

Jeg vedlægger min kode her:
På forhånd mange tak
VH
Tore

Option Compare Database

Sub Form_Current()
On Error GoTo Form_Current_Err

    If ChildFormIsOpen() Then FilterChildForm

Form_Current_Exit:
    Exit Sub

Form_Current_Err:
    MsgBox Error$
    Resume Form_Current_Exit

End Sub

Sub SkiftKæde_Click()
On Error GoTo SkiftKæde_Click_Err

    If ChildFormIsOpen() Then
        CloseChildForm
    Else
        OpenChildForm
        FilterChildForm
    End If

SkiftKæde_Click_Exit:
    Exit Sub

SkiftKæde_Click_Err:
    MsgBox Error$
    Resume SkiftKæde_Click_Exit

End Sub
Private Sub FilterChildForm()

    If Me.NewRecord Then
        Forms![KontaktpersonTbl].DataEntry = True
    Else
        Forms![KontaktpersonTbl].Filter = "[KundeId] = " & Me![KundeId]
        Forms![KontaktpersonTbl].FilterOn = True
    End If

End Sub
Private Sub OpenChildForm()

    DoCmd.OpenForm "KontaktpersonTbl"
    If Not Me![SkiftKæde] Then Me![SkiftKæde] = True

End Sub
Private Sub CloseChildForm()

    DoCmd.Close acForm, "KontaktpersonTbl"
    If Me![SkiftKæde] Then Me![SkiftKæde] = False

End Sub
Private Function ChildFormIsOpen()

    ChildFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "KontaktpersonTbl") And acObjStateOpen) <> False

End Function



Private Sub Kommandoknap9_Click()
On Error GoTo Err_Kommandoknap9_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "Sub_Ordre"
   
    stLinkCriteria = "[KundeIdFk]=" & Me![KundeId]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Kommandoknap9_Click:
    Exit Sub

Err_Kommandoknap9_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap9_Click
   
End Sub
Private Sub Kommandoknap23_Click()
On Error GoTo Err_Kommandoknap23_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "Sub_Udbud"
   
    stLinkCriteria = "[KundeIdFK]=" & Me![KundeId]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Kommandoknap23_Click:
    Exit Sub

Err_Kommandoknap23_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap23_Click
   
End Sub
Avatar billede mugs Novice
03. september 2003 - 13:19 #1
Jeg har ikke set din kode nærmere igennem. Men kontroller at egenskaberne "Underordnede felter" og 2Overordnede felter2 er sat til det felt på formularerne, som angiver en unik værdi for kunden.

Hvis dette er gjort behøver du såmænd ikke så meget kode. Hvis ikke alle dine underformularer skal være synlige på samme tid, kan du angive egenskaben Synlig til Nej, og derefter med koden :

Me.Underformularens navn.Visible = True
Me. en anden underformular.Visible = False

På den måde ser du een ad gangen.
Avatar billede torejessen Nybegynder
03. september 2003 - 13:59 #2
Hej Mugs

..
Jeg forstår ikke helt hvad du mener.
Hvilken formular skal jeg rette i (under- eller over-) ?
Og hvorhenne?
Avatar billede mugs Novice
03. september 2003 - 14:59 #3
I Underformularen > Egenskabsark > Data
Avatar billede torejessen Nybegynder
03. september 2003 - 15:21 #4
I underformularen > egenskaber > data er der ikke noget der hedder "Underordnede" eller overordnede felt.
Det er Access2000

Til gengæld er der i den underformular der virker, på
egenskaber > Hændelser - både en hændelsesprocedure på "ved indlæsning" og "ved fjernelse".

Der er ingen hændelsesprocedurer i de to andre..
Hmm
Avatar billede mugs Novice
03. september 2003 - 17:40 #5
Du skriver:

Sammenkædet underformular.

Det tror jeg ikke der er tale om her, men nærmere om sammenkædede formularer. En under formular er en formular, der ligger inde i en anden formular (Parent-Form). Denne underformular vil næsten altid "følges" med parent-form ved hjælp af underordnede- og overordnede felter.

Det jeg tror du har gang i er sammenkædede formularer, hvilket vil sige, at du åbner en anden formular i den samme unikke værdi som parent-form. Bemærk dit kriterie, som er sat ind ved child-form's åbning. Der bliver koden eksekveret og kun der. Du skal indsætte noget kodeværk ved OnCurrent, der får den sammenkædede formular til at søge efter den unikke værdi fra parent-form.
Avatar billede terry Ekspert
03. september 2003 - 18:48 #6
without looking closely at the code I guess you are right in you assumption that FilterChildForm is made for the KontaktpersonTbl form.

Use the first form as an example and make a copy of each SUB routine it uses. Then make a copy of these routines renaming them and altering the names of the forms they are using.

Form_Current need specail attention, it can be altered in a number of ways.


Sub Form_Current()
On Error GoTo Form_Current_Err

    If ChildFormIsOpen() Then FilterChildForm
    If ChildFormIsOpen1() Then FilterChildForm1
    If ChildFormIsOpen2() Then FilterChildForm2


Form_Current_Exit:
    Exit Sub

Form_Current_Err:
    MsgBox Error$
    Resume Form_Current_Exit

End Sub

COPY

Sub Form_Current()
On Error GoTo Form_Current_Err

    If ChildFormIsOpen() Then FilterChildForm

Form_Current_Exit:
    Exit Sub

Form_Current_Err:
    MsgBox Error$
    Resume Form_Current_Exit

End Sub
Avatar billede terry Ekspert
03. september 2003 - 18:48 #7
So you need extra SUB routines for these lines

If ChildFormIsOpen1() Then FilterChildForm1
If ChildFormIsOpen2() Then FilterChildForm2
Avatar billede terry Ekspert
03. september 2003 - 18:49 #8
The way you are opening the last two forms is NOT correct, do it in the same way as the first form!
Avatar billede torejessen Nybegynder
04. september 2003 - 09:29 #9
Hej og tak skal i have.
Jeg synes at terrys svar er mest relateret til mit spørgsmål. Jeg har ikke afprøvet det endnu, men det ser rigtigt ud..

tak for hjælpen
VH
Tore
Avatar billede terry Ekspert
04. september 2003 - 18:02 #10
thanks

NOTE:THis is just an example,  it will still need some work from you.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester