Gibt es ein Werkzeug, das alle SQL-Befehlsfolgen aus Delphi-Formulardateien extrahieren kann?

9

Zur Dokumentation und weiteren Überprüfung würde ich gerne in allen DFM-Dateien in vielen Projekten einen 'strings extrahieren' ausführen, um alle SQL-Anweisungen zu finden. Gibt es Kommandozeilen-Tools, die das können? Die DFM-Dateien sind alle im Textformat.

    
mjn 25.03.2010, 06:26
quelle

4 Antworten

1

Hier ist ein DFM Parser von Felix Colibri

DFM-Parser

Hier ist ein interessantes Werkzeug für solche Sachen.

YACC

    
Orhan Cinar 26.03.2010, 09:46
quelle
3

Abhängig von der Art der Abfragekomponente, die Sie verwenden, würde ich mir vorstellen, dass Sie dies mit einer Befehlszeile (oder einem anderen Textsuchwerkzeug) in Ihren Projektordnern tun könnten. Im DFM werden Sie für normale TQuery-ähnliche Komponenten etwas nach dem Motto

haben %Vor%

oder möglicherweise (Ich habe kein Delphi zur Hand, um zu überprüfen, die Freuden, zu Hause zu sein!)

%Vor%

Da sich diese Strings über mehrere "Zeilen" im DFM verteilen können und da es verschiedene Varianten gibt, nach denen Sie suchen sollten, schreibe ich persönlich ein kleines Stück Delphi.

p>

Die Grundidee wäre; Durchsuchen Sie alle Dateien / Unterordner in einem bestimmten Verzeichnis, suchen Sie nach allen DFM-Dateien und lesen Sie sie für jede in eine TStringList, suchen Sie nach den gewünschten TQuery (etc) SQL-Eigenschaften und schreiben Sie die Ergebnisse (Komponentenname, Dateiname, tatsächliche SQL-Zeichenfolge) in eine Ergebnisdatei. Wirklich sollte nicht mehr als höchstens eine Stunde oder zwei Arbeit sein.

Wenn Sie Prozeduren gespeichert haben, die Sie mit einer anderen Komponente als TQuery aufrufen, müssen Sie zuerst einen Blick in ein DFM werfen und sehen, wie SQL angezeigt wird. es wird wahrscheinlich in der Richtung von

sein %Vor%

usw.

bearbeiten: Nach der Diskussion in den Kommentaren, hier ist ein Beispiel von einem meiner DFMs;

%Vor%

Also muss ich nur das SQL.Strings = ( -Bit erkennen, dann den Rest der Zeile und alle nachfolgenden Zeilen lesen und das führende und nachgestellte ' entfernen, bis ich zu einer Zeile komme, die in% endet. co_de% - an diesem Punkt bin ich fertig. Was auch immer interessantes SQL (und Kommentare) in den Anführungszeichen jeder Zeile enthalten sein mag, ist irrelevant. Sie möchten jede Zeile lesen, an der Sie interessiert sind, und den Text zwischen dem ersten und letzten Zitat in jeder Zeile ausschneiden. Das muss funktionieren, weil ich nicht sehen kann, wie Delphi das anders streamen würde, es könnte unmöglich den String-Inhalt lesen - es funktioniert nur auf der Basis, dass die Stringliste (möglicherweise) in Zeilen und jede Zeile aufgeteilt ist ist im DFM mit einem öffnenden und schließenden ')' abgegrenzt, und der gesamte Inhalt der Stringliste selbst ist in einem Paar Klammern enthalten.

Macht das Sinn, oder fehlt mir noch etwas? : -)

    
robsoft 25.03.2010 07:06
quelle
0

Da der DFM grundsätzlich im Format name = value ist, könnten Sie einfach in eine tStringlist laden und dann jede Zeile nach den spezifischen Eigenschaftsnamen durchsuchen, an denen Sie interessiert sind:

%Vor%     
skamradt 25.03.2010 16:29
quelle
0

Vielen Dank für die Antworten! Eine andere Lösung, die ich ausprobieren werde, ist das Werkzeug "Zeichenfolgen extrahieren", das in " GNU Gettext für Delphi und C ++ Builder " enthalten ist.

Die .po-Dateien enthalten nicht nur den gesamten Komponententext für, sondern auch alle resourcestrings (ein anderer Ort, an dem SQL-Befehle gespeichert werden), komplett mit Verweisen auf den Ursprung (welche pas- oder dfm-Datei, welcher Komponenteneigenschaftsname) sehr einfache "Name = Wert" -Liste bereits.

Mit einer .po-Datei wird es einfach sein, alle SQL.Text-Dateien aus .pas-Dateien und alle Ressourcenzeichenfolgen mit Namen wie 'SQL _...' in allen Dateien zu sortieren.

    
mjn 26.03.2010 17:19
quelle

Tags und Links