Computerwissenschaften

So erstellen Sie die Datenbankverbindungszeichenfolge dynamisch

Nachdem Sie Ihre Delphi-Datenbanklösung fertiggestellt haben. besteht der letzte Schritt darin, sie erfolgreich auf dem Computer des Benutzers bereitzustellen.

 

ConnectionString im laufenden Betrieb

Wenn Sie ADO-Komponenten (dbGo) verwendet haben, gibt die ConnectionString-  Eigenschaft der  TADOConnection  die Verbindungsinformationen für den Datenspeicher an.

Wenn Sie Datenbankanwendungen erstellen, die auf verschiedenen Computern ausgeführt werden sollen, sollte die Verbindung zur Datenquelle in der ausführbaren Datei natürlich nicht fest codiert sein. Mit anderen Worten, die Datenbank kann sich an einer beliebigen Stelle auf dem Computer des Benutzers (oder auf einem anderen Computer in einem Netzwerk) befinden. Die im TADOConnection-Objekt verwendete Verbindungszeichenfolge muss zur Laufzeit erstellt werden. Einer der vorgeschlagenen Orte zum Speichern der Verbindungszeichenfolgenparameter ist die  Windows-Registrierung  (oder Sie entscheiden sich möglicherweise für die Verwendung der „einfachen“  INI-Dateien ).

Um die Verbindungszeichenfolge zur Laufzeit zu erstellen, müssen Sie im Allgemeinen
a) den vollständigen Pfad zur Datenbank in der Registrierung ablegen; und
b) jedes Mal, wenn Sie Ihre Anwendung starten, lesen Sie die Informationen aus der Registrierung, „erstellen“ Sie den ConnectionString und „öffnen“ Sie die ADOConnection.

 

Datenbank … Verbinden!

Um Ihnen das Verständnis des Prozesses zu erleichtern, haben wir eine Beispielanwendung „Skeleton“ erstellt, die aus einem Formular (Hauptformular der Anwendung) und einem Datenmodul besteht. Die Datenmodule von Delphi bieten ein praktisches Organisationstool, mit dem Sie die Teile Ihrer Anwendung isolieren können, die die Datenbankkonnektivität und Geschäftsregeln verwalten.

Im  OnCreate-  Ereignis des Datenmoduls platzieren Sie den Code, um den ConnectionString dynamisch zu erstellen und eine Verbindung zur Datenbank herzustellen .

Prozedur TDM.DataModuleCreate (Absender: TObject);
Beginnen Sie, 
wenn DBConnect dann
ShowMessage ('Mit Datenbank verbunden!')
sonst
ShowMessage ('NICHT mit Datenbank verbunden!');
Ende ;

Hinweis : Der Name des Datenmoduls lautet „DM“. Der Name der TADOConnection-Komponente lautet „AdoConn“.

Die  DBConnect-  Funktion erledigt die eigentliche Verbindung mit der Datenbank. Hier ist der Code:

Funktion TDM.DBConnect: boolean;
var
conStr: string;
Servername, DB-Name: Zeichenfolge;
Start
Servername:=ReadRegistry ('DataSource');
DBName:=ReadRegistry ('DataCatalog');
conStr:='Provider=sqloledb;' +
'Datenquelle =' + Servername + ';' +
'Initial Catalog =' + DBName + ';' +
'Benutzer-ID=myUser; Passwort=myPasword';
Ergebnis:=falsch;
AdoConn.Close;
AdoConn.ConnectionString:=conStr;
AdoConn.LoginPrompt:=False;
wenn ( NICHT AdoConn.Connected) dann 
versuchen
AdoConn.Open;
Ergebnis:=True;
ausnehmen  auf E: Ausnahme kann 
beginnen
MessageDlg ('Beim Herstellen einer Verbindung ist ein Fehler aufgetreten
die Datenbank. Fehler: '+ # 13 # 10 +
e.Message,
mtError, [mbOk], 0);
wenn  NICHT TDatabasePromptForm.Execute (Servername, DBName)
 dann
Ergebnis:=falsch
sonst 
fange an
WriteRegistry ('DataSource', Servername);
WriteRegistry ('DataCatalog', DBName);
// diese Funktion aufrufen
Ergebnis:=DBConnect;
Ende ;
Ende ;
Ende ;
Ende ; // DBConnect

Die DBConnect-Funktion stellt eine Verbindung zur MS SQL Server-Datenbank her. Der ConnectionString wird mithilfe der lokalen   Variablen connStr erstellt .

Der Name des Datenbankservers wird in der  Variablen ServerName gespeichert  , der Name der Datenbank wird in der   Variablen DBName gespeichert . Die Funktion beginnt mit dem Lesen dieser beiden Werte aus der Registrierung (mithilfe der benutzerdefinierten  ReadRegistry ()  -Prozedur). Sobald der ConnectionString zusammengestellt ist, rufen wir einfach die  AdoConn.Open-  Methode auf. Wenn dieser Aufruf „true“ zurückgibt, haben wir erfolgreich eine Verbindung zur Datenbank hergestellt.

Hinweis: Da wir Anmeldeinformationen explizit über den ConnectionString übergeben, können Sie die Methoden aus dem Datenmodul im OnCreate-Ereignis der MainForm sicher aufrufen, da das Datenmodul vor dem Hauptformular erstellt wurde. Die LoginPrompt-  Eigenschaft wird auf false gesetzt, um einen unnötigen Anmeldedialog zu vermeiden.

Der „Spaß“ beginnt, wenn eine Ausnahme auftritt. Obwohl es viele Gründe für das Fehlschlagen der Open-Methode geben kann, nehmen wir an, dass der Servername oder der Datenbankname fehlerhaft ist.
In diesem Fall geben wir dem Benutzer die Möglichkeit, die richtigen Parameter anzugeben, indem ein benutzerdefiniertes Dialogformular angezeigt wird.
Die Beispielanwendung enthält außerdem ein zusätzliches Formular (DatabasePromptForm), mit dem der Benutzer den Server und den Datenbanknamen für die Verbindungskomponente angeben kann. Dieses einfache Formular enthält nur zwei Bearbeitungsfelder. Wenn Sie eine benutzerfreundlichere Oberfläche bereitstellen möchten, können Sie zwei ComboBoxen hinzufügen und diese ausfüllen, indem Sie verfügbare SQL Server auflisten und Datenbanken auf einem SQL Server abrufen.

Das DatabasePrompt-Formular bietet eine benutzerdefinierte  Klassenmethode mit dem  Namen Execute, die zwei variable (var) Parameter akzeptiert: ServerName und DBName.

Mit den „neuen“ Daten eines Benutzers (Server- und Datenbankname) rufen wir einfach die Funktion DBConnect () erneut auf (rekursiv). Natürlich werden die Informationen zuerst in der Registrierung gespeichert (mit einer anderen benutzerdefinierten Methode: WriteRegistry).

 

Stellen Sie sicher, dass DataModule das erste erstellte „Formular“ ist!

Wenn Sie versuchen, dieses einfache Projekt selbst zu erstellen, treten beim Ausführen der Anwendung möglicherweise Ausnahmen bei Zugriffsverletzungen auf.
Standardmäßig ist das erste Formular, das der Anwendung hinzugefügt wird, das MainForm (das erste, das erstellt wurde). Wenn Sie der Anwendung ein Datenmodul hinzufügen, wird das Datenmodul der Liste der „automatisch erstellten Formulare“ als das Formular hinzugefügt, das nach dem Hauptformular erstellt wird.
Wenn Sie jetzt versuchen, eine der Eigenschaften oder Methoden des Datenmoduls im OnCreate-Ereignis der MainForm aufzurufen, wird eine Ausnahme für Zugriffsverletzungen angezeigt, da das Datenmodul noch nicht erstellt wurde.
Um dieses Problem zu lösen, müssen Sie die erstellte Reihenfolge des Datenmoduls manuell ändern und festlegen, dass es das erste Formular ist, das von der Anwendung erstellt wird (entweder über das Dialogfeld “ Projekteigenschaften. oder durch Bearbeiten der  Quelldatei „Projekte“ ).

Da das Datenmodul vor dem Hauptformular erstellt wird, können Sie die Methoden aus dem Datenmodul im OnCreate-Ereignis der MainForm sicher aufrufen.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.