Az adatbázis-kapcsolat karakterláncának dinamikus felépítése

Miután befejezted a Delphi adatbázis megoldás, az utolsó lépés a felhasználó számítógépének sikeres telepítése.

ConnectionString repülés közben

Ha dbGo (ADO) összetevőket használt, akkor aConnectionString tulajdonosa TADOConnection meghatározza az adattár csatlakozási információit.

Nyilvánvaló, hogy különféle gépeken futtatandó adatbázis-alkalmazások létrehozásakor az adatforráshoz való kapcsolódást nem szabad keményen kódolni a végrehajtható fájlban. Más szavakkal, az adatbázis bárhol megtalálható a felhasználó számítógépén (vagy másutt) hálózatban lévő számítógép) - a TADOConnection objektumban használt csatlakozási karakterláncot a következő helyen kell létrehozni: futási idő. Az egyik javasolt hely a kapcsolati karakterlánc paramétereinek tárolására a Windows Registry (vagy dönthet úgy, hogy az "egyszerű" INI fájlok).

Általában a kapcsolati karakterlánc futtatáskor történő létrehozásához meg kell tennie
a) helyezze el a teljes útvonalat az adatbázisba a nyilvántartásba; és
b) minden alkalommal, amikor elindítja az alkalmazást, olvassa el az információkat a nyilvántartásból, "hozzon létre" a ConnectionString-et és "nyissa meg" az ADOConnection-t.

instagram viewer

Adatbázis... Connect!

A folyamat megértésének elősegítésére létrehoztunk egy minta "csontváz" alkalmazást, amely egy űrlapból (az alkalmazás fő formája) és egy adatmodulból áll. A Delphi adatmoduljai kényelmes szervezeti eszközt biztosítanak, amelyet az alkalmazás azon részeinek elkülönítésére használnak, amelyek kezelik az adatbázis-kapcsolatot és az üzleti szabályokat.

Az OnCreate Az adatmodul eseménye az, ahol elhelyezi a kódot a ConnectionString dinamikus felépítéséhez és az adatbázishoz történő csatlakozáshoz.

eljárás TDM.DataModuleCreate (Feladó: TObject); kezdődikha DBConnect azután
ShowMessage ('Csatlakoztatva az adatbázishoz!')
más
ShowMessage ('NEM kapcsolódik az adatbázishoz!'); vég;

jegyzet: Az adatmodul neve "DM". A TADOConnection összetevő neve "AdoConn".

Az DBConnect függvény elvégzi az adatbázishoz való kapcsolódás tényleges munkáját, itt van a kód:

function TDM.DBConnect: logikai; var
conStr: karakterlánc; ServerName, DBName: string; kezdődikServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Szolgáltató = sqloledb;' + 'Data Source =' + ServerName + ';' + 'Kezdeti katalógus =' + DBName + ';' + 'Felhasználói azonosító = myUser; Password = myPasword '; Eredmény: = hamis; AdoConn. Bezárás; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Hamis;ha (NEM AdoConn. Csatlakoztatva) azutánpróbáld ki
AdoConn. Nyisd ki; Eredmény: = true; kivévetovább E: Kivétel csinálkezdődikMessageDlg ('Hiba történt a. az adatbázis. Hiba: '+ # 13 # 10 + e. Üzenet, mtError, [mbOk], 0);haNEM TDatabasePromptForm. Végrehajtás (ServerName, DBName)
azután
Eredmény: = hamis. máskezdődik
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // visszahívja ezt a funkciót
Eredmény: = DBConnect; vég; vég; vég; vég; //DBConnect

A DBConnect funkció kapcsolódik az MS SQL Server adatbázishoz - a ConnectionString a helyi felhasználásával készül connStr változó.

Az adatbázis-kiszolgáló nevét a Szerver név változó esetén az adatbázis neve a DBNAME változó. A függvény a két értéknek a rendszerleíró adatbázisból történő kiolvasásával kezdődik (az egyedi használatával ReadRegistry () eljárás). Miután a ConnectionString összeszerelt, egyszerűen felhívjuk AdoConn. Nyisd ki eljárás. Ha ez a hívás "true" -et ad vissza, sikeresen csatlakoztunk az adatbázishoz.

Megjegyzés: Mivel kifejezetten átadjuk a bejelentkezési információkat a ConnectionString-en, az Since data module is a fő űrlap előtt létrehozott, akkor biztonságosan meghívhatja a módszereket a mainForm OnCreate adatmoduljából esemény.LoginPrompt a tulajdonság hamisra van állítva, hogy elkerülje a felesleges bejelentkezési párbeszédpanelt.

Kivétel esetén a "szórakozás" indul. Bár az Open módszer sikertelenségének számos oka lehet, feltételezzük, hogy a kiszolgáló neve vagy az adatbázis neve rossz.
Ebben az esetben lehetőséget adunk a felhasználónak, hogy az egyedi párbeszéd űrlap megjelenítésével meghatározza a helyes paramétereket.
A mintaalkalmazás tartalmaz még egy további űrlapot (DatabasePromptForm), amely lehetővé teszi a felhasználó számára a kiszolgáló és az adatbázisnév megadását a Connection összetevő számára. Ez az egyszerű forma csak két szerkesztődobozt tartalmaz, ha felhasználóbarát felületet szeretne biztosítani, akkor ezt megteheti adjon hozzá két ComboBox-ot, és töltse ki azokat a rendelkezésre álló SQL-kiszolgálók felsorolásával és az SQL-kiszolgálón lévő adatbázisok lekérésével.

A DatabasePrompt képernyő egyéni lehetőséget biztosít osztály módszer neve Végrehajtás, amely két változó (var) paramétert elfogad: ServerName és DBName.

A felhasználó által biztosított "új" adatokkal (szerver és adatbázis neve) egyszerűen újrahívjuk a DBConnect () függvényt (rekurzívan). Természetesen az információkat először a nyilvántartásban tárolják (egy másik egyedi módszerrel: WriteRegistry).

Győződjön meg róla, hogy a DataModule létrehozta az első "űrlapot"!

Ha önmagában próbálja meg létrehozni ezt az egyszerű projektet, akkor az alkalmazás futtatásakor hozzáférés-megsértési kivételeket tapasztalhat.
Alapértelmezés szerint az alkalmazáshoz hozzáadott első űrlap a MainForm lesz (az első létrehozott). Amikor adatmodult ad hozzá az alkalmazáshoz, az adatmodul hozzáadódik az "automatikus létrehozási űrlapok" listájához, mint a fő űrlap után létrehozott forma.
Ha most megpróbálja meghívni az adatmodul bármely tulajdonságát vagy módszerét a MainForm OnCreate eseményében, akkor hozzáférés-megsértési kivételt kap - mivel az adatmodul még nincs létrehozva.
A probléma megoldásához manuálisan meg kell változtatnia az adatmodul létrehozott sorrendjét - és beállítania kell azt az első űrlap, amelyet az alkalmazás hoz létre (akár a Projekt tulajdonságai párbeszédpanelen, akár a szerkesztés segítségével) az Projekt forrásfájl).

Mivel az adatmodult a fő űrlap előtt hozták létre, biztonságosan meghívhatja a módszereket az adatmodulból a MainForm OnCreate eseményében.