Cum se construiește dinamic șirul de conexiune la baza de date

Odată ce ai terminat Soluția de baze de date Delphi, ultimul pas este să îl implementați cu succes pe computerul utilizatorului.

ConnectionString on-the-fly

Dacă utilizați componente dbGo (ADO),connectionString proprietatea TADOConnection specifică informațiile de conectare pentru depozitul de date.

Evident, atunci când se creează aplicații de bază de date care urmează să fie rulate pe diverse mașini, conexiunea la sursa de date nu trebuie să fie codată în mod executabil. Cu alte cuvinte, baza de date poate fi localizată oriunde pe computerul utilizatorului (sau pe unele altele) computer într-o rețea) - șirul de conexiune utilizat în obiectul TADOConnection trebuie creat la timpul de rulare. Unul dintre locurile sugerate pentru a stoca parametrii șirului de conexiune este Registrul Windows (sau, puteți decide să utilizați „câmpul” Fișiere INI).

În general, pentru a crea șirul de conexiune la timpul de execuție, trebuie să
a) plasați calea completă la baza de date în registru; și
b) de fiecare dată când porniți aplicația, citiți informațiile din Registru, „creați” ConnectionString și „deschideți” ADOConnection.

instagram viewer

Bază de date... Conectați!

Pentru a vă ajuta să înțelegeți procesul, am creat un exemplu de „schelet” format dintr-un formular (formularul principal al cererii) și un modul de date. Modulele de date Delphi oferă un instrument organizatoric convenabil, care este folosit pentru a izola părțile din aplicația dvs. care se ocupă de conectivitatea bazelor de date și de regulile de afaceri.

OnCreate evenimentul modulului de date este locul în care plasați codul pentru a construi dinamic ConnectionString și a vă conecta la baza de date.

procedură TDM.DataModuleCreate (Expeditor: TObject); începedacă DBConnect apoi
ShowMessage ('Conectat la baza de date!')
altfel
ShowMessage ('NU este conectat la baza de date!'); Sfârșit;

Notă: Numele modulului de date este „DM”. Numele componentei TADOConnection este „AdoConn”.

DBConnect funcționează efectiv activitatea de conectare la baza de date, iată codul:

FUNCTDM.DBConnect tion: boolean; var
conStr: șir; ServerName, DBName: string; începeServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Furnizor = sqloledb;' + 'Source Source =' + ServerName + ';' + 'Catalog inițial =' + DBName + ';' + 'Id utilizator = myUser; Password = myPasword '; Rezultat: = fals; AdoConn. Închide; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;dacă (NU AdoConn. Conectat) apoiîncerca
AdoConn. Deschis; Rezultat: = true; cu exceptiape E: Excepție doîncepeMessageDlg ('A apărut o eroare la conectarea la. baza de date. Eroare: „+ # 13 # 10 + e. Mesaj, mtError, [mbOk], 0);dacăNU TDatabasePromptForm. Executați (ServerName, DBName)
apoi
Rezultat: = fals. altfelîncepe
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // amintiți-vă de această funcție
Rezultat: = DBConnect; Sfârșit; Sfârșit; Sfârșit; Sfârșit; //DBConnect

Funcția DBConnect se conectează la baza de date MS SQL Server - ConnectionString este construită folosind localul connStr variabil.

Numele serverului bazei de date este stocat în Numele serverului variabilă, numele bazei de date este păstrat în numeBD variabil. Funcția începe prin citirea acelor două valori din registru (folosind personalizat ReadRegistry () procedură). Odată ce ConnectionString este asamblat, apelăm pur și simplu atunci AdoConn. Deschis metodă. Dacă acest apel returnează „adevărat”, ne-am conectat cu succes la baza de date.

Notă: Deoarece trecem în mod explicit informații de autentificare prin ConnectionString, modul De date este creat înainte de formularul principal, puteți apela în mod sigur la metodele din modulul de date din MainCorm's OnCreate eveniment.loginprompt proprietatea este setată pe fals pentru a preveni un dialog de conectare inutil.

„Distracția” începe dacă apare o excepție. Cu toate că ar putea exista multe motive pentru eșecul metodei Open, să presupunem că numele serverului sau numele bazei de date nu este valabil.
În acest caz, vom oferi utilizatorului o șansă de a specifica parametrii corecți prin afișarea unui formular de dialog personalizat.
Aplicația de exemplu conține, de asemenea, un formular suplimentar (DatabasePromptForm) care permite utilizatorului să specifice serverul și numele bazei de date pentru componenta de conexiune. Acest formular simplu oferă doar două căsuțe de editare, dacă doriți să oferiți o interfață mai ușor de utilizat, puteți adăugați două ComboBoxes și completați-le prin enumerarea serverelor SQL disponibile și regăsirea bazelor de date pe un SQL Server.

Formularul DatabasePrompt oferă o personalizare metoda clasei numit Execute care acceptă doi parametri variabili (var): ServerName și DBName.

Cu datele „noi” furnizate de un utilizator (numele serverului și al bazei de date), apelăm pur și simplu la funcția DBConnect () din nou (recursiv). Desigur, informațiile sunt stocate mai întâi în Registru (folosind o altă metodă personalizată: WriteRegistry).

Asigurați-vă că DataModule este primul "formular" creat!

Dacă încercați să creați singur acest proiect simplu, este posibil să întâmpinați excepții de încălcare a accesului atunci când rulați aplicația.
În mod implicit, primul formular adăugat la aplicație devine MainForm (primul creat). Când adăugați un modul de date la aplicație, modulul de date este adăugat la lista de "forme de creare automată" ca formular care se creează după formularul principal.
Acum, dacă încercați să apelați la oricare dintre proprietățile sau metodele modulului de date în evenimentul OnCreate al MainForm, veți primi o excepție de încălcare a accesului - deoarece modulul de date nu este încă creat.
Pentru a rezolva această problemă, trebuie să modificați manual ordinea creată a modulului de date - și să o setați să fie primul formular care este creat de aplicație (folosind dialogul Project-Properties sau prin editare Fișier sursă proiecte).

Deoarece modulul de date este creat înainte de formularul principal, puteți apela în mod sigur metodele din modulul de date în evenimentul OnCreate de MainForm.