Ako vytvoriť reťazec pripojenia databázy dynamicky

Po dokončení Databázové riešenie Delphi, posledným krokom je úspešné nasadenie počítača používateľa.

ConnectionString za behu

Ak ste používali komponenty dbGo (ADO), ikonaConnectionString majetok TADOConnection určuje informácie o pripojení pre úložisko údajov.

Je zrejmé, že pri vytváraní databázových aplikácií, ktoré sa majú spúšťať na rôznych počítačoch, by pripojenie k zdroju údajov nemalo byť pevne zakódované v spustiteľnom súbore. Inými slovami, databáza sa môže nachádzať kdekoľvek na počítači používateľa (alebo na inom počítači) počítač v sieti) - reťazec pripojenia použitý v objekte TADOConnection musí byť vytvorený na beh programu. Jedným z navrhovaných miest na uloženie parametrov pripojovacieho reťazca je Register systému Windows (alebo sa môžete rozhodnúť použiť „obyčajný“ INI súbory).

Všeobecne platí, že ak chcete vytvoriť reťazec pripojenia v čase spustenia, musíte
a) umiestniť úplnú cestu do databázy v registri; a
b) pri každom spustení aplikácie si prečítajte informácie z registra, „vytvorte“ ConnectionString a „otvorte“ ADOConnection.

instagram viewer

Databáza... Connect!

Aby sme vám pomohli pochopiť tento proces, vytvorili sme ukážkovú aplikáciu „kostra“ pozostávajúcu z jedného formulára (hlavná forma aplikácie) a dátového modulu. Dátové moduly Delphi poskytujú pohodlný organizačný nástroj, ktorý sa používa na izoláciu častí vašej aplikácie, ktoré sa zaoberajú pripojením k databáze a obchodnými pravidlami.

OnCreate udalosť dátového modulu je miesto, kde umiestnite kód na dynamické zostavenie ConnectionString a pripojenie k databáze.

procedúra TDM.DataModuleCreate (odosielateľ: TObject); začaťak dBCONNECT potom
ShowMessage („Pripojené k databáze!“)
inak
ShowMessage („NIE JE pripojená k databáze!“); koniec;

Poznámka: Názov dátového modulu je „DM“. Názov komponentu TADOConnection je „AdoConn“.

dBCONNECT funkcia robí skutočnú prácu pri pripojení k databáze, tu je kód:

funcTDM.DBConnect: boolean; var
conStr: string; ServerName, DBName: string; začaťServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Poskytovateľ = sqloledb;' + 'Zdroj údajov =' + ServerName + ';' + 'Počiatočný katalóg =' + DBName + ';' + 'ID užívateľa = myUser; Password = myPasword '; Výsledok: = false; AdoConn. Zavrieť; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;ak (NOT AdoConn. pripojené) potomvyskúšať
AdoConn. Otvorené; Výsledok: = TRUE; lečna E: Výnimka robiťzačaťMessageDlg ('Došlo k chybe pri pripájaní k. databázu. Chyba: '+ # 13 # 10 + e. Správa, mtError, [mbOk], 0);akNOT TDatabasePromptForm. Vykonať (ServerName, DBName)
potom
Výsledok: = false. inakzačať
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // vyvolať túto funkciu
Výsledok: = DBConnect; koniec; koniec; koniec; koniec; //DBConnect

Funkcia DBConnect sa pripája k databáze MS SQL Server - ConnectionString je skonštruovaný pomocou lokálneho connStr variabilné.

Názov databázového servera je uložený v Názov servera V premennej sa názov databázy uchováva v dBNAME variabilné. Funkcia sa začína načítaním týchto dvoch hodnôt z registra (pomocou vlastného ReadRegistry () postup). Po zostavení ConnectionString jednoducho zavoláme AdoConn. Otvorené metóda. Ak toto volanie vráti „true“, úspešne sme sa pripojili k databáze.

Poznámka: Pretože výslovne odovzdávame prihlasovacie informácie cez ConnectionString, dátový modul Since je vytvorené pred hlavným formulárom, môžete bezpečne zavolať metódy z dátového modulu v aplikácii OnCreate MainForm event.loginprompt Vlastnosť je nastavená na false, aby sa zabránilo zbytočnému prihláseniu dialóg.

Ak sa vyskytne výnimka, spustí sa „zábava“. Aj keď môže existovať veľa dôvodov na zlyhanie metódy Open, predpokladajme, že názov servera alebo názov databázy je zlý.
V takom prípade dáme používateľovi šancu zadať správne parametre zobrazením vlastného dialógového formulára.
Vzorová aplikácia obsahuje aj jeden dodatočný formulár (DatabasePromptForm), ktorý užívateľovi umožňuje určiť server a názov databázy pre komponent Pripojenie. Tento jednoduchý formulár poskytuje iba dve editovacie polia, ak chcete poskytnúť užívateľsky prívetivejšie rozhranie pridajte dva ComboBoxy a vyplňte ich vymenovaním dostupných serverov SQL a načítaním databáz na serveri SQL.

Formulár DatabasePrompt poskytuje vlastný metóda triedy s názvom Execute, ktorý akceptuje dva parametre premennej (var): ServerName a DBName.

Pri „nových“ údajoch poskytnutých používateľom (názov servera a databázy) jednoducho zavoláme funkciu DBConnect () (rekurzívne). Informácie sa samozrejme najprv uložia do registra (použitím inej vlastnej metódy: WriteRegistry).

Uistite sa, že DataModule je prvý „formulár“ vytvorený!

Ak sa pokúsite vytvoriť tento jednoduchý projekt sami, pri spustení aplikácie sa môžu vyskytnúť výnimky.
V predvolenom nastavení sa prvým formulárom pridaným do aplikácie stane MainForm (prvý vytvorený). Keď do aplikácie pridáte dátový modul, dátový modul sa pridá do zoznamu automaticky vytvorených formulárov ako formulár, ktorý sa vytvorí po hlavnom formulári.
Ak sa teraz pokúsite zavolať niektorú z vlastností alebo metód údajového modulu v udalosti OnCreate MainForm, dostanete výnimku narušenia prístupu - pretože dátový modul ešte nebol vytvorený.
Ak chcete tento problém vyriešiť, musíte manuálne zmeniť vytvorené poradie dátového modulu - a nastaviť ho tak, aby bolo prvý formulár, ktorý vytvorí aplikácia (pomocou dialógového okna Vlastnosti projektu alebo úpravou) Zdrojový súbor projektov).

Pretože dátový modul je vytvorený pred hlavným formulárom, môžete bezpečne zavolať metódy z dátového modulu v udalosti OnCreate MainForm.