collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 62
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14072
  • stats Beiträge insgesamt: 67582
  • stats Themen insgesamt: 9104
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: TreeView aus zwei Tabellen  (Gelesen 8280 mal)

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
TreeView aus zwei Tabellen
« am: März 22, 2015, 10:57:59 »
Hi,
hab mich im Forum umgeschaut und irgendwie nichts gefunden, was mir auf anhieb helfen würde, daher mein Anliegen:

Ich habe zwei Tabellen
In einer Tabelle habe ich Kundendaten
in der anderen Tabelle Aufträge.
Unter Aufträge habe ich eine Spalte in der die Kunden-ID eingetragen wird und die beiden Tabellen sind über die Kunden-ID verknüpft.

Nun möchte ich eine TreeView (Baumansicht) aufbauen. Die wie folgt aussehen soll:

(-) Kunde 1
       Auftrag 1
       Auftrag 4
       Auftrag 5
(-) Kunde 2
       Auftrag 2
       Auftrag 3
und so weiter.....

Und über Doppelklick auf den Auftrag soll, sich der Auftrag dann öffnen.

Ich gehe stark davon aus, dass das simpel ist, hab leider nur sehr beschränkte Kenntnisse in VBA. Schuster mir für gewöhnlich aus Vorlagen das zusammen was ich brauche, nur finde ich eine solche Vorlage nicht :D

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7429
Re: TreeView aus zwei Tabellen
« Antwort #1 am: März 22, 2015, 11:35:12 »
Hallo,
muss das ein TreeView sein ?
Ein Hauptformular für die Kundenanzeige und darin ein über die Schlüsselfelder verknüpftes Unterformular halte ich da für geeigneter. Da kann auch bei Bedarf direkt geändert (oder eingetragen) werden. Auch das mit dem Doppelklick für ein weiteres Formular ist dann simpel.
Mit der Openform Methode kann dann der PS des Auftrags übergeben werden.
Gruß
Klaus
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #2 am: März 22, 2015, 11:48:35 »
Ja es sollte eine TreeView sein.
Ich habe zum einen die Möglichkeit zu filtern über ein Eingabefeld.
Und mit der TreeView möchte ich mir die Option offen halten, direkt nach dem Auftrag zu suchen, wenn ich weiß wo er ist.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23453
Re: TreeView aus zwei Tabellen
« Antwort #3 am: März 22, 2015, 12:15:10 »
Hallo,

beide Anforderungen wären über ein Haupt-/Unterform besser zu lösen...

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7429
Re: TreeView aus zwei Tabellen
« Antwort #4 am: März 22, 2015, 12:17:23 »
Hallo,
ich halte zu diesem Zweck ein TreeView für ungeeignet. Ein TreeView verwendet man für echte Baumstrukturen, was ja hier gar nicht vorliegt. Das ist eine einfache 1:n Beziehung. Für Hafo-Ufo gerade zu ideal.
Gruß
Klaus
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #5 am: März 22, 2015, 13:12:45 »
Mhm....
Also im grunde habe ich mehrere Formulare.
Eines in das ich die TreeView reinpacken will und rechts daneben das Unterformular, in dem der jeweilige Auftrag erscheinen soll, wenn ich diesen in der TreeView mit Doppelklick ansteuere.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7429
Re: TreeView aus zwei Tabellen
« Antwort #6 am: März 22, 2015, 19:39:27 »
Hallo,
der Sinn eines TreeView erschließt sich mit immer noch nicht. Das genannte Hafo/Ufo Kombination macht das doch viele viel einfacher. Im Hafo ein Listenfeld (statt des TreeView) zur Auswahl des Kunden und im Ufo die Details des Auftrags. Für die paar Felder eines Auftrags braucht man zur Anzeige kein extra Formular, das kann das Ufo auch.

Was willst Du im Auftrag sehen, oder auch die Positionen eines Auftrags ?
Das ist praktischer (und einfacher) als das TreeView.
Gruß
Klaus
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #7 am: März 22, 2015, 22:03:10 »
Okay gut, ich wollte es nur möglichst einfach formulieren, jetzt verstehe ich woran ihr euch aufhängt.

Also im Grunde ist es noch weiter verschachtelt.
Sagen wir von Region zu Stadt, dann von Stadt zu Kunde und letzlich von Kunde zu Aufträge :D
In jeder Tabelle gibt es dann einen Primärschlüssel, der in der untergeordneten Tabelle wieder auftaucht um die beiden Tabellen zu verknüpfen.

