Kuidas luua andmebaasi ühenduse stringi dünaamiliselt

Kui olete oma Delphi andmebaasi lahendus, viimane samm on selle edukas juurutamine kasutaja arvutis.

ConnectionString otseühendusel

Kui kasutasite dbGo (ADO) komponente, siisConnectionString vara TADOCühendus täpsustab andmesalve ühendusteavet.

Ilmselt ei tohiks erinevates masinates töötavate andmebaasirakenduste loomisel ühendus andmeallikaga käivitatavas programmis kõva kodeerida. Teisisõnu võib andmebaas asuda kasutaja arvutis (või mõnes muus) võrgus olev arvuti) - TADOConnection-objektis kasutatav ühendustring tuleb luua aadressil jooksuaeg. Üks soovitatud kohti ühenduse stringi parameetrite salvestamiseks on Windowsi register (või võite kasutada "tavalist" INI failid).

Üldiselt peate ühenduse loomiseks stringi tööaja ajal looma
a) sisestage täielik tee andmebaasi registrisse; ja
b) lugege iga kord pärast rakenduse käivitamist registrist teavet, "looge" ConnectionString ja "avage" ADOConnection.

Andmebaas... Ühendage!

Protsessi mõistmiseks oleme loonud "skeleti" näidisrakenduse, mis koosneb ühest vormist (rakenduse põhivorm) ja andmemoodulist. Delphi andmemoodulid pakuvad mugavat korraldusvahendit, mida kasutatakse teie rakenduse osade eraldamiseks, mis käsitlevad andmebaasi ühenduvust ja ärireegleid.

instagram viewer

OnCreate andmemooduli sündmus on koht, kuhu sisestate koodi ConnectionStringi dünaamiliseks konstrueerimiseks ja andmebaasiga ühenduse loomiseks.

protseduur TDM.DataModuleCreate (saatja: TObject); alustadakui DBConnect siis
ShowMessage ('Ühendatud andmebaasiga!')
muud
ShowMessage ('EI ole andmebaasiga ühendatud!'); lõpp;

Märge: Andmemooduli nimi on "DM". TADOConnection-komponendi nimi on "AdoConn".

DBConnect funktsioon teeb andmebaasiga ühenduse loomise tegeliku töö, siin on kood:

funcmine TDM.DBConnect: tõeväärtus; var
conStr: string; ServerNimi, DBName: string; alustadaServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Pakkuja = sqloledb;' + 'Andmeallikas =' + Serverinimi + ';' + 'Algne kataloog =' + DBName + ';' + 'Kasutajatunnus = myUser; Parool = myPasword '; Tulemus: = vale; AdoConn. Sulge; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Vale;kui (MITTE AdoConn. Ühendatud) siisproovida
AdoConn. Avatud; Tulemus: = tõsi; välja arvatudpeal E: Erand tehaalustadaMessageDlg ('Ühenduse loomisel tekkis tõrge. andmebaas. Viga: '+ # 13 # 10 + e. Teade, mtError, [mbOk], 0);kuiMITTE TDatabasePromptForm. Käivita (ServerNimi, DBName)
siis
Tulemus: = vale. muudalustada
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // tuleta see funktsioon meelde
Tulemus: = DBConnect; lõpp; lõpp; lõpp; lõpp; //DBConnect

Funktsioon DBConnect loob ühenduse MS SQL Serveri andmebaasiga - ConnectionString on konstrueeritud kohaliku konnStr muutuja.

Andmebaasiserveri nimi on salvestatud Serveri nimi muutuja korral hoitakse andmebaasi nime andmebaasis DBName muutuja. Funktsioon algab nende kahe väärtuse lugemisega registrist (kohandatud abil ReadRegistry () protseduur). Kui ConnectionString on kokku pandud, helistame lihtsalt siis AdoConn. Avatud meetod. Kui see kõne naaseb tõeseks, oleme andmebaasiga edukalt ühendunud.

Märkus. Kuna me edastame sisselogimisandmeid ConnectionStringi kaudu, on Data data moodul mis on loodud enne põhivormi, saate meetodeid turvaliselt kutsuda MainFormi OnCreate-i andmemoodulist sündmus.Logi sissePrompt atribuut on valeks seatud, et vältida tarbetut sisselogimisdialoogi.

"Lõbu" algab erandi korral. Ehkki Open-meetodi ebaõnnestumisel võib olla palju põhjuseid, eeldame, et serveri või andmebaasi nimi on halb.
Sel juhul anname kasutajale võimaluse kohandatud dialoogi vormi kuvades õigeid parameetreid täpsustada.
Näidisrakendus sisaldab ka ühte täiendavat vormi (DatabasePromptForm), mis võimaldab kasutajal määrata serveri ja ühenduse komponendi andmebaasi nime. Sellel lihtsal vormil on ainult kaks redigeerimiskasti, kui soovite pakkuda kasutajasõbralikumat liidest, siis võiksite seda teha lisage kaks ComboBoxi ja täitke need, loetledes saadaolevad SQL-serverid ja hankides andmebaasid SQL-serverist.

Vorm DatabasePrompt pakub kohandatud klassimeetod nimega Execute, mis aktsepteerib kahte muutujat (var) parameetrit: ServerName ja DBName.

Kasutaja pakutavate "uute" andmete (serveri ja andmebaasi nime) korral kutsume lihtsalt (rekursiivselt) uuesti funktsiooni DBConnect (). Muidugi salvestatakse teave kõigepealt registrisse (kasutades mõnda muud kohandatud meetodit: WriteRegistry).

Veenduge, et DataModule on esimene loodud vorm!

Kui proovite seda lihtsat projekti ise luua, võib teil rakenduse käivitamisel tekkida juurdepääsu rikkumise erandeid.
Vaikimisi saab rakendusele lisatud esimene vorm MainForm (esimene loodud vorm). Kui lisate rakendusele andmemooduli, lisatakse see moodul, mis luuakse pärast põhivormi, automaatsete vormide loendisse.
Kui proovite MainFormi sündmusel OnCreate helistada mõnele andmemooduli omadustele või meetoditele, saate juurdepääsu rikkumise erandi - kuna andmesoodulit pole veel loodud.
Selle probleemi lahendamiseks peate andmemooduli loodud järjekorda käsitsi muutma - ja määrama selle selliseks esimene vorm, mille saab rakendus luua (kasutades kas dialoogi Projekti atribuudid või redigeerides Projektide lähtefail).

Kuna andmemoodul on loodud enne põhivormi, saate andmevormidest meetodeid turvaliselt helistada MainFormi sündmusel OnCreate.

instagram story viewer