none
Unterformular nach wechsel SourceObject - keine Daten mehr

    Frage

  • Hallo ich bekomme nach einem wechsel im unterformular keine daten mehr angezeigt - auch wenn ich die lingmaster und child wieder auf "" setze - requery bewirkt auch nichts

    beim öffne des hauptformulars sind daten da beim ersten wechsel alles OK beim zurückwechseln scheint der LinkMasterFields und LinkChildFields noch auf adresse zu hängen - wenn ich diesen aber abfrage bekomme ich in der msgbox "" angezeigt wie gesagt requery fördert auch keine daten zutage

     

    Private Sub ProjekteDerAdresse_Click()
    
        frmAB_Termin_Anrufliste_UF.LinkMasterFields = ""
        frmAB_Termin_Anrufliste_UF.LinkChildFields = ""
        frmAB_Termin_Aufgabenliste_UF.LinkMasterFields = ""
        frmAB_Termin_Aufgabenliste_UF.LinkChildFields = ""
    
    If frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF" Then
        frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Projekte_Aktuell_UF"
        frmAB_Termin_Aufgabenliste_UF.SourceObject = "frmAB_Projekte_Erledigt_UF"
        frmAB_Termin_Anrufliste_UF.LinkMasterFields = "Adresse"
        frmAB_Termin_Anrufliste_UF.LinkChildFields = "Adresse"
        frmAB_Termin_Aufgabenliste_UF.LinkMasterFields = "Adresse"
        frmAB_Termin_Aufgabenliste_UF.LinkChildFields = "Adresse"
      
      Else
        frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF"
        frmAB_Termin_Aufgabenliste_UF.SourceObject = "frmAB_Termin_Aufgabenliste_UF"
        frmAB_Termin_Anrufliste_UF.LinkMasterFields = ""
        frmAB_Termin_Anrufliste_UF.LinkChildFields = ""
        frmAB_Termin_Aufgabenliste_UF.LinkMasterFields = ""
        frmAB_Termin_Aufgabenliste_UF.LinkChildFields = ""
    End If
    
    
    Sonntag, 20. März 2011 11:50

Antworten

  • So langsam komme ich der sache näher ich habe in der datensatzherkunft des ufo's unter anderem ein kriterium das auf ein formular verweisst 
    -[Formulare]![frmAB]![AktuellerSachbearbeiter]
    wenn ich dieses durch einen festen ersetzte geht es - obwohl beim umschalten der wert in dem formular frmAB da ist

    ich hole mir den wert jetzt aus einer globalen variable dann geht es - ich verstehe es nicht aber es geht

    ich hole mir die variable über

    Public Function GetVariableSBAID() As Long
    GetVariableSBAID = SBAID
    End Function

    GetVariableSBAID() ist dann mein kriterium  geht das auch eleganter in der datensatzherkunft - kann ich da auch irgendwie direkt drauf zugreifen?

    • Als Antwort markiert MCDPone Mittwoch, 15. Februar 2012 16:22
    Dienstag, 22. März 2011 16:52

Alle Antworten

  • Was meinst du mit "nach einem wechsel im unterformular"? Was wechselst du dort? Kann es sein das du lediglich auf einen neuen, leeren Datensatz gewechselt hast?

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Montag, 21. März 2011 12:11
    Moderator
  • Hallo Stefan

    ich wechsel das formular(SourceObject des unterformulares)

    frmAB_Termin_Anrufliste_UF

    auf

    frmAB_Projekte_Aktuell_UF

    geht auch nur das er die LinkMasterFields und LinkChildFields irgendwie auf die ID stellt obwohl ich diese nach dem setzen des SourceObject auf "" setzte

     

    Montag, 21. März 2011 16:43
  • hi,

    die Reihenfolge beim Setzen von LinkMaster und LinkChild spielt in manchen Fällen eine Rolle. Mein Standardmethode, wiederverwendbar:

    Public Sub FormSetSubForm(ASubForm As Access.SubForm, _
                 ASourceObject As String, _
                 ALinkChildFields As String, _
                 ALinkMasterFields As String, _
                 Optional ALinkMasterChild As Boolean = True)
    
     On Local Error GoTo LocalError
    
     If ASubForm.SourceObject <> ASourceObject Then ASubForm.SourceObject = ASourceObject
     
     If ALinkMasterChild Then
       If ASubForm.LinkChildFields <> ALinkChildFields Then ASubForm.LinkChildFields = ALinkChildFields
       If ASubForm.LinkMasterFields <> ALinkMasterFields Then ASubForm.LinkMasterFields = ALinkMasterFields
       Else
       If ASubForm.LinkChildFields <> "" Then ASubForm.LinkChildFields = ""
       If ASubForm.LinkMasterFields <> "" Then ASubForm.LinkMasterFields = ""
     End If
     
     Exit Sub
     
    LocalError:
     FormErrMsgBox "Fehler beim Zuweisen des Unterformulars '" & ASubForm.Name & "'."
     
    End Sub
    
    

    Wenn du deinen Code umschreibst sollte es gehen, z.B. so:

    Private Sub ProjekteDerAdresse_Click()
    
     If frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF" Then
      FormSetSubForm frmAB_Termin_Anrufliste_UF, "frmAB_Projekte_Aktuell_UF", "Adresse", "Adresse"
      FormSetSubForm frmAB_Termin_Aufgabenliste_UF, "frmAB_Projekte_Erledigt_UF", "Adresse", "Adresse"
     Else
      FormSetSubForm frmAB_Termin_Anrufliste_UF, "frmAB_Termin_Anrufliste_UF"
      FormSetSubForm frmAB_Termin_Aufgabenliste_UF, "frmAB_Termin_Aufgabenliste_UF"
     End If
    
    End Sub
    

    Wobei du noch prüfen solltest, ob [Adresse] in für beide Datenquellen das korrekte Feld ist.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 22. März 2011 09:01
    Moderator
  • Danke - deins ist vom ablauf das gleiche wie meins - leider bei mir auch vom ergebniss - keinen datensatz

    ich habe auch beim formular frmAB_Termin_Anrufliste_UF die LinkChildFields und LinkMasterFields auf "Adresse" gesetzt und schon wird mir ein passende datensatz angezeigt

    -was natürlich nicht soll da ich dort in dem fall alle angezeigt bekommen möchte

    wenn ich mein hauptformular öffne wird das frmAB_Termin_Anrufliste_UF auch allen daten angezeigt - nur eben dann nicht mehr wenn ich die SourceObject ändere

     

    ich setzte auch nicht zwischendurch einen filter oder ändere die datensatzherkunft

    wenn ich nach dem wechsel den ....frmAB_Termin_Anrufliste_UF.RecordCount abfrage bekomme ich auch 0

    auch die ....frmAB_Termin_Anrufliste_UF.RecordSource ist richtig

    Adresse ist eine Zahl und "" ist ja dann ein String kann es da was m,it zu tun haben aber LinkChildFields NULL zuweisen geht nicht

    Dienstag, 22. März 2011 15:05
  • So neben bei: Welche Access-Version?

    Okay, dann ist es eigentlich ein Problem mit der Datenquelle. Hast du dort Filter mit Formularbezügen eingebaut? Post mal die RecordSource von  frmAB_Termin_Anrufliste_UF nachdem es geladen wurde.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 22. März 2011 15:17
    Moderator
  • ich habe jetzt einmal nur meine beiden formulare gewechselt also

     If frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF" Then
      frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Aufgabenliste_UF"
      frmAB_Termin_Aufgabenliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF"
     Else
       frmAB_Termin_Anrufliste_UF.SourceObject = "frmAB_Termin_Anrufliste_UF"
       frmAB_Termin_Aufgabenliste_UF.SourceObject = "frmAB_Termin_Aufgabenliste_UF"
     End If

    also mit der schaltfläche kann ich diese hin und her schalten in einem formular

    beide formulare sind standartmässig ohne LinkChildFields und LinkMasterFields

    wenn ich dann aber ein
    frmAB_Termin_Anrufliste_UF.LinkChildFields = ""
    frmAB_Termin_Anrufliste_UF.LinkMasterFields = ""
    einbaue wird genau im ufo frmAB_Termin_Anrufliste_UF kein datensatz mehr angezeigt

    Dienstag, 22. März 2011 15:21
  • kein filter der recordsource ist vor und nach dem wechsel der gleiche

    Access 2003

    Dienstag, 22. März 2011 15:23
  • hi, du musst da irgendwo einen Hund drin haben... Zum testen würde ich mal die Unterformular-Controls umbenennen, so das sie nicht den gleichen Name wie deine Formulare tragen.
    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 22. März 2011 16:14
    Moderator
  • So langsam komme ich der sache näher ich habe in der datensatzherkunft des ufo's unter anderem ein kriterium das auf ein formular verweisst 
    -[Formulare]![frmAB]![AktuellerSachbearbeiter]
    wenn ich dieses durch einen festen ersetzte geht es - obwohl beim umschalten der wert in dem formular frmAB da ist

    ich hole mir den wert jetzt aus einer globalen variable dann geht es - ich verstehe es nicht aber es geht

    ich hole mir die variable über

    Public Function GetVariableSBAID() As Long
    GetVariableSBAID = SBAID
    End Function

    GetVariableSBAID() ist dann mein kriterium  geht das auch eleganter in der datensatzherkunft - kann ich da auch irgendwie direkt drauf zugreifen?

    • Als Antwort markiert MCDPone Mittwoch, 15. Februar 2012 16:22
    Dienstag, 22. März 2011 16:52
  • Entschuldigen Sie mich für meine arme Kenntnisse der deutschen Sprache.

    Wird diese Form rekursiv in sich selbst als Unterformular verschachtelt?

    Wenn ja, sollten Sie gewarnt, dass diese Konfiguration viel besser in MS Access 2003, als in späteren Versionen, 2007 oder 2010 arbeitet werden.


    Matthew Slyman M.A. (Camb.)

    Mittwoch, 15. Februar 2012 15:21
  • P.S. Wenn Sie rekursiv geschachtelte Unterformulare in Access 2003 habe ich festgestellt, dass dies am besten funktioniert, wenn die Änderung der SourceObject mit dem Event-Handler für das "Form_Current" Veranstaltung.

    Die beste Lösung für viele Probleme dieser Art wäre es, ein TreeView verwenden. Microsoft hat jedoch den COM-TreeView in Access 2010 veraltet, und niemand scheint zu wissen, wie TreeView-Steuerelemente in MS Access nicht mehr zu machen!


    Matthew Slyman M.A. (Camb.)

    Mittwoch, 15. Februar 2012 15:26