Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: TomTom2903 am April 03, 2012, 14:34:06

Titel: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: TomTom2903 am April 03, 2012, 14:34:06
Hallo,
bekomme einen Laufzeitfehler beim Wechsel des Unterformulars.
-> Die von Ihnen eingegeben Einstellungen ist für diese Eigenschaft ungültig.

Code:

Private Sub cmbAnzeigen_Click()
    SetzeTitel Me, "Kunden Information", Me.cmbAnzeigen.Column(1)
   
    Me.lblTitelDetails.Caption = "Details: " & Me.cmbAnzeigen.Column(1)
   
    With sfmdetails
        If Me.cmbAnzeigen.Column(2) = "" Then
            .SourceObject = ""
            .Visible = False
        Else
            With Me![sfmdetails]
                .LinkChildFields = ""
                .LinkMasterFields = ""
                .SourceObject = "Me.cmbAnzeigen.Column(2)"
                .LinkChildFields = "Kunde"
                .LinkMasterFields = "asdf"
            End With
           
            .SourceObject = Me.cmbAnzeigen.Column(2)    '    '"frm_KundenAdresse"
            .Visible = True
            Debug.Print Kunde
        End If
    End With
End Sub

Private Sub Form_Current()
    With cmbAnzeigen
        .RowSource = ""
        .RowSource = .RowSource & anzOhne & ";Auswahl Treffen;;"
        .RowSource = .RowSource & anzKundeAdresse & ";Adresse;frm_KundenAdresse;"
        .RowSource = .RowSource & anzJahresUmsatz & ";Umsatz Monat/Jahr (Mit Verteilung);TEST;"
        .RowSource = .RowSource & anzMonatUmsatz & ";Hier;Abfrage.Abfrageneu;"
        .RowSource = .RowSource & anzletzte3MonatUmsatz & ";Monatsumsatz aktuell (Ohne Verteilung);Abfrage.qry_MV_MonatsUmsatzJahr;"
        .RowSource = .RowSource & anzRunner & ";Artikel Runner;Abfrage.qry_OV_MonatsUmsatzAktuell"
        .Value = anzOhne
    End With
End Sub


Hat jmd ne Idee?! Wäre super dankbar!
Grüße
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: DF6GL am April 03, 2012, 16:32:14
Hallo,

lass Dir mal nach diesem Code:

    With cmbAnzeigen
        .RowSource = ""
        .RowSource = .RowSource & anzOhne & ";Auswahl Treffen;;"
        .RowSource = .RowSource & anzKundeAdresse & ";Adresse;frm_KundenAdresse;"
        .RowSource = .RowSource & anzJahresUmsatz & ";Umsatz Monat/Jahr (Mit Verteilung);TEST;"
        .RowSource = .RowSource & anzMonatUmsatz & ";Hier;Abfrage.Abfrageneu;"
        .RowSource = .RowSource & anzletzte3MonatUmsatz & ";Monatsumsatz aktuell (Ohne Verteilung);Abfrage.qry_MV_MonatsUmsatzJahr;"
        .RowSource = .RowSource & anzRunner & ";Artikel Runner;Abfrage.qry_OV_MonatsUmsatzAktuell"
        .Value = anzOhne
    End With



den Rowsource_Eigenschaften-Inhalt mit Debug.Print in das Direktfenster schreiben....

neben den möglicherweise fehlenden Gänsefüßen (Hochkommata) kannst Du nicht mit der Angabe eines Abfragenamens auf den "Inhalt" einer Auswahlabfrage zugreifen...

Möglicherweise fehlt auch noch die Einstellung der Herkunftstyp-Eigenschaft auf "Wertliste"  ("Value List")
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: Beaker s.a. am April 03, 2012, 23:17:11
Hallo Tom,
Vielleicht markierst DU mal die Zeile, die der Debugger Dir anzeigt,
wenn dieser Fehler ausgelöst wird.
Ich tippe auf:
.SourceObject = "Me.cmbAnzeigen.Column(2)"
Das SourceObject eines UForm-Steuerelements ist ein Formular.
Da gehört also ein Formularname zwischen die " ".
Wenn dieser in dem Kombo in Column(2) angezeigt wird, dann
.SourceObject = Me.cmbAnzeigen.Column(2)

OHNE Gänsefüsse.
hth
gruss ekkehard
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: TomTom2903 am April 04, 2012, 10:29:51
Hi,
danke für Eure Antworten. Das mit den Gänsefüßen ist mir auch aufgefallen.
Das Problem kam aber aus den ersten 2 .Link...Fields.
Habe das umgegangen durch ne Error Methode, so funktioniert es...
So ganz verstehen, warum er die Error anweisung benötigt, verstehe ich noch nicht.

Jmd von Euch ne Idee. Hat was mit dem leeren "" String zu tun.

Grüße
Tom

Code:

Private Sub Befehl58_Click()
    With sfmdetails
               
        If Me.cmbAnzeigen.Column(2) = "" Then
            .SourceObject = ""
            .Visible = False
        Else
            On Error Resume Next
            .LinkChildFields = ""
            Debug.Print "1" & .LinkChildFields
           
            On Error Resume Next
            .LinkMasterFields = ""
            Debug.Print "2" & .LinkMasterFields
           
            .SourceObject = Me.cmbAnzeigen.Column(2)
            .LinkChildFields = "Kunde; Periode"              'Unterformular
            Debug.Print "3" & .LinkChildFields
            .LinkMasterFields = "asdf; periodeID"              'Hauptformular
            Debug.Print "4" & .LinkMasterFields
           
            '.SourceObject = Me.cmbAnzeigen.Column(2)    '    '"frm_KundenAdresse"
            .Visible = True
            Debug.Print "Ende"
        End If
    End With
