Mit passwortgeschützten Paradox- und dBASE-Tabellen arbeiten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenbanksitzungen verwalten - Index

Hinweis: Die Borland Database Engine (BDE) ist veraltet und wird nicht mehr weiterentwickelt. Die BDE wird Unicode beispielsweise nie unterstützen. Sie sollten mit der BDE keine neuen Entwicklungen vornehmen. Überprüfen Sie, ob Sie Ihre vorhandenen Datenbankanwendungen nicht von der BDE nach dbExpress migrieren können.

Eine Sitzungskomponente kann Passwörter für passwortgeschützte Paradox- und dBASE-Tabellen speichern. Sobald Sie einer Sitzung ein Passwort hinzufügen, kann die Anwendung Tabellen öffnen, die durch dieses Passwort geschützt sind. Sobald Sie das Passwort von der Sitzung, kann die Anwendung die Tabellen, die dieses Passwort verwenden, nicht mehr öffnen, bis Sie dieses wieder einfügen.

Methode AddPassword verwenden

Die Methode AddPassword bietet die Möglichkeit, einer Anwendung ein Passwort für eine Sitzung zu verwenden, ehe eine verschlüsselte Paradox- oder dBase-Tabelle geöffnet wird, die dieses Passwort als Zugriffsberechtigung erfordert. Fügen Sie das Passwort nicht in die Sitzung ein, erscheint ein Dialogfeld mit einer Passwortabfrage vom Benutzer, sobald die Anwendung versucht, die passwortgeschützte Tabelle zu öffnen.

AddPassword kann einen Parameter enthalten, einen String, der das notwendige Passwort enthält. Die Methode AddPassword lässt sich beliebig oft aufrufen, um weitere Passwörter nacheinander einzugeben, wenn ein Zugang zu Tabellen ermöglicht werden soll, die verschiedene Passwörter verwenden.

var
  Passwrd: String;
begin
  Passwrd := InputBox('Passwort eingeben', 'Password:', );
  Session.AddPassword(Passwrd);
  try
    Table1.Open;
  except
    ShowMessage('Tabelle kann nicht geöffnet werden!');
    Application.Terminate;
  end;
end;
AnsiString PassWrd;
PassWrd = InputBox("Passwort eingeben", "Password", "");
Session->AddPassword(PassWrd);
try
{
  Table1->Open();
}
catch (...)
{
  ShowMessage("Tabelle kann nicht geöffnet werden!");
  Application->Terminate();
}

Hinweis:  Die Verwendung der Funktion InputBox in obigem Code dient ausschließlich Demonstrationszwecken. In einer realen Anwendung sollten Sie Passwortfunktionen verwenden, die das eingegebene Passwort verbergen, wie die Funktion PasswordDialog oder ein Kundenformular.

Die Schaltfläche Hinzufügen im Dialogfeld Funktion von PasswordDialog hat denselben Effekt wie die Methode AddPassword.

if PasswordDialog(Session) then
  Table1.Open
else
  ShowMessage('Fehlendes Passwort, Tabelle kann nicht geöffnet werden!');
end;
if (PasswordDlg(Session))
  Table1->Open();
else
  ShowMessage("Fehlendes Passwort, Tabelle kann nicht geöffnet werden!");

Die Methoden RemovePassword und RemoveAllPasswords

RemovePassword löscht ein zuvor hinzugefügtes Passwort aus dem Arbeitsspeicher. Die Methode RemovePassword kann einen Parameter enthalten, jenen String, der das zu löschende Passwort enthält.

Session.RemovePassword('secret');
Session->RemovePassword("secret");

RemoveAllPasswords löscht alle zuvor hinzugefügten Passwörter aus dem Arbeitsspeicher.

Session.RemoveAllPasswords;
Session->RemoveAllPasswords();

Methode GetPassword und Ereignis OnPassword

Das Ereignis OnPassword ermöglicht es zu steuern, wie eine Anwendung Passwörter für Paradox- und dBASE-Tabellen liefert, sofern diese erforderlich sind. Binden Sie eine Ereignisbehandlung für das Ereignis OnPassword ein, wenn Sie das Standardverhalten zur Behandlung von Passwörtern überschreiben möchten. Wenn Sie keine Ereignisbehandlung einbinden, wird ein Dialogfeld angezeigt, das zur Eingabe eines Passwortes auffordert, ein weiteres Verhalten ist nicht vorgesehen – entweder gelingt der Versuch, die Tabelle zu öffnen oder es wird eine Ausnahme ausgelöst.

Möchten Sie eine Ereignisbehandlung für OnPassword definieren, sollten Sie darin zweierlei festlegen: Den Aufruf der Methode AddPassword und die Einstellung des Wertes True für den Parameter Continue der Ereignisbehandlung. Die Methode AddPassword gibt einen String an die Sitzung weiter, der als Passwort für die Tabelle verwendet wird. Der Parameter Continue übermittelt an Delphi die Anweisung, dass für diesen Versuch eine Tabelle zu öffnen keine weitere Aufforderung zur Passworteingabe notwendig ist. Der voreingestellte Wert für Continue ist False und dieser muss explizit durch dem Wert True ausgetauscht werden. Ist für Continue der Wert False eingestellt, wird das Ereignis OnPassword nach der Ausführung der Ereignisbehandlung erneut ausgelöst – auch wenn mit AddPassword ein gültiges Passwort weitergegeben wurde. Ist für Continue der Wert True eingestellt, scheitert der Versuch, die Tabelle zu öffnen und eine Ausnahme wird ausgelöst, nachdem die Ereignisbehandlung ausgeführt wurde und der mit AddPassword weitergeleitete String kein gültiges Passwort enthält.

OnPassword kann durch zwei Umstände ausgelöst werden: Erstens, den Versuch eine passwortgeschützte Tabelle (dBASE oder Paradox) zu öffnen, wenn für die Sitzung noch kein gültiges Passwort geliefert wurde. (Ist für die Tabelle bereits ein gültiges Passwort geliefert worden, tritt das Ereignis OnPassword nicht ein).

Der zweite Umstand besteht im Aufruf der Methode GetPassword. GetPassword generiert entweder das Ereignis OnPassword oder, wenn für die Sitzung kein Ereignisbehandlung zu OnPassword definiert wurde, zeigt das voreingestellte Dialogfeld an. Die Methode gibt True zurück, wenn die Ereignisbehandlung OnPassword oder das Dialogfeld der Sitzung ein Passwort hinzugefügt haben. False wird zurückgegeben, wenn überhaupt kein Eintrag vorgenommen wurde.

Im folgenden Beispiel wurde die Methode Password als Ereignisbehandlung OnPassword für die voreingestellte Sitzung definiert, indem diese der Eigenschaft OnPassword des globalen Objekts Session zugewiesen wurde.

procedure TForm1.FormCreate(Sender: TObject);
begin
  Session.OnPassword := Password;
end;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Session->OnPassword = Password;
}

In der Methode Password fordert die Funktion InputBox den Benutzer zur Eingabe eines Passworts auf. Dann liefert die Methode AddPassword einfach das Passwort, das im Dialogfeld der Sitzung eingefügt wurde.

procedure TForm1.Password(Sender: TObject; var Continue: Boolean);
var
  Passwrd: String;
begin
  Passwrd := InputBox('Passwort eingeben', 'Password:', );
  Continue := (Passwrd > );
  Session.AddPassword(Passwrd);
end;
void __fastcall TForm1::Password(TObject *Sender, bool &Continue)
{
  AnsiString PassWrd = InputBox("Enter password", "Password:", "");
  Session->AddPassword(PassWrd);
  Continue = (PassWrd > "");
}

Das Ereignis OnPassword (und damit die Ereignisbehandlung Password) wird von dem Versuch ausgelöst, eine passwortgeschützte Tabelle zu öffnen, wie nachstehend dargestellt. Auch wenn der Benutzer in der Ereignisbehandlung für das Ereignis OnPassword zur Eingabe eine Passworts aufgefordert wird, kann der Versuch die Tabelle zu öffnen fehlschlagen, wenn das eingegebene Passwort ungültig ist oder etwas anderes schief läuft.

procedure TForm1.OpenTableBtnClick(Sender: TObject);
const
CRLF = #13 + #10;
begin
  try
    Table1.Open;                               { diese Zeile löst das Ereignis OnPassword aus }
  except
    on E:Exception do begin                             { Exception, wenn die Tabelle nicht geöffnet werden kann }
      ShowMessage('Error!' + CRLF +             { Fehleranzeiger erläutert das Geschehen }
        E.Message + CRLF +
        'Anwendung beenden...');
      Application.Terminate;                                       { Ende der Anwendung }
    end;
  end;
end;
void __fastcall TForm1::OpenTableBtnClick(TObject *Sender)
{
  try
  {
    // diese Zeile löst das Ereignis OnPassword aus
    Table1->Open();
  }
  // Exception, wenn Tabelle nicht geöffnet werden kann
  catch (...)
  {
    ShowMessage("Tabelle kann nicht geöffnet werden!");
    Application->Terminate();
  }
}

Siehe auch