Schlagwort: vba

VB MSAccess Code Logo 64x64

VBA Access: Klasse mit Treeview um Daten auszuwählen bzw. zu bearbeiten

Beschreibung:

Immer wieder benötige ich in meinen Access Datenbanken ein Treeview. Und jedes Mal muss ich erneut herausfinden wie es funktioniert. Und jedes Mal ärgere ich mich darüber, dass man das Treeview nicht einfach werden kann. Also was machen? Eine Klasse, das wäre nett!
Als ein bisschen darüber nachgedacht und losgelegt. Und herausgekommen ist die Klasse die ich hier euch vorstellen möchte.

TreeView Bearbeiten Beispiel
TreeView Bearbeiten Beispiel

Ich Garantiere keine Einwandfreie Funktion der Klasse. Denn es gibt dort zurzeit noch keine Fehlerbehandlung. Und sicherlich habe ich nicht alles berücksichtigt. Aber wer Fehler findet, Anregungen hat, kann sie gerne als Kommentar hier hinterlassen. Ich werde sie lesen und dann versuchen aus umzusetzen. Das kann aber auch mal 1 – 4 Wochen dauern. Ich schaue nicht jeden Tag auf meiner Webseite vorbei, denn als erstes kommt die Familie, dann die Arbeit, dann die Freunde, dann der Verein und dann kommt diese Webseite mit vielen anderen Projekten.

Update Informationen

20.10.2017 Der Rückgabewert muss nicht gleich dem Feld dbFieldKey sein. Es kann ein anderes Feld zurückgegeben werden, welches zum Beispiel UID enthält.

Also, was kann die Klasse bis jetzt?

Daten einer Tabelle im Treeview anzeigen. Dazu muss in der Tabelle jedes Element eine ID haben. Elemente die einem anderen Element untergeordnet werden, müssen ein Feld besitzen, wo die Vater ID gespeichert wird.

Diese 4 Informationen wie Tabellenname, ID, Vater ID und Feldnamen mit den Anzeigename reichen aus um das Treeview zu bearbeiten bzw. Daten auszuwählen. Die Tabelle samt Daten aus meiner Beispieldatenbank habe ich hier mal veröffentlicht.

CLIENT_ID ABTEILUNG_ID ABTEILUNG_NAME ABTEILUNG_ID_PARENT
1 1 Verkauf 0
1 2 Direktverkauf 1
1 3 Webshop 1
1 4 Großhandel 1
1 5 Produktion 0
1 6 Finanzen 0
1 7 Buchhaltung 6
1 8 Controlling 6
2 1 Fleisch 0
2 2 Milch 0
2 3 Mehl 0
2 4 Wurst 1
2 5 Salami 4
2 6 Schinken 4
2 7 Käse 2
2 8 Yogurt 2
2 9 Quark 2
2 10 Brot 3
2 11 Kuchen 3

Auch gibt es über die Funktion AddWhere die Möglichkeit die Daten zu selektieren. Damit wird einem die Möglichkeit gegeben Werte z.B. Mandantenfähig zu machen. Siehe in der Beispieldatenbank am Ende dieser Seite!

Um neue Werte hinzuzufügen, müssen ID Felder per Autowert, SQL Abfrage oder MAX(ID)+1 ermittelt werden. Das kann man individuell einstellen. Ich selber bevorzuge keine Autowerte, sondern nutze MAX(ID) + 1 um neue IDs zu ermitteln.

Nach einiger Recherche kann jetzt auch innerhalb des Treeview Einträge mittels Drag & Drop verschoben werden. Natürlich nur im Editiermodus!
Ganz wichtig. Jede Änderung der Daten, sei es löschen, editieren oder hinzufügen wird direkt in die Datenbank geschrieben!

Damit das Treeview Control auch funktioniert, muss der Verweis auf die MSCOMCTL.OCX (Microsoft Windows Common Controls 6.0) gesetzt werden.

Microsoft Access Verweis auf Microsoft Windows Common Controls 6.0
Microsoft Access Verweis auf Microsoft Windows Common Controls 6.0

Hier nun mein Test Routine mit der ich das ganze getestet habe!

Beispiel:

Parameter:

Parametername Parameterwert
Formname = String Optional:Name des Formulars. Default = „TreeView“
Treename = String Optional:Eingeblendeter Name des Trees. Das ist der Master Eintrag, der nicht vom User bearbeitet bzw. geändert werden kann.. Default = „TreeView“
dbTable = String Tabllenname / Abfrage aus dem die Einträge ausgelesen werden
dbFieldKey = String ID Feld mit der Eintrag eindeutigen identifiziert werden kann. Dieser Wert muss eine Zahl und vom Typ Autowert sein.
dbFieldViewName = String Der Inhalt dieses Feldes wird im Treeview als Inhalt verwendet.
dbParentKey = String Verweis auf ein Vaterelement. Ist Wert = 0 oder Null ist es ein Masterelement
dbFieldReturn = String Optional: Name des Feldes, welches den Rückgabewert enthält. Zum Beispiel für eine UID die automatisch vergeben wird.
CalcIDType = 1 .. 3 Optional: Bestimmt wie ein neuer Wert für das Feld dbFieldKey ermittelt wird.
1 = Autowert (Default)
2 = Max(dbFieldKey) + 1
3 = SQL Statement
CalcIDSQL Wenn in CalcIDType = 3 dann wird hier ein SQL Befehlt erwartet, in dem als Ergebnis das Feld dbFieldKey die neue ID ermittelt.
dbKZ = String Optional:Ein Kürzel, das zum Generieren der Temporären Keys fürs Treeview benötigt wird. Default = „KEY“
FormType = 1 .. 2 Beinhaltet den Wert 1 oder 2. 1 = Werte bearbeiten, 2 = Wert auswählen
AddWhere = Feldname, Wert, Feldtyp Ermöglicht Filter für die anzuzeigenden Werte anzugeben. Wie z.B. einen Mandanten, oder … .
Der Feldname beinhaltet das Feld aus Tabelle dbTable welcher den Wert Wert vom Typ Feldtyp haben soll. Als Feldtyp gibt es drei Werte:
1 = Text
2 = Nummer
3 = Datum/Uhrzeit

Es können beliebige Felder angefügt werden. Bis der Speicher des Computer überquillt.
GetWhere gibt AddWhere als Teil eines SQL Strings zurück
OpenTreeView Diese Funktion öffnet das Formular und lädt die Daten ins Treeview.
IsActive Diese Funktion prüft ob das Fenster noch geöffnet ist und gibt True oder False zurück.

Code:

Download:

Download Button MS SQL 64x64Klick für Download

VB MSAccess Code Logo 64x64

VBA Access: Verzeichnis auswählen (FileDialog)

Beschreibung:

Immer wieder benötigt und immer wieder vergessen! So bei mir, deshalb nun hier! Ein Verzeichnis in VBA auswählen. Es ist ja zum Glück mittlerweile recht Einfach ein Verzeichnis auszuwählen. Auch lässt sich dieses Beispiel recht einfach auf Dateiauswahl, bzw. Dateien Auswahl umwandeln. (mehr …)

VB MSAccess Code Logo 64x64

VBA Access: Alle Controlnamen eines Formulars ermitteln

Beschreibung:

Für einen Assistenten brauchte ich eine Funktion, dir mir die Namen, aller Controls eines Formulars ausgibt, um nachher daraus einen generierten Code zu erstellen. Damit die Funktion auch für andere Dinge eingesetzt werden kann, habe ich sie um einige Optional Parameter erweitert.
(mehr …)

VB MSAccess Code Logo 64x64

VBA Access: Prüfen ob ein Verzeichnis existiert, wenn nicht anlegen!

Beschreibung:

Werden öfters Dateien gespeichert und die Verzeichnisse sind unterschiedlich oder teilweise nicht vorhanden, kommt man mit dem Befehl MKDIR bei Netzwerkfreigaben nicht unbedingt weiter (UNC Pfad). Daher kann man die nachfolgende Funktion benutzen. Diese legt die Verzeichnisse bei nicht vorhanden sein an. (mehr …)