Hoe de database-verbindingsreeks dynamisch te construeren

Als je klaar bent met je Delphi database-oplossing, de laatste stap is om deze met succes op de computer van de gebruiker te implementeren.

ConnectionString On-The-Fly

Als u dbGo (ADO) -componenten gebruikte, zijn deVerbindingsdraad eigendom van de TADOConnectie specificeert de verbindingsinformatie voor het gegevensarchief.

Het is duidelijk dat bij het maken van databasetoepassingen die op verschillende machines moeten worden uitgevoerd, de verbinding met de gegevensbron niet hard moet zijn gecodeerd in het uitvoerbare bestand. Met andere woorden, de database kan zich overal op de computer van de gebruiker bevinden (of op een andere computer) computer in een netwerk) - de verbindingsreeks die wordt gebruikt in het TADOConnection-object moet worden gemaakt op runtime. Een van de voorgestelde plaatsen om de verbindingsreeksparameters op te slaan, is de Windows-register (of u kunt besluiten om de 'gewone' INI-bestanden).

Over het algemeen moet u de verbindingsreeks tijdens de uitvoering maken

instagram viewer

a) plaats het volledige pad naar de database in het register; en
b) lees elke keer dat u uw toepassing start de informatie uit het register, "maak" de ConnectionString en "open" de ADOConnection.

Gegevensbestand... Aansluiten!

Om u te helpen het proces te begrijpen, hebben we een voorbeeld "skelet" -applicatie gemaakt die bestaat uit één formulier (hoofdformulier van de applicatie) en een gegevensmodule. De datamodules van Delphi bieden een handige organisatorische tool die wordt gebruikt om de delen van uw applicatie te isoleren die omgaan met databaseconnectiviteit en bedrijfsregels.

De OnCreate In de datamodule plaatst u de code om de ConnectionString dynamisch te construeren en verbinding te maken met de database.

procedure TDM.DataModuleCreate (afzender: TObject); beginnenals DBConnect vervolgens
ShowMessage ('Verbonden met database!')
anders
ShowMessage ('NIET verbonden met database!'); einde;

Notitie: De naam van de gegevensmodule is "DM". De naam van de component TADOConnection is "AdoConn".

De DBConnect functie doet het daadwerkelijke werk van het verbinden met de database, hier is de code:

function TDM.DBConnect: boolean; var
conStr: string; Servernaam, DBName: string; beginnenServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Provider = sqloledb;' + 'Data Source =' + ServerName + ';' + 'Initial Catalog =' + DBName + ';' + 'Gebruikers-ID = myUser; Wachtwoord = myPasword '; Resultaat: = onwaar; AdoConn. Dichtbij; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = False;als (NIET AdoConn. Verbonden) vervolgensproberen
AdoConn. Open; Resultaat: = Waar; behalveAan E: uitzondering DoenbeginnenMessageDlg ('Er is een fout opgetreden bij het verbinden met. de databank. Fout: '+ # 13 # 10 + e. Message, mtError, [mbOk], 0);alsNIET TDatabasePromptForm. Uitvoeren (servernaam, DBnaam)
vervolgens
Resultaat: = onwaar. andersbeginnen
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // roep deze functie op
Resultaat: = DBConnect; einde; einde; einde; einde; //DBConnect

De DBConnect-functie maakt verbinding met de MS SQL Server-database - de ConnectionString wordt opgebouwd met behulp van de lokale connStr variabel.

De naam van de databaseserver wordt opgeslagen in de Server naam variabele, wordt de naam van de database in de DBName variabel. De functie begint met het lezen van die twee waarden uit het register (met behulp van de aangepaste ReadRegistry () procedure). Zodra de ConnectionString is samengesteld, bellen we eenvoudigweg AdoConn. Open methode. Als deze aanroep "true" retourneert, hebben we met succes verbinding gemaakt met de database.

Opmerking: Aangezien we expliciet aanmeldingsgegevens doorgeven via de ConnectionString, is de module Omdat de gegevens dat is gemaakt vóór het hoofdformulier, kunt u de methoden veilig oproepen vanuit de gegevensmodule in OnCreate van MainForm evenement.Login Prompt eigenschap is ingesteld op false om een ​​onnodig aanmeldingsvenster te voorkomen.

Het "plezier" begint als er een uitzondering optreedt. Hoewel er vele redenen kunnen zijn waarom de Open-methode mislukt, gaan we ervan uit dat de servernaam of de databasenaam slecht is.
Als dit het geval is, geven we de gebruiker de kans om de juiste parameters op te geven door een aangepast dialoogvenster weer te geven.
De voorbeeldtoepassing bevat ook een extra formulier (DatabasePromptForm) waarmee de gebruiker de server en de databasenaam voor de component Verbinding kan opgeven. Dit eenvoudige formulier biedt slechts twee bewerkingsvakken, als u een gebruiksvriendelijkere interface wilt bieden, dat zou kunnen voeg twee ComboBoxen toe en vul deze door beschikbare SQL-servers op te sommen en databases op te halen op een SQL Server.

Het DatabasePrompt-formulier biedt een aangepast klasse methode genaamd Uitvoeren die twee variabele (var) parameters accepteert: Servernaam en DBnaam.

Met de "nieuwe" gegevens die door een gebruiker worden verstrekt (server- en databasenaam), roepen we eenvoudig de functie DBConnect () opnieuw aan (recursief). Natuurlijk wordt de informatie eerst opgeslagen in het register (met een andere aangepaste methode: WriteRegistry).

Zorg ervoor dat DataModule Is het eerste "Formulier" gemaakt!

Als u dit eenvoudige project zelf probeert te maken, ondervindt u mogelijk uitzonderingen op Toegangsschending wanneer u de toepassing uitvoert.
Standaard wordt het eerste formulier dat aan de toepassing wordt toegevoegd, het MainForm (het eerste formulier dat wordt gemaakt). Wanneer u een gegevensmodule toevoegt aan de toepassing, wordt de gegevensmodule toegevoegd aan de lijst met "automatisch maken formulieren" als het formulier dat na het hoofdformulier wordt gemaakt.
Als u nu een van de eigenschappen of methoden van de Gegevensmodule probeert aan te roepen in de OnCreate-gebeurtenis van de MainForm, krijgt u een uitzondering Toegangsfout - omdat de gegevensmodule nog niet is gemaakt.
Om dit probleem op te lossen, moet u de gecreëerde volgorde van de gegevensmodule handmatig wijzigen - en instellen op het eerste formulier dat door de toepassing wordt gemaakt (met behulp van het dialoogvenster Projecteigenschappen of door te bewerken de Projecten bronbestand).

Omdat de gegevensmodule vóór het hoofdformulier wordt gemaakt, kunt u de methoden vanuit de gegevensmodule veilig oproepen in de OnCreate-gebeurtenis van MainForm.

instagram story viewer