Home » Tutorials » Datenbanken » Flexible ADO-Connection zur Ansteuerung einer Access-Datenbank

Flexible ADO-Connection zur Ansteuerung einer Access-Datenbank

Einstellungen speichern

Nun wäre es nett, den ConnectionString beim Beenden der Annwendung in die Registry zu schreiben, damit der User ihn nicht immer neu eingeben muss. Beim Programmstart soll der DSN dann natürlich ausgelesen werden – wenn möglich und vorhanden.
Dazu brauchen wir im Datenmodul drei Funktionen, hinter dem Schlüsselwort public. Vorher müssen wir aber noch unter uses im Datenmodul ADOConED einfügen. Dann geht’s an die Funktionen:

unit DatenmodulUnit;

public
  function EditMeineAnwendungDSN(var DSN: string): Boolean;
  function GetMeineAnwendungDSN: string;
  function SetMeineAnwendungDSN(DSN: string): Boolean;

...

function TDataModule2.EditMeineAnwendungDSN(var DSN: string): Boolean;
begin
  EditMeineAnwendungDSN := true;
  if ADOConnection1.Connected then
    if not CloseDatabase then
    begin
      EditMeineAnwendungDSN := false;
      exit;
    end;
  if EditConnectionString(ADOConnection1) then
    DSN:=ADOConnection1.ConnectionString
  else
    EditMeineAnwendungDSN:=false;
end;

function TDataModule2.GetMeineAnwendungDSN: string;
begin
  GetMeineAnwendungDSN:=ADOConnection1.ConnectionString;
end;

function TDataModule2.SetMeineAnwendungDSN(DSN: string): Boolean;
begin
  SetMeineAnwendungDSN:=true;
  if ADOConnection1.Connected then
    if not CloseDatabase then
    begin
      SetMeineAnwendungDSN:=false;
      Exit;
    end;
  ADOConnection1.ConnectionString:=DSN;
end;

Nun werden wir im Hauptformular auf die Funktionen zugreifen. Dazu allerdings zuerst die Unit Registry ganz oben unter uses im Hauptformular einbinden. Die DSN zur Datenbankverbindung wird mit folgendem Code in die Registry geschrieben und wieder ausgelesen:

unit MainUnit;
...

private
  { Private declarations }
  function WriteDSNToRegistry(DSN: string): Boolean;
  function ReadDSNFromRegistry(var DSN: string): Boolean;

...

function TForm1.WriteDSNToRegistry(DSN: String): Boolean;
var Registry: TRegistry;
begin
  WriteDSNToRegistry:=true;
  Registry:=TRegistry.Create;
  Registry.RootKey:=HKEY_LOCAL_MACHINE;
  {Der Registry-Pfad für Ihren Eintrag}
  if not Registry.KeyExists('SoftwareMeinProgMeineAnw') then
  try
    Registry.CreateKey('SoftwareMeinProgMeineAnw');
  except
    Registry.Free;
    WriteDSNToRegistry:=false;
    Exit;
  end;
  try
    if Registry.OpenKey('SoftwareMeinProgMeineAnw', true) then
      Registry.WriteString('DSN', DSN)
    else 
    begin
      MessageDlg('Es konnte nicht in die Registry geschrieben '+
        'werden', mtError, [mbOK], 0);
      WriteDSNToRegistry:=false;
    end;
  finally
    Registry.CloseKey;
    Registry.Free;
  end;
end;

function TForm1.ReadDSNFromRegistry(var DSN: String): Boolean;
var Registry: TRegistry;
begin
  ReadDSNFromRegistry:=true;
  Registry:=TRegistry.Create;
  try
  Registry.RootKey:=HKEY_LOCAL_MACHINE;
  if Registry.KeyExists('SoftwareMeinProgMeineAnw') then 
  begin
    if Registry.OpenKey('SoftwareMeinProgMeineAnw', true) then
      DSN:=Registry.ReadString('DSN')
    else
      ReadDSNFromRegistry:=false;
  end
  else
    ReadDSNFromRegistry:=false;
  finally
    Registry.Free;
  end;
end;