Avatar billede torejessen Nybegynder
21. april 2006 - 11:48 Der er 19 kommentarer og
1 løsning

Filterchildform reload eller hvad?

Hej

Jeg har et problem med underformularer.
Når jeg laver dem med kommando-knap guiden, så virker de fint. - Indtil jeg scroller hen til et nyt firma på hovedformularen. Så ændrer underformularen sig ikke. Hvad er den nemme løsning på dette problem? Det ville være ok, hvis underformularen bare lukkedes, når den ikke var i fokus længere.
En længere og mere besværlig løsning var i spm http://www.eksperten.dk/spm/396266  , men der må da være en lettere løsning?

Mvh Tore
Avatar billede mugs Novice
21. april 2006 - 14:34 #1
Det er fodi der ikke er over- underordnede felter i formularerne. Check underformularens egenskaber og vælg disse egenskaber ud fra et unikt felt i begge formularer.
Avatar billede torejessen Nybegynder
21. april 2006 - 15:39 #2
Hej Mugs
Det svarede du også på spørgsmål 396266, men jeg ved ikke hvilket felt/formular du mener.
Er det i VB-editoren, eller i Access, eller hvor er det jeg finder ordene "overordnede" og "underordnede" felt?

Mvh og god weekend
Tore
Avatar billede mugs Novice
21. april 2006 - 16:45 #3
Egenskaben finder du ved at højreklikke på underformularen > Egenskaber > Fanen Data.

Men jeg tror ikkke der er tale om en formular med en underformular som du skriverm , men nærmere om sammenkædede formularer og det er en helt anden snak.
Avatar billede torejessen Nybegynder
27. april 2006 - 11:48 #4
Netop det er sammenkædede formularer...

Jeg er stadig meget interesseret i svar.. ;-)

Hilsen
Tore
Avatar billede mugs Novice
27. april 2006 - 12:20 #5
Du kan lave en nemmere løsning:

DoCmd.OpenForm "Form2"
Forms!Form2!Felt1.SetFocus
DoCmd.FindRecord Me!Felt1

Form2 svarer til den sammenkædede formular. Felt1 er et unikt indeks for posten ofg skal findes i begge formularer. Når du trykker på en kommandoknap i hovedformularen, vil denne kode åbne form2 i den tilsdvarende post.
Avatar billede torejessen Nybegynder
28. april 2006 - 10:23 #6
Hej Mugs

Ok, ja det ser rigtigt ud. Men hvor skal jeg skrive det? I en hændelse? I øjeblikket stå hændelsen ud for "ved klik"

VBA koden følger nedenfor. Der er to kommandoknapper der åbner hver sin subform. Problemet er dog det samme for hver af dem..:
-----------------------
Option Compare Database

Private Sub ÅbnKontaktperson_Click()
On Error GoTo Err_ÅbnKontaktperson_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "KontaktPersonSubFrm"
   
    stLinkCriteria = "[FirmaFk]=" & Me![FirmaId]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_ÅbnKontaktperson_Click:
    Exit Sub

Err_ÅbnKontaktperson_Click:
    MsgBox Err.Description
    Resume Exit_ÅbnKontaktperson_Click
   
End Sub
Private Sub Ordreknap_Click()
On Error GoTo Err_Ordreknap_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "OpgaveSubFrm"
   
    stLinkCriteria = "[FirmaFk]=" & Me![FirmaId]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Ordreknap_Click:
    Exit Sub

Err_Ordreknap_Click:
    MsgBox Err.Description
    Resume Exit_Ordreknap_Click
   
End Sub
-------------------------------
Avatar billede mugs Novice
28. april 2006 - 11:37 #7
Glem alt om sammenkædede formularer. Prøv at lave en ny formular UDEN sammenkædning og indsæt min kode i en kommandoknap og kontroller at den fungerer.
Avatar billede torejessen Nybegynder
28. april 2006 - 12:37 #8
Ok det har jeg nu gjort. Hvis det ikke skal være en sammenkædet formular, er jeg nødt til at vælge punktet "Åbn formularen og vis alle posterne". Normalt vælger jeg punktet "Åbn  formularen og søg efter bestemte data der skal vises". Men hvis jeg vlger sidstnævnte, bliver det jo en sammenkædet formular.
Hvis jeg vælger det (som jeg tror) du foreslår, så viser den alle posterne. Det er jo ikke meningen..?

Formularen (Form2) åbner fint, men den viser ordrer for samtlige firmaer..?

Hilsen
Tore
Avatar billede mugs Novice
28. april 2006 - 12:49 #9
Det er IKKE sammenkædede formularer. Hvis du kun vil se de udvalgte poster kan du jo blot filtrere formularen:

Me.Filter = "Felt1 = '" & Me!Felt1 & "'"
Me.FilterOn = True
Avatar billede torejessen Nybegynder
28. april 2006 - 13:40 #10
Hvor skal den kode sættes ind? Og i hvilken Form?
Og sikrer det filter at Form2 filtreres, også når der vælges nye poster i Form1, MENS Form2 er åben?

Forvirrede hilsner
Tore
Avatar billede mugs Novice
28. april 2006 - 13:42 #11
I en kommandoknap i form2.

"Og sikrer det filter at Form2 filtreres, også når der vælges nye poster i Form1, MENS Form2 er åben?"

Nej - form2 skal lukkes først. Men det du søger findes på Thomas Jepsen's hjemmeside makeiteasy.dk
Avatar billede torejessen Nybegynder
28. april 2006 - 13:53 #12
Hej Mugs
OK, altså det var jo en filtrering af Form2 MENS der ændres i Form1, som jeg spurgte efter i første omgang...
Til gengæld var linket til Thomas Hjemmeside da fint. Han har nu bare et eksempel på en underformular (altså IKKE en sammenkædet formular) som synkroniseres. Det er i hvert fald kun den jeg kan finde..
Underligt at dette ikke er et problem som ALLE har haft på et tidspunkt, og som derfor måtte være let at løse..?