Also letzlich:

Region
      [-]Stadt
      [-]Stadt2
             [-]Kunde1
             [-]Kunde2
                     [-]Auftrag1
Region2
... und so weiter
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23453
Re: TreeView aus zwei Tabellen
« Antwort #8 am: März 23, 2015, 07:45:57 »
Hallo,

ich denke mal, wir haben schon verstanden, wie das aussehen soll...  8)

Wenn Du das nun unbedingt so haben willst, schau mal unter "Treeview" bei diesem Link:

http://dbwiki.net/wiki/Access_Beispieldatenbanken

und bei:

https://msdn.microsoft.com/en-us/library/aa733703(v=vs.60).aspx

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #9 am: März 24, 2015, 22:03:47 »
Soooo ich bin ein ganzes Stück weiter, vom Prinzip her scheint es richtig zu sein, er Fragt aber beim Ausführen nach einem Makro, dass ich nicht habe, und auch nicht weiß welches das sein könnte.
So schaut das ganze nun bisher aus:


Option Compare Database
Option Explicit

Dim objTreeview As MSComctlLib.TreeView


Private Sub ctlTreeView_enter(cancel As Integer)

    Dim db As DAO.Database
    Dim rstRegion As DAO.Recordset
    Dim rstKunde As DAO.Recordset
    Dim objNode As MSComctlLib.Node
    Set db = CurrentDb
    Set rstRegion = db.OpenRecordset("tbl_Region")
    Set objTreeview = Me.ctlTreeView.Object

    Do While Not rstRegion.EOF

        Set objNode = objTreeview.Nodes.Add(, , "Region" & rstRegion![tbl_Region_id], _
            rstRegion![tbl_Region_name])

        Set rstKunde = db.OpenRecordset _
        ("SELECT * FROM [tbl_Kunde] WHERE [tbl_Kunde_Region_id] = '" & rstRegion![tbl_Region_id] & "'")

        Do While Not rstKunde.EOF
            objTreeview.Nodes.Add "Region" & rstRegion![tbl_Region_id], tvwChild, "Kunde" _
                & rstKunde![tbl_Kunde_id], rstKunde![tbl_Kunde_name]


            rstKunde.MoveNext
        Loop


        rstRegion.MoveNext
    Loop

    Set objNode = Nothing
    rst.Close
    Set rst = Nothing
    Set db = Nothing

End Sub
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: TreeView aus zwei Tabellen
« Antwort #10 am: März 24, 2015, 23:24:03 »
Hallo,

1. VBA-Code sollte stets per Copy & Paste eingefügt und nicht abgetippt werden

2. Fehlermeldungen sollten nicht beiläufig erwähnt sondern zitiert werden, am besten noch mit Hinweis auf die konkrete Codezeile

rstRegion![tbl_Region_id] ist vom Typ Text? Andernfalls entferne die Hochkommata.
Freundliche Grüße
MaggieMay
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #11 am: März 24, 2015, 23:44:53 »
Sorry ich lern das noch :D

Also die Fehlermeldung war folgende:
sie haben als einstellung der ereigniseigenschaft den ausdruck beim Hingehen eingegeben. Dieser Ausdruck hat einen Fehler verursacht:
Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit dem selben Namen.

*Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen einer Benutzerdefinierten Funktion noch [Ereignisprozedur] zurück.

Mit der Hilfestellung:
Dieser Fehler tritt auf, wenn ein Ereignis nicht ausgeführt werden konnte, weil der Speicherort der Logik für das Ereignis nicht ausgewertet werden kann. Falls z. B. die OnOpen-Eigenschaft eines Formulars auf =[Field] festgelegt ist, tritt dieser Fehler auf, weil die Ausführung eines Makros oder Ereignisnamens erwartet wird, wenn das Ereignis auftritt.
 

Offline MaggieMay

  • Global Moderator
  • Access Guru
  • *****
  • Beiträge: 3109
Re: TreeView aus zwei Tabellen
« Antwort #12 am: März 25, 2015, 12:01:21 »
Hi,

dieses Statement hat mich zu dem Hinweis veranlasst, man möge den Code stets kopieren und nicht freihändig eintippen:

Private Sub ctlTreeView_enter([color=red]cancel [/color]As Integer)
denn dann hätte "Cancel" nicht klein geschreiben sein dürfen - sofern es denn in diesem Zusammenhang überhaupt als Parameter in Frage kommt.
Tut es aber nicht, wie die von dir nachgelieferte Fehlermeldung belegt:
Zitat
Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit dem selben Namen

Es ist also durchaus sinnvoll, alle relevaten Informationen bereits von Anfang an zu liefern. ;-)
Freundliche Grüße
MaggieMay
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7429
Re: TreeView aus zwei Tabellen
« Antwort #13 am: März 25, 2015, 19:59:58 »
Hallo,
ergänzend:
Auch enter würde Enter geschrieben, wenn es ein solches Ereignis geben würde.
Gruß
Klaus
 

Offline -Rockbiest-

  • Newbie
  • Beiträge: 43
Re: TreeView aus zwei Tabellen
« Antwort #14 am: März 29, 2015, 15:44:40 »
Ich werde künftig versuchen mich daran zu halten ;)
Bin noch relativ neu hier

Der Code funzt mitlerweile super, aber ich stehe bereits vorm nächsten Problem.
Nachfolgende der Code:

Option Compare Database
Option Explicit

Dim WithEvents m_Treeview As MSComctlLib.TreeView


Private Sub Form_Load()
    With objTreeView
         .Appearance = ccFlat
         .BorderStyle = ccNone
         .Style = tvwTreelinesPlusMinusText
    End With
   
    TreeViewFuellen

End Sub


Private Property Get objTreeView() As MSComctlLib.TreeView
     If m_Treeview Is Nothing Then
         Set m_Treeview = Me!tvwTreeView.Object
     End If
     Set objTreeView = m_Treeview

End Property


Public Sub TreeViewFuellen()
   
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim objNode As MSComctlLib.Node
   
    Dim strVorherigeRegion As String
   
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT * FROM tbl_Region WHERE tbl_region_id IS Not NULL", dbOpenDynaset, dbSeeChanges)
   
    Do While Not rst.EOF
        If Not rst!tbl_region_id = strVorherigeRegion Then
            Set objNode = objTreeView.Nodes.Add(, , "Region" & rst!tbl_region_id, rst!tbl_region_name)
        End If
       
    objNode.Expanded = False
    TreeViewFuellen_Rekursiv db, rst!tbl_region_id
    strVorherigeRegion = rst!tbl_region_id
    rst.MoveNext
   
   
    Loop
End Sub


Public Sub TreeViewFuellen_Rekursiv(db As DAO.Database, lngtbl_region_id As Long)
   
    Dim rst As DAO.Recordset
    Dim objNode As MSComctlLib.Node
   
    Set rst = db.OpenRecordset("SELECT * FROM qryRegionKunde WHERE tbl_region_id = " & lngtbl_region_id, _
    dbOpenDynaset, dbSeeChanges)
   
    Do While Not rst.EOF
   
    If Not rst.EOF Then
            Set objNode = objTreeView.Nodes.Add("Region" & rst!tbl_region_id, tvwChild, "Kunde" & _
            rst!tbl_kunde_id, rst!tbl_kunde_name)
        Else
            Exit Sub
        End If

    objNode.Expanded = False
    TreeViewFuellen_Rekursiv2 db, rst!tbl_kunde_id
    rst.MoveNext
   
   
    Loop
End Sub


Public Sub TreeViewFuellen_Rekursiv2(db As DAO.Database, lngtbl_kunde_id As Long)
   
    Dim rst As DAO.Recordset
    Dim objNode As MSComctlLib.Node

   
    Set rst = db.OpenRecordset("SELECT * FROM qryKundeBestellung WHERE tbl_kunde_id = " & lngtbl_kunde_id, _
    dbOpenDynaset, dbSeeChanges)
   
    Do While Not rst.EOF
       
        If Not rst.EOF Then
            Set objNode = objTreeView.Nodes.Add("Kunde" & rst!tbl_kunde_id, tvwChild, "Bestellung" & _
            rst!tbl_bestellung_id, rst!tbl_bestellung_nummer)
        Else
            Exit Sub
        End If

    objNode.Expanded = False
    Debug.Print "Kunde"
   
    rst.MoveNext
   
    Loop
End Sub

So weit, so gut, das funktioniert auch.
Nun möchte ich es in der untersten Instanz so einrichten, dass per Doppelklick in der treeView auf eine Bestellung, sich ein Formular öffnet mit allen Infos zu der Bestellung.

Ich habe aber keinen blasen schimmer, wie ich das angehen soll :D