Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Morgi am November 19, 2015, 17:14:38

Titel: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: Morgi am November 19, 2015, 17:14:38
Hallo zusammen. Nach stundenlanger Googelei wende ich mich ziemlich verzweifelt an die Community.

Meine Idee ist, je nachdem welche Arbeitsphasen in dem Listenfeld im UFO enthalten sind, entsprechende Registerblätter anzeigen zu lassen.
Grundsätzlich bekomme ich das mit dem "visible" auch gut hin. Ich habe es mit Select Case (auf das entsprechende Feld) versucht und auch mit If. Ich bekomme aber immer nur einen Wert zurück und damit wird nur das Registerblatt zur ersten eingetragenen Phase sichtbar. Alle weiteren gehen leer aus.
Wie bekomme ich es denn nun hin, dass wenn z.B. vier Phasen eingetragen sind auch die vier entsprechenden Registerblätter eingeblendet werden?
Ich würde mich über eine Hilfestellung sehr freuen und wünsche erst einmal einen schönen Abend!
Beste Grüße
Morgi
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: Beaker s.a. am November 19, 2015, 21:52:44
Hallo Morgi,
Wirst Du wohl Mal den Code zeigen müssen, bevor jemand was dazu sagen kann.
gruss ekkehard
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: Morgi am November 20, 2015, 07:33:54
Guten Morgen.
Das Problem ist ja, dass ich noch keinen wirklichen Code habe, weil beide Versionen nicht funktioniert haben.
Ich glaube, nach meinen ausgiebigen Recherchen mit Freund Google, dass "OpenRecordset" die Lösung wäre, weil es doch nicht nur den ersten, sondern alle vorhandenen auswirft (richtig?). Aber so weit reichen meine Kenntnisse nicht, das hab ich noch nie selbst geschrieben...

Trotz alledem gerne hier mein Ansatz mit If, der grundsätzlich funktioniert, nur leider immer nur den ersten gefundenen Datensatz berücksichtigt.


    '=UVP-Vorprüfung oder Scoping/UVP
    If Me.RahmenUFOPhasen.Form![phaArt] = 5 Or Me.RahmenUFOPhasen.Form![phaArt] = 6 Then
    Me.RegisterStammblatt.Pages(3).Visible = True
    Else: Me.RegisterStammblatt.Pages(3).Visible = False
    End If

    '= 1. Beteiligung
    If Me.RahmenUFOPhasen.Form![phaArt] = 1 Then
    Me.RegisterStammblatt.Pages(4).Visible = True
    Else: Me.RegisterStammblatt.Pages(4).Visible = False
    End If
 


Die Select Case-Version war entsprechend aufgebaut, hab ich nur schon gelöscht. Wenn das der zielführende Weg sein könnte, schreib ich das gern nochmal zusammen.

Ach ja, das Ganze steht in der Sub Form_Current.

Vielen Dank schon mal für die Mühe.
Gruß Morgi
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: DF6GL am November 20, 2015, 08:19:28
Hallo,

Du solltest zunächst mal genau und konkret beschreiben, wie das Ganze überhaupt aufgebaut ist und zeige einen Screenshot des Beziehungsfensters.

Bevor wir nun mit Code um uns werfen, sollten mindestens die folgenden Fragen beantwortet werden:


Was genau steht im Listenfeld (Datensatzherkunft)?

Handelt es sich wirklich um ein "Listenfeld"-Steuerelement oder etwa um den Detailbereich eines Endlosformulares? Wie und über welche Schlüsselfelder wäre das UFO dann mit dem Hauptform verknüpft

Hängt die Anzeige der Registerseiten von ausgewählten (markierten) Listenfeld-Einträgen ab?

Welchen Sinn hat es, die Anzeige der Registerseiten von  verschiedenen Datensatzwerten abhängig zu machen?

