Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#8

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 16. Mär 2010, 07:29
Hallo,

habe bei einem Dienst mal eine Lösung der folgenden Art eingebaut:
Delphi-Quellcode:
function NetzlaufwerkVerbinden(Laufwerk: string;
                               Pfad: string;
                               Username: string;
                               Password: string;
                               RestoreAtLogon: Boolean) : DWORD;
var
  NetResource: TNetResource;
  dwFlags: DWORD;
begin
  with NetResource do begin
    dwType := RESOURCETYPE_DISK;
    lpLocalName := PChar(Laufwerk);
    lpRemoteName := PChar(Pfad);
    lpProvider := nil;
  end;
  if (RestoreAtLogon) then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0;
  Result := WNetAddConnection2(NetResource, PChar(Password), PChar(Username), dwFlags);
end;

function NetzlaufwerkTrennen(Laufwerk : String) : DWord;
begin
  Result := WNetCancelConnection(PChar(Laufwerk),true);
end;
Der Aufruf im Dienst kann dann in der folgenden Form erfolgen:
Delphi-Quellcode:
Var
          ini : TIniFile;
          sFreigabe : String;
          sUsername : String;
          sPassword : String;
          bNetUse : Boolean;
begin
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
  sFreigabe := ini.ReadString('Netzverbindung','Freigabe','');
  sUsername := ini.ReadString('Netzverbindung','Username','');
  sPassword := ini.ReadString('Netzverbindung','Password','');
  // Prüfen, ob die gewünschte Laufwerksverbindung schon existiert.
  bNetUse := FileExists('b:\nul');
  if Not bNetUse then begin // Wenn nein
    bNetUse := NetzlaufwerkVerbinden('b:',sFreigabe,sUsername,sPassword,false) = 0;
    Case bNetUse of
      true : Logger.Log('Laufwerksverbindung konnte erstellt werden.');
    else
      Logger.Log('Es konnte keine Laufwerksverbindung nach ' + sFreigabe + ' erstellt werden.');
    End;
  end else begin
    Logger.Log('Es wird die bereits existierende Laufwerksverbindung zu Laufwerk b: genutzt.');
  end;
  if bNetUse then begin
  // Das, was Dein Programm machen soll
   ...
Hierbei wird davon ausgegangen, dass der Laufwerksbuchstabe B: frei ist und uneingeschränkt für eigene Zwecke genutzt werden kann.
Bei dieser Methode muss der Benutzer, unter dessen Anmeldung der Dienst läuft, keine Rechte im Netz haben. Die für die Laufwerksverbindung erforderlichen Benutzerinformationen werden einer INI-Datei entnommen. Das Verzeichnis mit der Accessdatenbank muss über eine Freigabe verfügen, z. B.: "\\Datenbankrechner\Accessverzeichnis" und es muss einen Benutzer mit für die Arbeit ausreichenden Rechte geben. Freigabe, Benutzer und Passwort sind in der INI-Datei zu hinterlegen.
  Mit Zitat antworten Zitat