Eine Datenbank mit ~40 Tabellen und einer enstprechenden Menge an Abfragen kann einen Entwickler bei Umstrukturierungen den Schweiß auf die Stirn treiben. Das größte Problem ist hierbei, dass kein Editor oder Compiler zur Entwicklungszeit prüfen kann, ob ein Zugriff auf z.B. ein Feld korrekt ist. Der erste Schritt war also in einem Modul Konstanten zu definieren: Public Const TDEF_LF_Components_lngID As String = "lngID" Vom Ansatz her gut, beinhaltet aber eigentlich genau das gleiche Problem, wie bereits oben beschrieben. Ich habe zwar nun Konstanten und bin guter Hoffnung, dass es so mit der entsprechenden Tabellendefinition passt. Kann aber natürlich auch nicht sicher sein. Der einzige Vorteil ist hier, dass ich den Feldnamen nur an einer Stelle ändern muss! Nach dem ich einige Zeit nach einem Tool für ORM (Object Relational Mapping) für VB6 gesucht hatte und keines fand, kam ich auf die Idee ein kleines Hilfsprogramm zu schreiben, welches mir Konstanten-Definitionen aus Tabellen- und Query-Definitionen generiert. Ich möchte nun meinen nicht perfekten und sicherlich nicht sehr gut kommentierten Quellcode zur Verfügung stellen, da ich denke, dass dieser hilfreich ist. Zum Einen als Anwendung um eben Konstanten-Definitionen zu generieren zum Anderen um einfach mal zu schauen, wie ein anderer Entwickler codiert. Folgendes ist bei der Definition der Tabellen und Querries zu beachten (und kann im Quellcode natürlich geändert werden):
Konstanten für Parameter-Querries werden ebenfalls generiert. Außerdem verwende ich Tabellen, welche Typen darstellen und bei der Generierung in Enums umgewandelt werden. Bsp. Tabellenname: tblType, Beschreibung enthält "TYPETABLE" Datensätze: ID Name ----------- 1 Test1 2 Test2 Ergebnis des Generators (Tabellendefinition (oben) und Typdefinition): ' ******************************************************************************* Public Const TDEF_Type As String = "tblType" Public Const TDEF_Type_ID As String = "ID" Public Const TDEF_Type_Name As String = "Name" Public Enum gt_Type Test1 = 1 Test2 = 2 End Enum Damit der Generator weiß, dass es sich um eine Tabelle handelt, welche als Enum transformiert werden soll, muss die Tabellendefinition folgendermaßen erfolgen (siehe Function isTypeTable, Klasse CDbTranformer):
Das Prüfen der Strings ist nicht case sensitiv. Der Generator erzeugt ein Modul für Tabellen (inkl. Enums) modDbTblDefs.bas und ein Modul für Querries modDbQryDefs.bas. Es erfolgt kein Check, ob ein generierter Enum mit z.B. einem reservierten VB Namen kollidiert. Der Compiler wird's berichten ... Im Formular wird in der DirListBox das Zielverzeichnis ausgewählt und per Open-Button die Datenbank. In der Listbox wird die Ausgabe raus geschrieben. Die erzeugten Module fügt man dann der Anwendung hinzu und kann dann die entsprechenden Konstanten verwenden (Bsp.): Dim rs As ADODB.Recordset Dim cmd As ADODB.Command Set cmd = New ADODB.Command Set cmd.ActiveConnection = CONN cmd.CommandType = adCmdText cmd.CommandText = "SELECT " & TDEF_LF_Composition_lngID & " FROM " & _ TDEF_LF_Composition & " WHERE " & _ TDEF_LF_Composition_lngComponentID & " = " & rCmp.Id Set rs = cmd.Execute ' ... Hier noch ein Beispiel für eine Query mit Parameter: Dim rs As ADODB.Recordset Dim cmd As ADODB.Command Set cmd = New ADODB.Command With cmd Set .ActiveConnection = CONN .CommandType = adCmdStoredProc .CommandText = QDEF_LF_Components Set p = cmd.CreateParameter(QDEF_LF_Components_P_parProjectID, adInteger, adParamInput, 0, 93) .Parameters.Append p Set p = cmd.CreateParameter(QDEF_LF_Components_P_parProjectName, , adParamInput, 0, "MeinProjekt") .Parameters.Append p End With Set rs = cmd.Execute ' ... Da ich einige Hilfs-DLLs (ActiveX) verwende und diese nicht mitgeben möchte, habe ich die relevanten Teile in Module und Klassen kopiert. Das sieht vielleicht ein wenig wüst aus - aus zeitlichen Gründen verschönerte ich dieses jedoch nicht. Viel Spaß und Fragen dann bitte im Forum! Dieser Tipp wurde bereits 16.290 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |