![]() |
Kleines Tool: SQL - TableToClass
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich bin von Natur aus ein fauler Mensch (ob das auf alle Entwickler zutrifft kann und will ich nicht behaupten). Jedenfalls ging es mir auf den Keks ständig das Klassengerüst für meine Datenbanktabellen zu schreiben. Jedenfalls bei 102 Tabellen + Views schon echt Arbeit. Weil mir ja nun die DP und deren User wirklich viele gehen (nämlich ihre Zeit, um mir bei meinen Fragen und Problemen zu helfen), will ich mal was zurückgeben, sofern gewünscht. Nun, dann schreibe ich mir halt ein kleines Tool, dass mir zumindest mal das 'Grobe' abnimmt. Herausgekommen ist ein doch recht nützliches Werkzeug. Ich bin mir sicher, sowas gibt es schon. Trotzdem habe ich mich nicht auf die Suche gemacht, sondern einfach das ganze nach meinen Bedürfnissen umgesetzt. Sicherlich arbeitet jeder Entwickler etwas anders, so dass es nicht für alle 'brauchbar' ist. Wer aber sich schnell aus der Tabelle eines SQL-Servers eine Klasse erstellen will, der kann das nutzen. Es ist kein Allrounder, sondern wirklich nur ein ganz kleines Tool, was nichts anderes macht, als die Felder aus einer Tabelle lesen, die Datentypen zu assoziieren und das ganze in eine Delphi-Klasse umzusetzen. Nicht mehr und nicht weniger. Zusätzlich erstellt es gleich eine TObjectList und packt auch die SQL-Abfrage gleich mit hinein. Eben so, wie ich es immer mache. So dauert jetzt das Erstellen eine Klassen-Unit zu einer neuen Tabelle statt 5-10 Minuten nur noch 15 Sekunden. Für mich eine echte Erleichterung. Danach braucht man nur noch alles ein wenig nach seinen Bedürfnissen anpassen, dass zu löschen, was man nun nicht benötigt, und fertig. Wer will kann sich das ja mal anschauen oder auch gerne nutzen. Zur Zeit wird MySQL, MSSQL, Interbase/Firebird und ODBC unterstützt. Ich könnte aber noch andere DBMS aufnehmen, wenn der Bedarf besteht. Dann müsste ich es aber erst ein wenig umbauen. Und wie gesagt, ich bin mir bewusst, dass es solche Tools bestimmt schon gibt. Aber ich wollte weder was kaufen, noch mir irgendwelche Softwarepakete installieren, sondern das einfach mal selbst machen. Exe-Datei und Schreenshot im Anhang. Feedback (in freundlicher Form) durchaus erwünscht. |
AW: Kleines Tool: SQL-Table to Class
Liste der Anhänge anzeigen (Anzahl: 1)
Du könntest dir auch mal Marshmallow/Sping4D ansehen.
Dort ist auch ein entsprechendes Tool beinhaltet.
Delphi-Quellcode:
unit ORM.Model.Employee.CUSTOMER;
interface uses Spring.Persistence.Mapping.Attributes, Spring.Persistence.Core.Graphics; type [Entity] [Table('CUSTOMER', '')] TCUSTOMER = class private FCUST_NO: Integer; FCUSTOMER: string; FCONTACT_FIRST: string; FCONTACT_LAST: string; FPHONE_NO: string; FADDRESS_LINE1: string; FADDRESS_LINE2: string; FCITY: string; FSTATE_PROVINCE: string; FCOUNTRY: string; FPOSTAL_CODE: string; FON_HOLD: string; public [Column('CUST_NO',[cpRequired,cpPrimaryKey,cpNotNull],10,0)] property CUST_NO: Integer read FCUST_NO write FCUST_NO; [Column('CUSTOMER',[cpRequired,cpNotNull],25)] property CUSTOMER: string read FCUSTOMER write FCUSTOMER; [Column('CONTACT_FIRST',[],15)] property CONTACT_FIRST: string read FCONTACT_FIRST write FCONTACT_FIRST; [Column('CONTACT_LAST',[],20)] property CONTACT_LAST: string read FCONTACT_LAST write FCONTACT_LAST; [Column('PHONE_NO',[],20)] property PHONE_NO: string read FPHONE_NO write FPHONE_NO; [Column('ADDRESS_LINE1',[],30)] property ADDRESS_LINE1: string read FADDRESS_LINE1 write FADDRESS_LINE1; [Column('ADDRESS_LINE2',[],30)] property ADDRESS_LINE2: string read FADDRESS_LINE2 write FADDRESS_LINE2; [Column('CITY',[],25)] property CITY: string read FCITY write FCITY; [Column('STATE_PROVINCE',[],15)] property STATE_PROVINCE: string read FSTATE_PROVINCE write FSTATE_PROVINCE; [Column('COUNTRY',[],15)] property COUNTRY: string read FCOUNTRY write FCOUNTRY; [Column('POSTAL_CODE',[],12)] property POSTAL_CODE: string read FPOSTAL_CODE write FPOSTAL_CODE; [Column('ON_HOLD',[],1)] property ON_HOLD: string read FON_HOLD write FON_HOLD; end; implementation end. |
AW: Kleines Tool: SQL-Table to Class
Mach ich. Danke.
Aber ich schrieb ja Zitat:
|
AW: Kleines Tool: SQL-Table to Class
So, für alle, die es interessiert, ich habe noch ein paar kleine Verbesserungen vorgenommen:
- Kleine Fehler beseitigt - Eigene Connection und eigene Query-Klasse kann angegeben werden (sonst ist es wirklich nur für mich nutzbar) - Doppelklick auf die Feldliste zum Ändern des DatenTyps - AutoInc wird erkannt und nicht mehr in den Inserts oder Updates als Feld verwendet - Eine Sortierung zu jeder Property wird mit angelegt (Kann eingestellt werden) - Ein IndexOf zu jedem Property wird mit angelegt (kann eingestellt werden) - Weiterhin kann man für jede Feld dieses einzeln festlegen (Doppelklick auf Feld) Die neue Version liegt im Anhang des ersten Post. |
AW: Kleines Tool: SQL-Table to Class
Hab's mal probiert. Ich kann leider nur mysql auswählen.
Sowas hab ich dann mal aus einer (alten) xampp Installation gestartet, bekomme aber kein Connect. Es passiert nichts. Der Verbindungsdialog (Connection Manager) bleibt stehen. Phpmyadmin geht dagegen. Test Parameter: Port laut xampp Server localhost user root Schema verschiedene laut phpmyadmin probiert. xampp, mysql sind auch 32bit wie die Anwendung. Ja und jetzt wo ich nachschaue, mysql ist mariadb 10.1.26 Klick auf Abbrechen in Connection Manager bringt AV, die immer mehr werden. P.S.: Avast macht ziemlich Wind, aber kennt man ja schon. |
AW: Kleines Tool: SQL-Table to Class
Hätte das nur auf meiner Entwicklungsmaschine getestet ;-) war vielleicht etwas zu Voreilig.
Und jetzt wo du‘s sagst....ein bisschen Errorhandling im Connection-Manager wär auch nicht schlecht ;-) Ich werd das morgen mal auf einer Maschine Testen, die Jungfräulich ist.. ich könnte auch mal madExcept aktivieren. Dann kann man mit verpatztem.Errorhandling etwas mehr anfangen ;-) Danke für die Rückmeldung. Wenn ich‘s dann korrigiert habe, würdest du das nochmal Testen? |
AW: Kleines Tool: SQL-Table to Class
Erfahrungsgemäß sind es ja irgendwelche lokalen Konstanten die woanders nicht passen, feste Verzeichnisse usw.
Ach und was mir einfällt, ich war so frech, das direkt aus dem ZIP zu starten. Und noch schlimmer: altes Windows 7. Also wer weiß, was fehlt.. |
Dieses Thema wurde am "12. Sep 2018, 14:38 Uhr" von "mkinzler" aus dem Forum "Sonstige Werkzeuge" in das Forum "Software-Projekte der Mitglieder" verschoben.
|
AW: Kleines Tool: SQL-Table to Class
So jetzt läuft es!
Das ist ja schon recht umfangreich, was Du generierst! Ich hab mal ein Test auf phpmyadmin Schema laufen lassen. Sicher wäre es nun sinnvoll, die generierten Klassen zu testen. Dazu werde ich sobald nicht kommen :) @Conntection Manager Ich finde es gewöhnungsbedürftig, dass er nicht zu geht nach Verbindung (falls das so sein soll), sonst geht es nur über X. Trennen und Verbinden sind nicht richtig gekoppelt. Es geht scheinbar eine Verbindung mit mehreren DB. Fokus und Aktion passen dann nicht mehr. Default und Default alle habe ich nicht verstanden, Default produziert AV. Ich hab derzeit keinen Anwendungsfall, aber ich denke, es kann einem viel Arbeit abnehmen. Frag mich gerade, ob sowas nicht in die IDE gehört. (Oder ist es schon drin, außer auf den billigen Plätzen?) |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Zitat:
Zwar müssen die speziellen Anpassungen an mein Projekt trotzdem noch händisch erfolgen, aber ich merke jetzt schon das ich enorm Zeit einspare. Zitat:
Zitat:
Um z.B. eine Funktion zu erstellen, die eine bestehende Klasse um weiter DB-Felder zu erweitern, müsste ich die Unit parsen um manuelle Veränderungen nicht zu eliminieren. Das würde mir aber zu aufwendig. Dafür kann man ja mit dem Tool die Tabelle auslesen, und die benötigten Teile händisch per Copy&Paste rüber kopieren. Was vielleicht noch Sinn machen würde, wäre einen Interface-Teil zu integrieren. Aber dazu müsste ich mich erst mal mit Interfaces befassen, damit ich das machen könnte. Ansonsten habe ich eine neue Version hochgeladen. Ich habe sie um ein paar nette Features erweitert. Unter Anderem in der Hinsicht, dass das Tool sich jetzt die Einstellungen zu jeder Tabelle einzeln wegschreibt (INI-Datei im gleichen Verzeichnis wie die EXE), und automatisch wieder lädt, sobald diese Tabelle wieder angeklickt wird. Und ein paar andere Kleinigkeiten. |
AW: Kleines Tool: SQL-Table to Class
Habe da jetzt nichts sonderliches mit gemacht wie auch bei der Anzeige der Forms?
Da musst du aber noch einiges dran tun ein Invalidate könnte unter umständen wunder wirken. Frage mich gerade was wollen mir die Checkboxen denn so mitteilen. ;) gruss |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Kannst ja noch mal schauen. |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Was eine Integration bzw. iterativen Einsatz angeht, würde eine Source Versionierung mit Div Funktion ja schon viel weiter helfen oder? Also gar keine Änderung am Tool selbst. Das Tool spuckt neu, geänderte (fehlende) Attribute bzw. zugehörigen Code aus und man übernimmt, was man braucht. Bei starker Nachberarbeitung jenseits des DB Modells ist das aber vielleicht auch grenzwertig. Ggf. kann man das auch noch etwas abfedern, wenn man mit Include arbeitet, also include, das mitgeneriert wird (auf Wunsch). Dann hat man am ehesten einen statischen/generierten Teil und dahinter, dazwischen noch eigenen Kram. |
AW: Kleines Tool: SQL-Table to Class
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke soweit ist das aber schon ganz gut.
Und weil's doch noch netter aussieht, habe ich es noch ein bisschen angehübscht. Wie gesagt, wenn das Interesse besteht, auch andere Datenbanken aufzunehmen, müsst ihr mir das sagen. |
AW: Kleines Tool: SQL-Table to Class
Zitat:
gruss |
AW: Kleines Tool: SQL-Table to Class
Zitat:
|
AW: Kleines Tool: SQL-Table to Class
Welche Datenbankkomponenten nutzt Du?
Können die auch mit ADO umgehen, dann könnte man nach 'nem Connctionstring fragen und damit funktionieren dann alle Datenbanken, auf die man über ADO zugreifen kann. Um die Einrichtung der passenden Verbindung, Treiber ... muss sich der Nutzer dann halt selbst kümmern. Ansonsten wäre eine Unterstützung von FireBird nett :-) |
AW: Kleines Tool: SQL-Table to Class
Ich habe jetzt mal den MSSQL, ODBC und Firebird mit reingenommen. Ist aber ungetestet. MSSQL bzw. ODBC kann ich selbst auch testen. Aber Firebird habe ich nicht im Einsatz.
@Delphi.Narium: wär nett, wenn du das mal machen könntest. EDIT: Hab's noch mal neu hochgeladen. Es fehlte noch ein paar Units in den USES |
AW: Kleines Tool: SQL-Table to Class
Grad mal ein bisschen mit MSSQL rumprobiert. Connecten geht...aber das abrufen von Tabelleninformation noch nicht. Da muss ich ein bisschen was anpassen. Aber das sollte mit mäßigem Aufwand machbar sein.
Wie's bei ODBC oder gar Firebird aussieht kann ich noch nicht sagen. |
AW: Kleines Tool: SQL-Table to Class
Links hast du schön mit Align gearbeitet warum rechts nicht auch?
Man sieht ja die hälfte der Controls nicht mehr wenn das Fenster in der größe verändert wird. gruss |
AW: Kleines Tool: SQL-Table to Class
Ich hatte das Control getauscht und dann vergessen die Aligns zu setzen. Sollte jetzt gehen.
Und ich habe ein paar Anpassungen für MSSQL-Server vorgenommen. Ich hoffe, dass er jetzt alle Feldtypen richtig erkennt. |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Wenn man 'nen Doppelclick auf 'nen Tabellenamen macht, gibt's 'ne Fehlermeldung:
Code:
FireBird kennt den Befehl Show nicht. Wenn Du die Infos mit Show ausliest, schmeiß FireBird einfach wieder raus, dann geht das (erstmal) nicht.
Dynamic SQL Error
SQL error code = -104 Token unknown - line 1, column 1 Show. ODBC: Was für eine Eingabe wird bei "Datenbank/Schema" erwartet? Weder ein Datenquellenname aus der ODBC-Verwaltung noch ein Connectionstring aus 'ner anderen Anwendung funktionieren. Fehlermeldung in beiden Fällen:
Code:
Es ist ein Fehler beim Verbindungsaufbau aufgetreten
Errorcode: -1 ErrorMessage: -1: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben |
AW: Kleines Tool: SQL-Table to Class
Welche Zugriffskomponenten? Möglicherweise bieten diese ja eine Abstraktion für die Ermittlung der Metadaten an.
|
AW: Kleines Tool: SQL-Table to Class
Zitat:
Viele spass noch damit. gruss |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Das hatte ich auch erst im Sinn. Entstanden ist das eigentlich aus einer ganz anderen Problematik, wo es mir darum ging die Defaultwerte von Feldern auszulesen. Evtl. macht es sinn, das noch mal aufzugreifen ;-) Zitat:
|
AW: Kleines Tool: SQL-Table to Class
Liste der Anhänge anzeigen (Anzahl: 1)
TUniMetaData
|
AW: Kleines Tool: SQL-Table to Class
Danke für den Hinweis. Das schaue ich mir mal an.
|
AW: Kleines Tool: SQL-Table to Class
So, ich habe jetzt ein bisschen weiter daran gearbeitet.
Danke an mkinzler für den Tipp. Ich habe jetzt das ganze daraufhin umgestellt. Jetzt können ausgelesen werden: MySQL, MSSQL, Interbase/Firebird, ODBC. Bei MSSQL versuche ich die im Netzwerk verfügbaren SQL-Server zu finden, diese werden dann in der Combobox Server hinterlegt. Gleiches gilt für ODBC-DSN, sowohl Benutzer-DSN als auch System-DSN. Diese werden aus der Registry gelesen. Ich hoffe mit dem Zugriff auf HKLM (ReadOnly) gibt es keine Probleme. Wer mag kann das ja mal austesten. Auch bei der Zuordnung der Datentype, war und ist das nicht so einfach. Während MySQL da sehr kommunikativ ist, bekomme ich von MSSQL und Firebird nur einen Integerwert, der den verwendeten Datentyp repräsentiert. Diesen muss ich umschlüsseln, um so auf den richtigen Datentyp zu kommen. Auch hier können noch Fehler drin sein. Ich werde weiter an dem Tool arbeiten. Wenn noch andere Wünsche existieren, immer raus damit. |
AW: Kleines Tool: SQL-Table to Class
Es möchte Changelog.pas auf dem C:\ Rootfolder erstellen?
--------------------------- Table To Class - Test - 0.0.0.0 --------------------------- Datei "C:\Changelog.pas" kann nicht erstellt werden. Access is denied. --------------------------- OK --------------------------- |
AW: Kleines Tool: SQL-Table to Class
Zitat:
Grüße Klaus |
AW: Kleines Tool: SQL-Table to Class
Zitat:
|
AW: Kleines Tool: SQL-Table to Class
Zitat:
Eigentlich wollte ich damit sagen, dass C:\ nicht der optimale Ort ist, um Logdateien zu erstellen.7 |
AW: Kleines Tool: SQL-Table to Class
Bei mir macht er das nicht. Woher stammt die Ausgabe, die du zitiert hast?
|
AW: Kleines Tool: SQL-Table to Class
Zitat:
Die Meldung erscheint, wenn ich auf [Klassen für alle Tabellen erzeugen] klicke. |
AW: Kleines Tool: SQL-Table to Class
Okay.
Dann hast du in den "weiteren Einstellungen" keine Ausgabepfad hinterlegt. Mach da mal einen rein, dann sollte das wohl passen. Der, der in der Hauptansicht unten steht, gilt nur wenn man nur die eine Tabelle speichern möchte. Wenn man "Klasse für alle Tabellen erzeugen" anklickt nimmt er immer den Pfad aus den Voreinstellungen. Das ist so, weil ich das irgendwann mal so geändert habe, dass er sich die Einstellungen für jede Tabelle einzeln merken können soll. Damit bin ich auch noch nicht glücklich. Vielleicht sollte ich dort eine Pfadauswahl einblenden, oder drauf hinweisen, dass noch kein Pfad eingestellt ist. |
AW: Kleines Tool: SQL-Table to Class
Noch etwas:
Wenn ich im "Connection-Manager", im Dialog "Verbindung bearbeiten" als DB-System "MS SQL-Server" auswähle, reagiert die Anwendung einige Sekunden nicht mehr. Es werden bei mir auch keine Server gefunden. Die Suche nach Servern sollte erst dann ausgeführt werden, wenn auf den "Pfeil-nach-Unten" im Server/IP_Adresse Dropdown geklickt wird. Somit kann man eine IP Adresse manuell eingeben, ohne dass jedesmal dieser Suchvorgang gestartet wird (so funktioniert es zumindest auch im Excel Data Connection Wizard) |
AW: Kleines Tool: SQL-Table to Class
Danke. Werd ich so machen.
|
AW: Kleines Tool: SQL-Table to Class
Hab noch mal eine neue Version hochgeladen.
War noch ein kleiner Fehler in der INI-Datei. Ich habe noch alle o.g. Fehler/Verbesserungen umgesetzt, und ein paar Kleinigkeiten gemacht. |
AW: Kleines Tool: SQL-Table to Class
Firbird types von alterton.info
Code:
SELECT r.rdb$field_name AS field_name,
r.rdb$description AS field_description, r.rdb$default_value AS field_default_value, r.rdb$null_flag AS field_not_null_constraint, f.rdb$field_length AS field_length, f.rdb$field_precision AS field_precision, f.rdb$field_scale AS field_scale, CASE f.rdb$field_type WHEN 261 THEN 'BLOB' WHEN 14 THEN 'CHAR' WHEN 40 THEN 'CSTRING' WHEN 11 THEN 'D_FLOAT' WHEN 27 THEN 'DOUBLE' WHEN 10 THEN 'FLOAT' WHEN 16 THEN 'INT64' WHEN 8 THEN 'INTEGER' WHEN 9 THEN 'QUAD' WHEN 7 THEN 'SMALLINT' WHEN 12 THEN 'DATE' WHEN 13 THEN 'TIME' WHEN 35 THEN 'TIMESTAMP' WHEN 37 THEN 'VARCHAR' ELSE 'UNKNOWN' END AS field_type, f.rdb$field_sub_type AS field_subtype, coll.rdb$collation_name AS field_collation, cset.rdb$character_set_name AS field_charset FROM rdb$relation_fields r LEFT JOIN rdb$fields f ON r.rdb$field_source = f.rdb$field_name LEFT JOIN rdb$collations coll ON f.rdb$collation_id = coll.rdb$collation_id LEFT JOIN rdb$character_sets cset ON f.rdb$character_set_id = cset.rdb$character_set_id WHERE r.rdb$relation_name = 'TEST2' -- table name ORDER BY r.rdb$field_position; |
AW: Kleines Tool: SQL-Table to Class
Ich würde noch Postgresql gut finden, auch wenn ich das Tool absehbar nicht brauche.
@sql field types: Wieso nutzt Du die Metainfo Funktion nicht, auf die mkinzler hingewiesen hat? Außerdem müsste doch ein simples "select * from <quelle> where 1=0" reichen, damit Delphi selbst die Feldtypen an die Felder bindet? Dort wären sie dann abgreifbar. Wahrscheinlich gibt es nur bei Float Typen aus der DB Interpretationsspielraum bzw. müsste der Anwender entscheiden können, was was werden soll, money, double, bcd, .. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz