Sådan konstrueres databaseforbindelsesstrengen dynamisk

click fraud protection

Når du er færdig med din Delphi databaseløsning, er det sidste trin at med succes implementere det brugerens computer.

ConnectionString On-The-Fly

Hvis du brugte dbGo (ADO) komponenter,ConnectionString ejendom af TADOConnection specificerer forbindelsesoplysningerne til datalageret.

Naturligvis, når du opretter databaseapplikationer, der skal køres på forskellige maskiner, skal forbindelsen til datakilden ikke være hardkodet i eksekverbar. Med andre ord kan databasen være placeret hvor som helst på brugerens computer (eller på en anden computer i et netværk) - forbindelsestrengen, der bruges i TADOConnection-objektet, skal oprettes kl kørselstid. Et af de foreslåede steder at gemme forbindelsesstrengparametrene er Windows-register (eller du kan beslutte at bruge "almindelig" INI-filer).

Generelt skal du oprette forbindelsestrengen på kørselstidspunktet
a) placere den fulde sti til databasen i registreringsdatabasen; og
b) hver gang du starter din ansøgning, skal du læse oplysningerne fra registreringsdatabasen, "oprette" ConnectionString og "åbne" ADOC-forbindelsen.

instagram viewer

Database... Forbinde!

For at hjælpe dig med at forstå processen har vi oprettet en prøve "skelet" -applikation, der består af en form (applikationens hovedform) og et datamodul. Delphis datamoduler leverer et praktisk organisatorisk værktøj, der bruges til at isolere de dele af din applikation, der håndterer databaseforbindelse og forretningsregler.

Det onCreate begivenhed af datamodulet er det sted, hvor du placerer koden for dynamisk at konstruere ConnectionString og oprette forbindelse til databasen.

procedure TDM.DataModuleCreate (Afsender: TObject); begyndehvis DBConnect derefter
ShowMessage ('Tilsluttet til database!')
andet
ShowMessage ('IKKE tilsluttet database!'); ende;

Bemærk: Navnet på datamodulet er "DM". Navnet på TADOConnection-komponenten er "AdoConn".

Det DBConnect funktion udfører det faktiske arbejde med at oprette forbindelse til databasen, her er koden:

funktion TDM.DBConnect: boolsk; Var
conStr: streng; Servernavn, DBName: streng; begyndeServernavn: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Udbyder = sqloledb;' + 'Datakilde =' + Servernavn + ';' + 'Initial Catalog =' + DBName + ';' + 'Bruger-id = myUser; Password = myPasword '; Resultat: = falsk; AdoConn. Tæt; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Falsk;hvis (IKKE AdoConn. forbundet) derefterprøve
AdoConn. Åben; Resultat: = true; undtagen E: Undtagelse gørebegyndeMessageDlg ('Der opstod en fejl ved forbindelse til. databasen. Fejl: '+ # 13 # 10 + e. Meddelelse, mtError, [mbOk], 0);hvisIKKE TDatabasePromptForm. Udfør (Servernavn, DBName)
derefter
Resultat: = falsk. andetbegynde
WriteRegistry ('DataSource', ServerName); WritRegistry ('DataCatalog', DBName); // husk denne funktion
Resultat: = DBConnect; ende; ende; ende; ende; //DBConnect

DBConnect-funktionen opretter forbindelse til MS SQL Server-databasen - ConnectionString er konstrueret vha. Den lokale connStr variabel.

Navnet på databaseserveren gemmes i Server navn variabel, databasens navn opbevares i DB-navn variabel. Funktionen starter med at læse disse to værdier fra registreringsdatabasen (ved hjælp af brugerdefineret ReadRegistry () procedure). Når ConnectionString er samlet, ringer vi blot til det AdoConn. Åben metode. Hvis dette opkald returnerer "sandt", har vi haft forbindelse til databasen.

Bemærk: Da vi eksplicit overfører loginoplysninger via ConnectionString, er Datamodulet oprettet før hovedformularen, kan du med sikkerhed kalde metoderne fra datamodulet i MainForms OnCreate begivenhed.LoginPrompt egenskab er indstillet til usand for at forhindre en unødvendig login-dialog.

Den "sjove" starter, hvis der sker en undtagelse. Selvom der muligvis er mange grunde til, at Open-metoden mislykkes, lad os antage, at servernavnet eller databasenavnet er dårligt.
Hvis dette er tilfældet, giver vi en chance for brugeren at specificere de korrekte parametre ved at vise en brugerdefineret dialogform.
Eksempelapplikationen indeholder også en yderligere formular (DatabasePromptForm), der gør det muligt for brugeren at specificere serveren og databasenavnet for forbindelseskomponenten. Denne enkle form indeholder kun to redigeringsbokse, hvis du ønsker at give en mere brugervenlig grænseflade, kunne du gøre det tilføj to ComboBoxes og fyld dem ved at opregne tilgængelige SQL-servere og hente databaser på en SQL Server.

DatabasePrompt-formularen giver en brugerdefineret klassemetode navngivet Udfør, der accepterer to variable (var) parametre: Servernavn og DBName.

Med de "nye" data, der leveres af en bruger (server- og databasenavn), kalder vi blot DBConnect () -funktionen igen (rekursivt). Informationen gemmes naturligvis først i registreringsdatabasen (ved hjælp af en anden brugerdefineret metode: WritRegistry).

Sørg for, at DataModule er den første "form", der er oprettet!

Hvis du prøver at oprette dette enkle projekt på egen hånd, oplever du muligvis undtagelser fra adgangsovertrædelse, når du kører applikationen.
Som standard bliver den første formular, der tilføjes til applikationen, MainForm (den første oprettet). Når du tilføjer et datamodul til applikationen, føjes datamodulet til listen over "auto-oprette formularer" som den formular, der oprettes efter hovedformularen.
Hvis du nu prøver at kalde nogen af ​​datamodulets egenskaber eller metoder i OnCreate-begivenheden i MainForm, får du en undtagelse af adgangsovertrædelse - da datamodulet ikke er oprettet endnu.
For at løse dette problem skal du manuelt ændre den oprettede rækkefølge for datamodulet - og indstille det til at være det den første formular, der oprettes af applikationen (enten ved hjælp af dialogboksen Projektegenskaber eller ved redigering det Projekter kildefil).

Da datamodulet er oprettet før hovedformularen, kan du med sikkerhed kalde metoderne fra datamodulet i MainForms OnCreate-begivenhed.

instagram story viewer