Ellers tak for hjælpen, og god weekend
Toree
Avatar billede mugs Novice
28. april 2006 - 13:55 #13
Thomas Jepsen har en funktion der hedder 2Dynamisk filtrering- og søgefunktion", jeg tror du kan bruge den.
Avatar billede torejessen Nybegynder
28. april 2006 - 13:56 #14
Er det ikke "Synkroniser flere subforms" du tænker på?
Avatar billede mugs Novice
28. april 2006 - 13:58 #15
Nej - "Dynamisk filtrerings- og søgefunktion".
Avatar billede torejessen Nybegynder
28. april 2006 - 14:04 #16
Måske er den fjernet?
Jeg kan ikke finde den på http://www.nyholm.dk/makeiteasy/Home.asp?ContentID=30
Det kan være de kun beholder de nyeste på siden?
Har du den?
Avatar billede mugs Novice
28. april 2006 - 14:08 #17
Nej - Den er der stadig:

Filter- og søgefunktion
Avatar billede torejessen Nybegynder
28. april 2006 - 14:26 #18
Ok ja den ser flot og effektiv ud. Som jeg ser det, er det da en stadig en formular med underformular, ikke sandt?
Jeg har jo kommandoknapper på min formular, som åbner Form2. Altså sammenkædede formularer.
Jeg tror ikke jeg kan tage dette eksempel og få en dynamisk filtrering af mine sammenkædede formularer. Eller tager jeg fejl?
Jeg har ikke lyst til at have formularer-med-under-formularer, for det forvirrer i billedet. Jeg vil i stedet have adskillige kommandoknapper, som hver åbner deres egen Form. Alle disse forms bliver ikke dynamisk filtreret, de bliver stående med de samme oplysninger, selvom jeg scroller i hovedformularen.
Har du et trick til dette formål, eller et link til nogen der kan en smart måde?

Tak for hjælpen, og god weekend
Tore


Hilsen
Tore
Avatar billede mugs Novice
28. april 2006 - 16:23 #19
Du roder noget rundt i begreberne. I eksemplet er der ikke tale om underformularer / sammenkædede formularer. Der er kun een formular der filtreres dynamisk afhængig af hvad du indtaster i søgefelterne.

I sammenkædede formularer åbner du en anden formular visende de data der svarer til data i den første formular.

Ved brug af underformularer har du en formular inde i en anden formular. Underformularen ar så "slavet" til hovedformularen med underordnede- / overordnede felter.
Avatar billede torejessen Nybegynder
01. maj 2006 - 14:51 #20
Svaret fandtes i Nwind databasen:
Her er VB der virker:
Private Sub Form_Current()
On Error GoTo Err_Form_Current

' Hvis Kontaktperson_subFrm form er åben, skal firmaets kontaktpersoner vises.

    Dim strDocName As String
    Dim strLinkCriteria As String

        strDocName = "Kontaktperson_subFrm"
        strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
 
    If IsNull(Me![Firmanavn]) Then
        Exit Sub
    ElseIf IsLoaded("Kontaktperson_subFrm") Then
        DoCmd.OpenForm strDocName, , , strLinkCriteria
    End If

Exit_Form_Current:
    Exit Sub
   
Err_Form_Current:
    MsgBox Err.Description
    Resume Exit_Form_Current

End Sub



Private Sub PersonKnap_Click()
' This code created in part by Command Button Wizard.
On Error GoTo Err_PersonKnap_Click

    Dim strMsg As String, strTitle As String
    Dim intStyle As Integer
    Dim strDocName As String, strLinkCriteria As String

    ' If Firmanavn control is blank, display a message.
    If IsNull(Me![Firmanavn]) Then
        strMsg = "Flyt dig til den virksomhedsnavn, hvis kontaktpersoner du ønsker at se, og klik så her igen"
        intStyle = vbOKOnly
        strTitle = "Vælg en virksomhed"
        MsgBox strMsg, intStyle, strTitle
        Me![Firmanavn].SetFocus
    Else
    ' Otherwise, open Kontaktperson_subFrm form, showing products for current supplier.
        strDocName = "Kontaktperson_subFrm"
        strLinkCriteria = "[FirmaFk] = Forms![FirmaFrm]![FirmaId]"
        DoCmd.OpenForm strDocName, , , strLinkCriteria
        DoCmd.MoveSize (1400 * 0.78), (1400 * 0.78)
    End If
   
Exit_PersonKnap_Click:
    Exit Sub
   
Err_PersonKnap_Click:
    MsgBox Err.Description
    Resume Exit_PersonKnap_Click
   
End Sub
Private Sub OpgaveKnap_Click()
On Error GoTo Err_OpgaveKnap_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "OpgaveFrm"
   
    stLinkCriteria = "[FirmaFk]=" & Me![FirmaId]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_OpgaveKnap_Click:
    Exit Sub

Err_OpgaveKnap_Click:
    MsgBox Err.Description
    Resume Exit_OpgaveKnap_Click
   
End Sub
----------------------------------------
Derudover skal der defineres funktion IsLoaded i et modul
Option Compare Database
Option Explicit

Function IsLoaded(ByVal strFormName As String) As Boolean


' Returns True if the specified form is open in Form view or Datasheet view.

    Const conObjStateClosed = 0
    Const conDesignView = 0

    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsLoaded = True
        End If
    End If
   
End Function


Til egen og evt andres senere brug
Hilsen
Tore
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