End Sub
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: DF6GL am April 04, 2012, 15:11:45
Hallo,

solange noch kein SourceObject definiert (zugewiesen) ist, dürften die Link-Fields-Eigenschaften  noch gar nicht existieren....
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: Beaker s.a. am April 04, 2012, 23:33:11
Hallo Tom,
On Error Resume Next
Gaaanz schlecht!
Da erfährst Du ja nie ob da Laufzeitfehler auftreten.
Das heisst aber auch, dass Du die Kontrolle über Deinen
Code verlierst, was natürlich zu unvorhergesehenen Ergebnissen
führen kann. Also gewöhne Dir an, in jede Prozedur zumindest
eine rudimentäre Fehlerbehandlung einzubauen, die Dir zumindest
die Fehlernummer (Err.Number) und die Beschreibung (Err.Description)
ausgibt.
Zum Code, versuch Mal so:
        Else

            .SourceObject = Me.cmbAnzeigen.Column(2)
            .LinkChildFields = "Kunde; Periode"              'Unterformular
            .LinkMasterFields = "asdf; periodeID"              'Hauptformular
            .Visible = True
           

Du musst zuerst das SourceObject zuweisen, dann die Link-Fields (siehe Franz Anmerkung).
Vorher auf "" zu stellen ist IMO nicht nötig.
Frage: Warum sind denn die Felder hier fest verdrahtet?
hth
gruss ekkehard
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: TomTom2903 am April 05, 2012, 10:26:03
Hallo Beaker,
Hallo Franz,
das mit dem Error gefällt mir auch nicht...

Mein Problem ist, dass ich das so wie du auch probiert habe. Laße ich jetzt aber das Feld Periode mal leer. Also so das ich mir alle 12 Monate anzeigen lassen möchte. Bekomme ich prompt eine Fehlermeldung:
Laufzeitfehler 2101: "Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft ungültig.
-> Zeile nach debugen mit *** gekennzeichnet.

           'On Error Resume Next
           '.LinkChildFields = ""
           Debug.Print "1" & .LinkChildFields
           
           'On Error Resume Next
           '.LinkMasterFields = ""
           Debug.Print "2" & .LinkMasterFields
           
           .SourceObject = Me.cmbAnzeigen.Column(2)
           
***           .LinkChildFields = "Kunde; Periode"              'Unterformular
           Debug.Print "3" & .LinkChildFields
           .LinkMasterFields = "asdf; periodeID"              'Hauptformular
           Debug.Print "4" & .LinkMasterFields

Die LinkChildFields können ja anscheinend mit leeren Strings nichts anfangen?!

Mein Ziel ist es im übrigen ein Formular mit Subformular zu bauen in dem ich verschieden angaben Filten kann:
Umsätze nach Kunde -> Jahr/Monatsübersicht, weiterer Filter wäre dann auf Periode, Teilegruppe, Artikel usw...
-> vielleicht habe ich ja auch einen falschen Ansatz gewählt.


@ Beaker: Zu deiner Frage "Warum die Felder fest verdrahtet sind?"
Hm, am liebsten wären mir natürlich die Felder variabel zu gestalten. Z.B. könnte ja Column (2) auch ein Formular "Adresse" sein oder eine Abfrage die sich werder auf Kunde noch auf Periode bezieht. Hier wäre diese Felder natürlich völiger Quatsch, aber ehrlich gesagt habe ich hier noch nicht wirklich einen Ansatz um das auch variabel/dynamisch zu gestalten.
-> In diesem Zusammenhang habe ich auch immer die fields = "" gesetzt, um beim test von anderen Abfragen keine Fehlermeldung zu bekommen...

Hast du ne Idee - Ansatz?!

Gruß
Tom
Titel: Re: Laufzeitfehler 2101 bei Unterformular wechsel
Beitrag von: Beaker s.a. am April 05, 2012, 23:17:46
Hallo Tom,
Zitatdas mit dem Error gefällt mir auch nicht...
Dann ändere es ;-)
Zum Code:
Bist Du sicher, dass die Feldnamen richtig sind?
Hast Du es mal mit Komma statt Semikolon zwischen den Feldnamen versucht?
ZitatDie LinkChildFields können ja anscheinend mit leeren Strings nichts anfangen?!
Das kann eigentlich nicht sein. Wenn nichts drin steht wird auch nicht verlinkt.
Statt "" könntest Du aber auch mal vbNullString versuchen.
ZitatMein Ziel ist es im übrigen ein Formular mit Subformular zu bauen in dem ich verschieden angaben Filten kann:
Umsätze nach Kunde -> Jahr/Monatsübersicht, weiterer Filter wäre dann auf Periode, Teilegruppe, Artikel usw...
-> vielleicht habe ich ja auch einen falschen Ansatz gewählt.
Das liesse sich evtl. auch über eine dynamische Zuweisung der Datenherkunft (Abfrage/SQL) des UFo realisieren.
ZitatHm, am liebsten wären mir natürlich die Felder variabel zu gestalten. Z.B. könnte ja Column (2) auch ein Formular "Adresse" sein oder eine Abfrage die sich werder auf Kunde noch auf Periode bezieht. Hier wäre diese Felder natürlich völiger Quatsch, aber ehrlich gesagt habe ich hier noch nicht wirklich einen Ansatz um das auch variabel/dynamisch zu gestalten.
Wie sieht den die RowSource des Kombis aus (Me.cmbAnzeigen.Column(2))?
Wenn da der Formularname drin steht, kannst Du da doch auch die LinkFields hinterlegen,
und dann genauso zuweisen wie den Formnamen (.Column(n)).
hth
gruss ekkehard