Kaip dinamiškai sudaryti duomenų bazės jungties eilutę

Kai baigsite savo „Delphi“ duomenų bazės sprendimas, paskutinis žingsnis yra sėkmingai įdiegti jį vartotojo kompiuteryje.

„ConnectionString“ skrydžio metu

Jei naudojote dbGo (ADO) komponentus,„ConnectionString“ turto nuosavybė TADOKjungimas nurodo duomenų saugyklos prisijungimo informaciją.

Akivaizdu, kad kuriant duomenų bazių programas, kurios bus naudojamos įvairiuose kompiuteriuose, ryšys su duomenų šaltiniu neturėtų būti sunkiai užkoduotas vykdomojoje programoje. Kitaip tariant, duomenų bazė gali būti bet kurioje vartotojo kompiuteryje (arba kitame) kompiuteris tinkle) - TADOConnection objekte naudojama ryšio eilutė turi būti sukurta bėgimo laikas. Viena iš siūlomų vietų saugoti ryšio eilutės parametrus yra „Windows“ registras (arba galite nuspręsti naudoti „paprastą“ INI failai).

Apskritai, norėdami sukurti ryšio eilutę vykdymo metu, turite
a) įregistruoti visą kelią į duomenų bazę; ir
b) kiekvieną kartą paleisdami programą perskaitykite informaciją iš registro, „sukurkite“ „ConnectionString“ ir „atidarykite“ ADOConnection.

instagram viewer

Duomenų bazė... Prisijungti!

Norėdami padėti suprasti procesą, sukūrėme „skeleto“ programos pavyzdį, kurį sudaro viena forma (pagrindinė programos forma) ir duomenų modulis. „Delphi“ duomenų moduliai yra patogus organizacinis įrankis, naudojamas atskirti jūsų programos dalis, tvarkančias duomenų bazių sujungimą ir verslo taisykles.

„OnCreate“ Duomenų modulio įvykis yra vieta, kur įdedate kodą, kad galėtumėte dinamiškai sukurti „ConnectionString“ ir prisijungtumėte prie duomenų bazės.

procedūra TDM.DataModuleCreate (Siuntėjas: TObject); prasidedajei „DBConnect“ tada
„ShowMessage“ („Prisijungta prie duomenų bazės!“)
Kitas
„ShowMessage“ ('NEJUNGTAS prie duomenų bazės!'); galas;

Pastaba: Duomenų modulio pavadinimas yra „DM“. „TADOConnection“ komponento pavadinimas yra „AdoConn“.

„DBConnect“ funkcija atlieka realų prisijungimo prie duomenų bazės darbą, štai kodas:

func„TDM.DBConnect“: loginis; var
conStr: eilutė; ServerName, DBName: eilutė; prasidedaServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Teikėjas = sqloledb;' + 'Duomenų šaltinis =' + ServerName + ';' + 'Pradinis katalogas =' + DBName + ';' + 'Vartotojo ID = myUser; Slaptažodis = myPasword '; Rezultatas: = klaidingas; „AdoConn“. Uždaryti; „AdoConn“. ConnectionString: = conStr; „AdoConn“. LoginPrompt: = klaidinga;jei (NE „AdoConn“. Prijungtas) tadabandyti
„AdoConn“. Atviras; Rezultatas: = Tiesa; išskyrusapie E: Išimtis darytiprasidedaMessageDlg ('Prisijungiant prie. Įvyko klaida. duomenų bazę. Klaida: „+ # 13 # 10 + e. Žinutė, mtError, [mbOk], 0);jeiNE „TDatabasePromptForm“. Vykdyti (ServerName, DBName)
tada
Rezultatas: = klaidingas. Kitasprasideda
„WriteRegistry“ („DataSource“, ServerName); „WriteRegistry“ („DataCatalog“, DBName); // prisiminkite šią funkciją
Rezultatas: = „DBConnect“; galas; galas; galas; galas; //DBConnect

„DBConnect“ funkcija jungiasi prie „MS SQL Server“ duomenų bazės - „ConnectionString“ sukonstruota naudojant vietinę connStr kintamasis.

Duomenų bazės serverio pavadinimas saugomas Serverio pavadinimas kintamasis, duomenų bazės pavadinimas yra DBN vardas kintamasis. Funkcija pradedama skaitant šias dvi reikšmes iš registro (naudojant pasirinktinį „ReadRegistry“ () procedūra). Surinkę „ConnectionString“, mes tiesiog paskambiname tada „AdoConn“. Atviras metodas. Jei šis skambutis grąžins „teisingą“, sėkmingai prisijungėme prie duomenų bazės.

Pastaba: kadangi mes aiškiai perduodame prisijungimo informaciją per „ConnectionString“, Kadangi duomenų modulis yra sukurta prieš pagrindinę formą, galite saugiai iškviesti metodus iš duomenų modulio „MainForm“ „OnCreate“ įvykis.„LoginPrompt“ nuosavybė nustatyta kaip klaidinga, kad būtų išvengta nereikalingo prisijungimo dialogo.

„Pramogos“ prasideda, jei įvyksta išimtis. Nors „Open“ metodo žlugimui gali būti daugybė priežasčių, tarkime, kad serverio arba duomenų bazės vardas netinkamas.
Tokiu atveju vartotojui suteiksime galimybę nurodyti teisingus parametrus, parodydami pasirinktinę dialogo formą.
Programos pavyzdyje taip pat yra viena papildoma forma (DatabasePromptForm), leidžianti vartotojui nurodyti serverio ir „Connection“ komponento duomenų bazės pavadinimą. Ši paprasta forma pateikia tik du redagavimo laukelius, jei norite pateikti patogesnę sąsają pridėkite du „ComboBox“ ir užpildykite juos, surašydami turimus SQL serverius ir nuskaitydami duomenų bazes SQL serveryje.

„DatabasePrompt“ forma pateikia pasirinktį klasės metodas pavadintas Vykdyti, kuris priima du kintamus (var) parametrus: ServerName ir DBName.

Turėdami „naujus“ duomenis, kuriuos pateikia vartotojas (serverio ir duomenų bazės pavadinimas), mes tiesiog vėl paskambiname „DBConnect“ () funkcijai (rekursyviai). Žinoma, informacija pirmiausia saugoma registre (naudojant kitą pasirinktinį metodą: WriteRegistry).

Įsitikinkite, kad „DataModule“ sukurta pirmoji „forma“!

Jei patys mėginsite sukurti šį paprastą projektą, paleidę programą, galbūt turėsite prieigos pažeidimo išimčių.
Pagal numatytuosius nustatymus pirmoji prie programos pridedama forma tampa „MainForm“ (pirmoji sukurta). Kai pridedate duomenų modulį prie programos, duomenų modulis pridedamas prie „automatinio formavimo formų“ sąrašo kaip forma, kuri sukuriama po pagrindinės formos.
Jei bandysite iškviesti kurią nors iš duomenų modulio savybių ar metodų „MainForm“ „OnCreate“ įvykyje, gausite prieigos pažeidimo išimtį - duomenų modulis dar nėra sukurtas.
Norėdami išspręsti šią problemą, turite rankiniu būdu pakeisti sukurtą duomenų modulio tvarką - ir nustatyti, kad ji būtų pirmoji forma, kurią sukuria programa (naudodama dialogo langą „Projekto ypatybės“ arba redaguodama Projektų šaltinio failas).

Kadangi duomenų modulis yra sukurtas prieš pagrindinę formą, galite saugiai iškviesti metodus iš duomenų modulio „MainForm“ „OnCreate“ įvykyje.