Ein Hochladen der Db (datenreduziert, repariert/komprimiert und gezippt) mit Beschreibung, wo was genau passieren soll, wäre eine weitere Möglichkeit zur Klärung der Sachlage....
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: Morgi am November 20, 2015, 10:59:44
Da bin ich schon wieder.
Vielen herzlichen Dank für Eure Aufmerksamkeit, ich habe es hinbekommen. Die Lösung war tatsächlich OpenRecordset. Das habe ich zwar noch nicht vollständig verstanden, aber anhand verschiedener Beispiele bauen können. Vielleicht hilft es irgendwem, daher schreib ich noch ein paar Worte zur Aufgabenstellung und die (bisher funktionierende) Lösung:
Zu einem Stammdatensatz kann man einzelne Arbeitsphasen (auswählbar) anlegen (zusätzliche Tabelle, über Stamm-Id referenziert). Die angelegten Phasen werden im Hauptformular noch in einem Listenfeld angezeigt, welches ich als Datenquelle für diese Unternehmen verwenden wollte. Ich bin aber umgeschwenkt auf die eigentliche Phasen-Tabelle. Um Registerblätter abhängig von den angehängten Phasen einblenden zu lassen, brauchte ich die Ausgabe aller Phasen-Arten, die mit dem Stammdatensatz verknüpft sind, um darauf ein Select Case und auf dieser Basis Registerblätter einzublenden, die ich eingangs ausblende. Es müssen noch einige Fälle mehr eingebaut werden, aber das System sieht nun so aus:


'Registerkarten sichtbar je nach vorhandenen Phasen/Entscheidungen
    Me.RegisterStammblatt.Pages(3).Visible = False
    Me.RegisterStammblatt.Pages(4).Visible = False
   
    'Konstruiere einen Datenpool in dem alle Phasen enthalten sind, die mit dem
    'offenen Stammdatensatz verbunden sind
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Set db = CurrentDb
    'zur Übergabe der ID des Stammdatensatzes
    Dim var1 As Long
    var1 = Me.staID
    Set rst = db.OpenRecordset("Select * from tblPhasen where pha_staID_ref =" & var1)

    Do While Not rst.EOF
   
    'Debug.Print rst!phaArt 'Testen, was ausgegeben wird
       
    Select Case rst!phaArt
    Case 5, 6
    Me.RegisterStammblatt.Pages(3).Visible = True
   
    Case 1
    Me.RegisterStammblatt.Pages(4).Visible = True
   
    End Select
   
    rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    Set db = Nothing

Falls den erfahrenen Usern hier noch ein grober Denkfehler auffällt, würde ich mich über eine kleine Rückmeldung freuen. Ansonsten würde ich den Post als gelöst betrachten.
Anbei auch noch ein Screenshot von meinem Beziehungsfenster, die betroffenen Tabellen habe ich markiert.

Bleibt nichts, als mich noch einmal herzlich zu bedanken und Euch bis zum nächsten Mal alles Gute zu wünschen.
Morgi
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: MaggieMay am November 20, 2015, 13:54:33
Hallo,

nur ein Tipp: Du solltest keine Tabellenbeziehungen ohne Referentielle Integrität anlegen.
Und bei Abfragen nicht die ganze Tabelle auslesen, sondern nur die benötigten Datenfelder (hier "phaArt").
Titel: Re: Sichtbarkeit von Registerblättern basierend auf Werte in Listenfeld in UFO
Beitrag von: Beaker s.a. am November 20, 2015, 21:27:23
Hallo Mogi,
Schön, dass es geklappt hat. Hätte aber noch ein paar Anmerkungen.
ZitatDie angelegten Phasen werden im Hauptformular noch in einem Listenfeld angezeigt, welches ich als Datenquelle für diese Unternehmen verwenden wollte.
Dann hat doch das Listenfeld die gleiche Abfrage dahinter, die Du im Code auch verwendest:Set rst = db.OpenRecordset("Select * from tblPhasen where pha_staID_ref =" & var1)
Das könntest Du dann auch einfach so machen:Set rst = db.OpenRecordset(Me!DeinListfeld.RowSource)
Ich finde es besser die Registerkarten nicht mit dem Index zu adressieren, sondern über den Namen:Me.Controls("NameDesRegisterControls").Pages("NameDerRegisterkarte").PageIndex
Hintergrund: Wenn Du die Karten Mal umsortierst/löscht oder neue dazu kommen, musst Du jedes mal den Code ändern.
gruss ekkehard