AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Kleines Tool: SQL - TableToClass

Kleines Tool: SQL - TableToClass

Ein Thema von Hobbycoder · begonnen am 11. Sep 2018 · letzter Beitrag vom 15. Sep 2018
Antwort Antwort
Seite 4 von 5   « Erste     234 5   
Hobbycoder
Registriert seit: 22. Feb 2017
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.
Miniaturansicht angehängter Grafiken
tabletoclass2.jpg  
Angehängte Dateien
Dateityp: zip TableToClass.zip (3,29 MB, 12x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (24. Sep 2018 um 09:28 Uhr)
 
Hobbycoder
 
#31
  Alt 14. Sep 2018, 14:42
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
---------------------------
Bei was passiert das? Ich wüsste nicht, dass ich irgendwo eine solche Datei erstellen würde. Jedenfalls nicht bewusst. Könnte höchstens sein, dass eine von den UniDAC-Kompoenten das möchte. Gleich mal schauen.
  Mit Zitat antworten Zitat
API
 
#32
  Alt 14. Sep 2018, 14:42
..mal versucht manuell eine Datei in C:\ anzulegen?
Das geht natürlich (bei mir auch) nicht.

Eigentlich wollte ich damit sagen, dass C:\ nicht der optimale Ort ist, um Logdateien zu erstellen.7
  Mit Zitat antworten Zitat
Hobbycoder
 
#33
  Alt 14. Sep 2018, 14:45
Bei mir macht er das nicht. Woher stammt die Ausgabe, die du zitiert hast?
  Mit Zitat antworten Zitat
API
 
#34
  Alt 14. Sep 2018, 14:51
Bei mir macht er das nicht. Woher stammt die Ausgabe, die du zitiert hast?

Die Meldung erscheint, wenn ich auf [Klassen für alle Tabellen erzeugen] klicke.
  Mit Zitat antworten Zitat
Hobbycoder
 
#35
  Alt 14. Sep 2018, 14:52
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.

Geändert von Hobbycoder (14. Sep 2018 um 14:56 Uhr)
  Mit Zitat antworten Zitat
API
 
#36
  Alt 14. Sep 2018, 14:58
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)
  Mit Zitat antworten Zitat
Hobbycoder
 
#37
  Alt 14. Sep 2018, 15:03
Danke. Werd ich so machen.
  Mit Zitat antworten Zitat
Hobbycoder
 
#38
  Alt 14. Sep 2018, 18:48
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.
  Mit Zitat antworten Zitat
jobo

 
Delphi 2010 Enterprise
 
#39
  Alt 15. Sep 2018, 08:55
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;

Geändert von jobo (15. Sep 2018 um 09:45 Uhr)
  Mit Zitat antworten Zitat
jobo

 
Delphi 2010 Enterprise
 
#40
  Alt 15. Sep 2018, 11:36
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, ..
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf