Google
 
Diesen Blog abonnieren

Beliebte Posts

Dienstag, 26. Juni 2007

TreeView Element in Access für VBA Programmierer

Will man in einer Datenbank grosse Datenmengen strukturiert darstellen, so eignet sich das TreeView Element sehr gut. TreeView ist ein Active X Control, das seit Access 2003 mitgeliefert wird. Leider ist die Handhabung recht komplex. Natürlich gibt auch hier die Microsoft Seite Auskunft. Das Beispiel bezieht sich aber auf die englische Version. Ausserdem wurde der Artikel von Microsoft automatisch auf Deutsch übersetzt,was zu abenteurelichen Formulierungen führt.Ich habe die Prozeduren so angepasst, dass sie auf die Deutsche Nordwind Version passen. Die Anleitung ist stark gekürzt. Der gesamte Artikel befindet sich hier

Verwenden von DAO
1. Starten Sie Access und öffnen Sie die Beispieldatenbank Nordwind.mdb
2. Erstellen Sie ein neues Formular, das nicht auf einer Tabelle oder Abfrage basiert, in der Entwurfsansicht
3. Klicken Sie in dem Menü Einfügen auf ActiveX-Steuerelement.
4. Wählen Sie in dem Dialogfeld ActiveX-Steuerelement einfügenMicrosoft TreeView Control, version 6.0 aus, und klicken Sie dann auf OK.
5. Legen Sie die folgenden Eigenschaften des TreeView Steuerelements fest:

Name: axTreeView
Width: 3"
Height: 2"


6. Legen Sie die OnLoad-Eigenschaft des Formulars auf der folgenden Ereignisprozedur fest:

Private Sub cmdOpenForm_Click()
Dim CurNode As Object
Dim strWhere As String
Set CurNode = Me!axTreeView.SelectedItem
On Error GoTo cmdOpenForm_Error

' Evaluate the Key value of the selected node.
Select Case Len(CurNode.Key)
' All CustomerID keys are 5 characters long.
Case 5 ' CustomerID keys are of the form ALFKI
strWhere = "[Kunden-Nr] = '" & CurNode.Key & "'"
DoCmd.OpenForm "Kunden", , , strWhere
' All OrderID keys are 6 characters long.
Case 6 ' OrderID keys are of the form o12345
strWhere = "[Bestell-Nr] = " & Mid(CurNode.Key, 2)
DoCmd.OpenForm "Bestellungen", , , strWhere
' Anything else must be an Order Detail record.
Case Is > 6 ' OrderID keys are of the form o12345p12
' Extract the ProductID from the node key to use in the
' Where condition when you open the Products form.
Dim i As Integer
i = InStr(CurNode.Key, "p")
strWhere = "[Artikel-Nr] = " & Mid(CurNode.Key, i + 1)
DoCmd.OpenForm "Produkte", , , strWhere
End Select
Exit Sub

cmdOpenForm_Error:
Select Case Err
' If error is because nothing is selected in TreeView.
Case 91
MsgBox "Please select an item in the TreeView control."
Case Else
MsgBox "Error: " & Err.Number & vbCr & Err.Description
End Select
Exit Sub

End Sub


7. Speichern Sie das Formular als 'frmCustList' und wechseln Sie zu Formularansicht. Doppelklicken Sie auf den Name eines Debitors, um eine Ebene anzuzeigen, und die Auftragnummern und die Daten für den Kunden anzuzeigen. Doppelklicken Sie auf eine Auftragnummer, um den Zahlen- des einzelnen Artikels in dem Auftrag und den VK-Produktpreis des einzelnen Artikels in dem Auftrag anzuzeigen.

Wie Verknüpfen eines TreeView Node mit einem Formular der Datenbank
Hinweis: dieser Abschnitt gilt (.mdb) nur für Access-Datenbanken.

Jede Ebene in dem Steuerdatenelement Gliederung verfügt über eine Eigenschaft Formularname, über die Sie so einstellen können, ein bestimmtes Formular mit einer Ebene in dem Steuerelement zu verbinden. Zu dem Verweisen auf den gegenwärtig ausgewählten Knoten in dem Element können Sie das NodeClick-Ereignis in dem Steuer verwenden und das Steuer können Sie die Schlüssel Eigenschaft des Knoten für die Bedingung Wo der Open Formmethode anschließend TreeView verwenden, um ein Formular zu dem korrekten Datensatz zu öffnen. Beispiel:

Private Sub axTreeView_NodeClick(ByVal Node As Object)

DoCmd.OpenForm "Customers", , , "[CustomerID] = '" & Node.Key & "'"

End Sub


Darüber hinaus können Sie zu einer Schaltfläche dieselbe Funktionalität in Ihrem Formular hinzufügen, wie das folgende Beispiel veranschaulicht.

Dieses Beispiel baut auf dem Formular auf, das Sie zuvor erstellten. Es verwendet die Länge des Schlüssel Werts für den ausgewählten Knoten, um zu ermitteln, das Formular Kunde, Bestellung oder Artikel zu öffnen, und analysiert den Schlüssel Wert, um das Customers, Reihenfolge oder Product ID festzulegen.
1. Starten Sie Access, und öffnen Sie beide Beispieldatenbank Nordwind.mdb.
2. Öffnen Sie das "FrmCustList" Formular in Entwurfsansicht.
3. Fügen Sie dem Formular ein Befehlsschaltfläche hinzu, und legen Sie danach die folgenden Eigenschaften fest:

Name: cmdOpenForm
Caption: View Details
OnClick: [Event Procedure]



4. Fügen Sie folgende als die OnClick-Ereignisprozedur des Befehlsschaltfläche ein:

Private Sub cmdOpenForm_Click()
Dim CurNode As Object
Dim strWhere As String
Set CurNode = Me!axTreeView.SelectedItem
On Error GoTo cmdOpenForm_Error

' Evaluate the Key value of the selected node.
Select Case Len(CurNode.Key)
' All CustomerID keys are 5 characters long.
Case 5 ' CustomerID keys are of the form ALFKI
strWhere = "[Kunden-Nr] = '" & CurNode.Key & "'"
DoCmd.OpenForm "Kunden", , , strWhere
' All OrderID keys are 6 characters long.
Case 6 ' OrderID keys are of the form o12345
strWhere = "[Bestell-Nr] = " & Mid(CurNode.Key, 2)
DoCmd.OpenForm "Bestellungen", , , strWhere
' Anything else must be an Order Detail record.
Case Is > 6 ' OrderID keys are of the form o12345p12
' Extract the ProductID from the node key to use in the
' Where condition when you open the Products form.
Dim i As Integer
i = InStr(CurNode.Key, "p")
strWhere = "[Artikel-Nr] = " & Mid(CurNode.Key, i + 1)
DoCmd.OpenForm "Produkte", , , strWhere
End Select
Exit Sub


5. Speichern Sie das Formular, und wechseln Sie dann zu Formularansicht. Wählen Sie jeden Knoten auf jeder TreeView Steuerebene aus, und klicken Sie dann auf die Schaltfläche Details anzeigen, um das verknüpfte Formular zu dem korrekten Datensatz zu öffnen.
Wenn ein bearbeitbares Feld in dem Formular Daten enthält, das geöffnet worden ist, das in Ihrem Steuerelement TreeView angezeigt wird, können Sie Code zu dem Aktualisieren des Texts -Eigenschaft des ausgewählten TreeView Knoten, wenn Daten in dem Formular geändert wird, verwenden. Wenn Ihr TreeView Steuerelement das Firmenname-Felder aus der Customers-Tabelle anzeigt, können Sie Code dem After-Update-Ereignis des Firmenname-Felds in dem Formular des Customers beispielsweise hinzufügen, um Ihren TreeView Knoten zu aktualisieren:

Forms![frmCustList]![axTreeView].SelectedItem.Text = Forms![Customers]![Company Name]


Diese Methode ist schneller als das Deaktivieren und das Refill des gesamten TreeView Steuerelements, wenn sich nur ein Datensatz geändert hat.

Wenn ein Benutzer ein Feld ändern kann, das Sie in der Eigenschaft Schlüssel eines Knoten in Ihren Steuerelementen TreeView verwenden, müssen Sie die Schlüssel Eigenschaft außerdem aktualisieren. Sie müssen den übergeordneten Knoten nur aktualisieren und die Änderung wird automatisch an alle unterordneten Knoten weitergegeben:

Forms![frmCustList]![axTreeView].SelectedItem.Key = Forms![Customers]![CustomerID]

Hat alles geklappt, sieht das Ergebnis so aus:

Keine Kommentare: