2009-03-13 11 views
0

Ich führe eine alte VB6-Anwendung, und möchte SQL-Skripte direkt in Teil des Projekts enthalten. Die VB6-Anwendung sollte dann den Text dieses Skripts extrahieren und auf dem Server ausführen.Include-SQL-Skripte in einer VB6-Anwendung

Die Gründe für diesen Ansatz sind vielfältig - unter anderem möchten wir nur eine aktualisierte ausführbare Datei anstelle eines vollständigen Update-/Installationspakets liefern. Daher müssen die SQL-Skripts wie eine Ressourcendatei in die Anwendung kompiliert werden. Und natürlich muss man in der Lage sein, den Inhalt aus dem Code zu bekommen, um ihn an den Datenbankserver zu senden.

Hat jemand eine gute Möglichkeit, dies zu tun?

Antwort

5

Die einfachste Lösung besteht darin, einfach ein VB-Modul mit den Skripten als Strings zu erstellen.

Wenn Sie stattdessen eine Ressourcendatei verwenden möchten, können Sie das auch tun. Sie können eine resfile mit einem VB-Projekt verknüpfen (ich erinnere mich nicht, wie dies direkt in der VB IDE zu tun, aber die VBP-Datei unterstützt eine ResFile32 parameter).

EDIT: Es scheint, dass das Problem hier hauptsächlich über Formatierung ist - Sie möchten SQL-Abfragen nicht als eine lange Zeichenfolge speichern, aber die Abfrage in VB schön formatieren ist mühsam, weil Sie Anführungszeichen hinzufügen müssen, Zeichenfolge hinzufügen Verkettungsoperatoren, um die Linien miteinander zu verbinden, etc.

Ich würde empfehlen, die SQL in eine Textdatei zu platzieren und sie so zu formatieren, wie Sie möchten. Schreiben Sie ein Skript, das den Text übernimmt und in ein VB-Modul konvertiert. Der Build-Prozess wird so geändert, dass dieses Skript immer zuerst angewendet wird, bevor die Anwendung kompiliert wird.

Verwenden Sie für die Skripterstellung Ihre bevorzugte Skriptsprache. Wenn Sie keine bevorzugte Skriptsprache haben, ist dies eine einfache Aufgabe, die Sie in VB, C# oder einer anderen Sprache ausführen können. Wenn ich es wäre, würde ich wahrscheinlich awk (gawk) oder Python benutzen.

+0

Einfach die SQL-Strings in einem VB-Modul fest codieren. Ressourcenzeichenfolgen sind umständlich. Ressourcenzeichenfolgen sind gut, wenn Sie mehrere Versionen der Zeichenfolge (Übersetzungen) für dieselbe ID haben. Dies trifft in diesem Fall nicht zu, so dass es keinen Vorteil hat, sie zu verwenden, um die Strings in einem Modul hart zu codieren. – MarkJ

+0

Heh. Ich hatte letzte Woche genau dasselbe Problem. Ich hatte eine Menge Ansichten, die ich programmatisch zu einer Access-Datenbank hinzufügen musste. Gleiche Lösung: Ich habe einen Code-Generator geschrieben, der eine Menge 'sql = sql + "blah"' Anweisungen erstellt hat, die ich in unser DB-Update-Modul einfügen konnte. –

2

Wenn Sie eine Ressource (.RES) verwenden möchten, um SQL zu speichern, öffnen Sie das Menü:

Add-Ins > Add-In-Manager ...

und wählen VB 6 Ressourcen Editor. Konfigurieren Sie das Add-In, das beim Start geladen und geladen werden soll.

Vom Editor-Add-In bietet VB eine einfache Schnittstelle zum Hinzufügen von Ressourcen-Strings. Auf diese beziehen Sie sich mit den angegebenen konstanten Werten. Um die Zeichenfolgen zur Laufzeit zu laden, verwenden Sie die LoadResString Funktion:

Public Const SQL_INSERT As Integer = 101 
Dim strSQL As String 
strSQL = LoadResString(SQL_INSERT) 

(ersetzen „101“ mit dem konstanten Wert der Zeichenfolge, die Sie laden möchten)

+0

Resource Strings werden ein bisschen peinlich sein, da wir hier über ganze gespeicherte Prozeduren sprechen: im Allgemeinen Dutzende von Codezeilen. Das Formatieren der verdammten Dinge wird umständlich sein. Aber wenn es keinen besseren Weg gibt ... –

+0

Einfach die SQL-Strings in einem VB-Modul fest codieren. Ressourcenzeichenfolgen sind umständlich. Ressourcenzeichenfolgen sind gut, wenn Sie mehrere Versionen der Zeichenfolge (Übersetzungen) für dieselbe ID haben. Dies trifft in diesem Fall nicht zu, so dass es keinen Vorteil hat, sie zu verwenden, um die Strings in einem Modul hart zu codieren. – MarkJ

+0

Einverstanden ... das war mehr ein How-To als eine Stilempfehlung. –

0

Gerade ein anderer Gedanke auf Ihrem Ansatz. Da ich das Verhalten oder die Benutzerschnittstelle des Programms für die Kunden anpassen kann, bin ich möglicherweise mitten in einer Änderung, die entweder noch nicht fertig ist oder noch nicht getestet und genehmigt wurde. Also, wenn ich Eigenschaften habe, die sich von Zeit zu Zeit ändern, aber ich möchte die Kontrolle über zum Beispiel Verbindungseinstellungen zu unserem ftp Server behalten, werde ich eine Ressource nur dll erstellen, die meine Eigenschaften ausstellt und eine Ressourcendatei in der dll benutzt, um das zu liefern Werte. Wenn mein Netzwerkmanager etwas auf dem FTP-Server ändert, ändere ich die Zeichenfolgen in der Ressource maanger, kompiliere die DLL neu und gebe nur die aktualisierte DLL frei. Ich bin mir sicher, dass es viele weitere Lösungen gibt, aber so mache ich es. Wenn Sie nicht glauben, dass Sie Ihre SQL-Skripte zur gleichen Zeit ändern müssen, an der Sie Ihre exe-Datei ändern, erschwert dies wahrscheinlich nur Ihre Arbeit.Es hat mir gut genug geklappt, dass das jetzt ziemlich Standard für mich ist.

Verwandte Themen