Kako dinamično zgraditi niz povezave baze podatkov

click fraud protection

Ko končate svoje Rešitev baze podatkov Delphi, končni korak je, da ga uspešno uporabimo uporabnikov računalnik.

ConnectionString On-The-Fly

Če ste uporabljali komponente dbGo (ADO),ConnectionString last TADOC povezava določa podatke o povezavi za shranjevanje podatkov.

Pri ustvarjanju aplikacij baz podatkov, ki naj se izvajajo na različnih strojih, očitno povezava do vira podatkov ne sme biti trdo kodirana v izvršljivi datoteki. Z drugimi besedami, baza podatkov se lahko nahaja kjer koli v uporabnikovem računalniku (ali na kakšnem drugem) računalnik v omrežju) - povezava, ki se uporablja v objektu TADOConnection, mora biti ustvarjena na čas teka. Eno od predlaganih mest za shranjevanje parametrov vezalnega niza je Windows Registry (ali pa se boste morda odločili za uporabo "navadnega" Datoteke INI).

Na splošno morate ustvariti povezovalni niz v času izvajanja, ki ga morate
a) namestite celotno pot do baze podatkov v registru; in
b) vsakič, ko zaženete aplikacijo, preberite podatke iz registra, "ustvarite" ConnectionString in "odprite" povezavo ADOC.

instagram viewer

Baza podatkov... Poveži se!

Da bi lažje razumeli postopek, smo ustvarili vzorčno aplikacijo za "okostje", ki je sestavljena iz enega obrazca (glavna oblika aplikacije) in podatkovnega modula. Podatkovni moduli podjetja Delphi zagotavljajo priročno organizacijsko orodje, ki se uporablja za izolacijo delov vaše aplikacije, ki upravljajo s povezljivostjo baze podatkov in poslovnimi pravili.

The OnCreate v primeru podatkovnega modula postavite kodo za dinamično konstrukcijo ConnectionString in povezavo z bazo podatkov.

postopek TDM.DataModuleCreate (Pošiljatelj: TObject); začetiče DBConnect torej
ShowMessage ("Povezana z bazo podatkov!")
drugače
ShowMessage ('NI povezan z zbirko podatkov!'); konec;

Opomba: Ime podatkovnega modula je "DM". Ime komponente TADOConnection je "AdoConn".

The DBConnect funkcija dejansko deluje pri povezovanju z bazo podatkov, tukaj je koda:

funkczveze TDM.DBConnect: boolean; var
conStr: string; ServerName, DBName: niz; začetiIme strežnika: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Ponudnik = sqloledb;' + 'Vir podatkov =' + Ime strežnika + ';' + 'Začetni katalog =' + DBName + ';' + 'ID uporabnika = myUser; Geslo = mojaPoslovna beseda '; Rezultat: = napačno; AdoConn Zapri; AdoConn ConnectionString: = conStr; AdoConn PrijavaPrompt: = napačno;če (NE AdoConn Povezani) torejposkusi
AdoConn Odprto; Rezultat: = Res; razennaprej E: Izjema storizačetiMessageDlg ("Pri povezavi s. baze podatkov. Napaka: '+ # 13 # 10 + e. Sporočilo, mtError, [mbOk], 0);čeNE TDatabasePromptForm. Izvedite (ServerName, DBName)
torej
Rezultat: = napačno. drugačezačeti
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // prikliči to funkcijo
Rezultat: = DBConnect; konec; konec; konec; konec; //DBConnect

Funkcija DBConnect se poveže z bazo podatkov MS SQL Server - ConnectionString je zgrajen z uporabo lokalne connStr spremenljivka.

Ime strežnika baz podatkov je shranjeno v Ime strežnika ime baze podatkov je v spremenljivki DBName spremenljivka. Funkcija se začne z branjem teh dveh vrednosti iz registra (z uporabo po meri ReadRegistry () postopek). Ko je ConnectionString sestavljen, potem preprosto pokličemo AdoConn Odprto metoda. Če se ta klic vrne »res«, smo se uspešno povezali z bazo podatkov.

Opomba: Ker podatke o prijavi izrecno posredujemo prek ConnectionString, je modul podatkov ustvarjene pred glavnim obrazcem, lahko varno pokličete metode iz podatkovnega modula v sistemu MainForm's OnCreate dogodek.PrijavaPrompt lastnost je nastavljena na false, da prepreči nepotrebno pogovorno okno za prijavo.

"Zabava" se začne, če pride do izjeme. Medtem ko je lahko veliko razlogov, da metoda Open ne uspe, predpostavimo, da je ime strežnika ali ime baze podatkov slabo.
V tem primeru bomo uporabniku dali možnost, da določi pravilne parametre s prikazom pogovornega obrazca po meri.
Vzorčna aplikacija vsebuje tudi en dodaten obrazec (DatabasePromptForm), ki uporabniku omogoča, da poda komponento strežnika in baze podatkov za komponento Connection. Ta preprost obrazec vsebuje samo dve polji za urejanje, če želite zagotoviti bolj uporabniku prijazen vmesnik, bi lahko dodajte dva ComboBoxa in jih napolnite s naštevanjem razpoložljivih strežnikov SQL in pridobivanjem baz podatkov na SQL Server.

Obrazec DatabasePrompt ponuja meri razredna metoda z imenom Execute, ki sprejme dva spremenljiva (var) parametra: ServerName in DBName.

Z "novimi" podatki, ki jih posreduje uporabnik (ime strežnika in baze podatkov), preprosto ponovno pokličemo funkcijo DBConnect () (rekurzivno). Seveda se informacije najprej shranijo v register (z uporabo druge metode po meri: WriteRegistry).

Prepričajte se, da je DataModule ustvarjen prvi "obrazec"!

Če poskusite ustvariti ta preprost projekt sami, lahko med zagonom aplikacije naletite na izjeme kršitve dostopa.
Prvi obrazec, dodan v aplikacijo, je privzeto MainForm (prvi ustvarjen). Ko aplikaciji dodate podatkovni modul, je podatkovni modul dodan na seznam "samodejno ustvari obrazce" kot oblika, ki se ustvari po glavnem obrazcu.
Zdaj, če poskusite poklicati katero koli od lastnosti ali metod podatkovnega modula v primeru OnCreate dogodka MainForm, boste dobili izjemo kršitve dostopa - saj podatkovni modul še ni ustvarjen.
Če želite rešiti to težavo, morate ročno spremeniti ustvarjeni vrstni red podatkovnega modula - in ga nastaviti prvi obrazec, ki ga ustvari aplikacija (bodisi z uporabo pogovornega okna Lastnosti projekta ali z urejanjem the Izvorna datoteka projektov).

Ker je podatkovni modul ustvarjen pred glavnim obrazcem, lahko varno pokličete metode iz podatkovnega modula v dogodku OnCreate MainForma.

instagram story viewer