Slik konstruerer du databasetilkoblingsstrengen dynamisk

click fraud protection

Når du er ferdig med din Delphi databaseløsning, er det siste trinnet å distribuere den brukerens datamaskin.

ConnectionString On-The-Fly

Hvis du brukte dbGo (ADO) komponenter,Connection eiendommen til TADOConnection spesifiserer tilkoblingsinformasjonen for datalageret.

Når du oppretter databaseapplikasjoner som skal kjøres på forskjellige maskiner, bør tilkoblingen til datakilden ikke være hardkodet i den kjørbare filen. Med andre ord, databasen kan være plassert hvor som helst på brukerens datamaskin (eller på en annen datamaskin i et nettverk) - tilkoblingsstrengen som brukes i TADOConnection-objektet må opprettes kl løpetid. Et av de foreslåtte stedene å lagre parameterne for tilkoblingsstrenger er Windows-register (eller du kan bestemme deg for å bruke "vanlig" INI-filer).

Generelt, for å opprette tilkoblingsstrengen på kjøretid du må
a) plassere hele banen til databasen i registeret; og
b) hver gang du starter søknaden din, må du lese informasjonen fra registeret, "opprette" ConnectionString og "åpne" ADOConnection.

instagram viewer

Database... Koble!

For å hjelpe deg med å forstå prosessen har vi laget en prøve "skjelett" -applikasjon som består av en form (hovedformen for applikasjonen) og en datamodul. Delphis datamoduler gir et praktisk organisasjonsverktøy som brukes til å isolere delene av applikasjonen din som håndterer databasetilkobling og forretningsregler.

De onCreate hendelsen i datamodulen er der du plasserer koden for dynamisk å konstruere ConnectionString og koble til databasen.

fremgangsmåte TDM.DataModuleCreate (avsender: TObject); begynnehvis DBConnect deretter
ShowMessage ('Tilkoblet database!')
ellers
ShowMessage ('IKKE koblet til database!'); slutt;

Merk: Navnet på datamodulen er "DM". Navnet på TADOConnection-komponenten er "AdoConn".

De DBConnect funksjonen gjør det faktiske arbeidet med å koble til databasen, her er koden:

function TDM.DBConnect: boolean; Var
conStr: streng; Servernavn, DBName: streng; begynneServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Tilbyder = sqloledb;' + 'Datakilde =' + Servernavn + ';' + 'Opprinnelig katalog =' + DBName + ';' + 'Bruker-ID = myUser; Password = myPasword '; Resultat: = falsk; AdoConn. Lukk; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Falsk;hvis (IKKE AdoConn. Tilkoblet) deretterprøve
AdoConn. Åpen; Resultat: = true; unntatt E: Unntak gjørebegynneMessageDlg ('Det oppstod en feil ved tilkobling til. databasen. Feil: '+ # 13 # 10 + e. Melding, mtError, [mbOk], 0);hvisIKKE TDatabasePromptForm. Utfør (Servernavn, DBName)
deretter
Resultat: = usant. ellersbegynne
WritRegistry ('DataSource', ServerName); WritRegistry ('DataCatalog', DBName); // husk denne funksjonen
Resultat: = DBConnect; slutt; slutt; slutt; slutt; //DBConnect

DBConnect-funksjonen kobles til MS SQL Server-databasen - ConnectionString er konstruert ved å bruke den lokale connStr variabel.

Navnet på databaseserveren er lagret i Server navn variabelen, blir navnet på databasen holdt i dbnavn variabel. Funksjonen starter med å lese de to verdiene fra registeret (ved bruk av tilpasset ReadRegistry () fremgangsmåte). Når ConnectionString er satt sammen, ringer vi ganske enkelt da AdoConn. Åpen metode. Hvis denne samtalen returnerer "sann", har vi koblet oss til databasen.

Merk: Siden vi eksplisitt sender innloggingsinformasjon gjennom ConnectionString, er siden datamodulen opprettet før hovedskjemaet, kan du trygt ringe metodene fra datamodulen i MainForms OnCreate begivenhet.LoginPrompt egenskapen er satt til usann for å forhindre unødvendig innloggingsdialog.

Den "morsomme" starter hvis et unntak inntreffer. Selv om det kan være mange grunner til at Open-metoden mislykkes, la oss anta at servernavnet eller databasenavnet er dårlig.
Hvis dette er tilfelle, gir vi en sjanse til brukeren å spesifisere de riktige parametrene ved å vise et tilpasset dialogskjema.
Eksempelapplikasjonen inneholder også ett tilleggsskjema (DatabasePromptForm) som gjør det mulig for brukeren å spesifisere serveren og databasenavnet for Connection-komponenten. Dette enkle skjemaet inneholder bare to redigeringsbokser, hvis du vil gi et mer brukervennlig grensesnitt, kan du gjøre det legg til to ComboBoxer og fyll dem ved å oppgi tilgjengelige SQL-servere og hente databaser på en SQL Server.

DatabasePrompt-skjemaet gir en tilpasset klassemetode kalt Execute som godtar to variabelparametere (var): Servernavn og DBName.

Med de "nye" dataene som leveres av en bruker (server- og databasenavn), kaller vi ganske enkelt DBConnect () -funksjonen igjen (rekursivt). Naturligvis blir informasjonen først lagret i registeret (ved hjelp av en annen tilpasset metode: WritRegistry).

Sørg for at DataModule er det første "skjemaet" som er laget!

Hvis du prøver å lage dette enkle prosjektet på egen hånd, kan du oppleve unntak av brudd på tilgangsbrudd når du kjører applikasjonen.
Som standard blir det første skjemaet som er lagt til applikasjonen, MainForm (det første opprettet). Når du legger til en datamodul til applikasjonen, legges datamodulen til i listen over "auto-create forms" som skjemaet som blir opprettet etter hovedskjemaet.
Hvis du prøver å kalle noen av datamodulens egenskaper eller metoder i OnCreate-hendelsen i MainForm, vil du få et unntak for tilgangsbrudd - da datamodulen ennå ikke er opprettet.
For å løse dette problemet, må du manuelt endre den opprettede rekkefølgen på datamodulen - og stille den til å være den det første skjemaet som blir opprettet av applikasjonen (enten ved hjelp av dialogboksen Prosjektegenskaper eller ved redigering de Prosjekter kildefil).

Siden datamodulen er opprettet før hovedskjemaet, kan du trygt ringe metodene fra datamodulen i MainForms OnCreate-hendelse.

instagram story viewer