Manipulation des tables Paradox et dBASE protégées par mot de passe
Remonter à Gestion des sessions de bases de données - Index
Remarque : Le moteur de base de données Borland (BDE, Borland Database Engine) a été déprécié. Il ne sera donc pas amélioré. Par exemple, le BDE ne prendra jamais en charge Unicode. Vous ne devriez pas entreprendre de nouveaux développements avec BDE. Prévoyez plutôt de migrer vos applications de bases de données existantes de BDE vers dbExpress.
Un composant session peut stocker des mots de passe pour les tables Paradox et dBASE protégées par mot de passe. Une fois un mot de passe ajouté à la session, votre application peut ouvrir les tables protégées par ce mot passe. Si vous retirez le mot de passe de la session, l'application ne pourra plus ouvrir les tables qui l'utilisent tant que vous ne l'ajoutez pas de nouveau à la session.
Sommaire
Utilisation de la méthode AddPassword
La méthode AddPassword offre une alternative pour qu'une application puisse fournir un mot de passe pour une session avant d'ouvrir une table Paradox ou dBase cryptée qui requiert un mot de passe pour son accès. Si vous n'ajoutez pas le mot de passe à la session, quand l'application tente d'ouvrir une table protégée par mot de passe, une boîte de dialogue demande le mot de passe à l'utilisateur.
AddPassword prend un paramètre, une chaîne contenant le mot de passe à utiliser. Vous pouvez appeler AddPassword autant de fois que nécessaire pour ajouter des mots de passe (un à la fois) pour accéder à des tables protégées par des mots de passe différents.
var
Passwrd: String;
begin
Passwrd := InputBox('Entrez le mot de passe', 'Mot de passe:', '');
Session.AddPassword(Passwrd);
try
Table1.Open;
except
ShowMessage('Impossible d''ouvrir la table!');
Application.Terminate;
end;
end;
AnsiString PassWrd;
Passwrd = InputBox('Entrez le mot de passe', 'Mot de passe:', '');
Session->AddPassword(PassWrd);
try
{
Table1->Open();
}
catch(...)
{
ShowMessage("Impossible d'ouvrir la table!");
Application->Terminate();
}
Remarque : L'emploi de la fonction InputBox, ci-dessus, est pour démonstration seulement. Dans une application réelle, utilisez les fonctions de saisie de mot de passe, qui masquent ce dernier à mesure de sa frappe, comme la fonction PasswordDialog ou une fiche personnalisée.
Le bouton Ajouter de la boîte de dialogue de la fonction PasswordDialog a le même effet que la méthode AddPassword.
if PasswordDialog(Session) then
Table1.Open
else
ShowMessage('Aucun mot de passe fourni, impossible d''ouvrir la table !');
end;
if (PasswordDlg(Session))
Table1->Open();
else
ShowMessage('Aucun mot de passe fourni, impossible d''ouvrir la table !');
Utilisation des méthodes RemovePassword et RemoveAllPasswords
RemovePassword supprime de la mémoire un mot de passe précédemment ajouté. RemovePassword prend un paramètre, une chaîne contenant le mot de passe à supprimer.
Session.RemovePassword('secret');
Session->RemovePassword("secret");
RemoveAllPasswords supprime de la mémoire tous les mots de passe précédemment ajoutés.
Session.RemoveAllPasswords;
Session->RemoveAllPasswords();
Utilisation de la méthode GetPassword et de l'événement OnPassword
'L'événement DBTables.OnPassword vous permet de contrôler la façon dont votre application fournit les mots de passe pour les tables Paradox et dBASE quand c'est nécessaire. Fournissez un gestionnaire pour l'événement OnPassword si vous ne voulez pas du comportement par défaut. Si vous n'en fournissez pas, Delphi présente une boîte de dialogue par défaut pour l'entrée du mot de passe, sans comportement spécial — si l'essai d'ouverture de la table ne réussit pas, une exception est déclenchée.
Si vous fournissez un gestionnaire pour l'événement OnPassword, vous devez faire deux choses dans ce gestionnaire : appeler la méthode AddPassword et définir le paramètre Continue
du gestionnaire d'événement à True. La méthode AddPassword passe à la session une chaîne à utiliser comme mot de passe pour la table. Le paramètre Continue indique à Delphi qu'il n'est plus nécessaire d'inviter l'utilisateur à saisir le mot de passe pour cet essai d'ouverture de table. La valeur par défaut de Continue
a pour valeur False, et il faut donc la mettre explicitement à True. Si Continue
a pour valeur False après que le gestionnaire d'événement a fini son exécution, un événement OnPassword est de nouveau déclenché, même si un mot de passe valide a été passé par AddPassword. Si Continue
a pour valeur True après l'exécution du gestionnaire d'événement et si la chaîne passée avec AddPassword n'est pas un mot de passe valide, l'essai d'ouverture de la table échoue et une exception est déclenchée.
OnPassword peut être déclenchée dans deux circonstances. La première est un essai d'ouverture d'une table protégée par mot de passe (dBASE ou Paradox) quand un mot de passe valide n'a pas encore été fourni à la session. (Si un mot de passe valide pour cette table a déjà été fourni, l'événement OnPassword ne se produit pas.)
L'autre circonstance est un appel à la méthode GetPassword. GetPassword génère un événement OnPassword, ou, si la session n'a pas de gestionnaire d'événement OnPassword, affiche une boîte de dialogue de mot de passe par défaut. Elle renvoie True si le gestionnaire d'événement OnPassword ou la boîte de dialogue par défaut a ajouté un mot de passe à la session, et False si aucune entrée n'a été effectuée.
Dans l'exemple suivant, la méthode Password est désignée comme le gestionnaire d'événement OnPassword pour la session par défaut,' en l'affectant à la propriété OnPassword de l'objet global Session.
procedure TForm1.FormCreate(Sender: TObject);
begin
Session.OnPassword := Password;
end;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Session->OnPassword = Password;
}
Dans la méthode Password, la fonction InputBox demande un mot de passe à l'utilisateur. La méthode AddPassword fournit alors par programme le mot de passe saisi dans la boîte de dialogue à la session.
procedure TForm1.Password(Sender: TObject; var Continue: Boolean);
var
Passwrd: String;
begin
Passwrd := InputBox('Entrez le mot de passe', 'Mot de passe:', '');
Continue := (Passwrd > '');
Session.AddPassword(Passwrd);
end;
void __fastcall TForm1::Password(TObject *Sender, bool &Continue)
{
AnsiString Passwrd = InputBox('Entrez le mot de passe', 'Mot de passe:', '');
Session->AddPassword(PassWrd);
Continue = (PassWrd > "");
}
L'événement OnPassword (et donc le gestionnaire d'événement Password) est déclenché par un essai d'ouverture d'une table protégée par mot de passe, comme présenté ci-dessus. Même si l'utilisateur est invité à fournir un mot de passe dans le gestionnaire d'événement OnPassword, l'essai d'ouverture peut échouer en cas de saisie d'un mot de passe incorrect ou si une autre erreur survient.
procedure TForm1.OpenTableBtnClick(Sender: TObject);
const
CRLF = #13 + #10;
begin
try
Table1.Open; { cette ligne déclenche l'événement OnPassword }
except
on E:Exception do begin { exception si impossible d'ouvrir la table }
ShowMessage('Erreur !' + CRLF + { affiche un message d'erreur expliquant ce qui s'est produit }
E.Message + CRLF +
'Fermeture de l'application...');
Application.Terminate; { fin de l'application }
end;
end;
end;
void __fastcall TForm1::OpenTableBtnClick(TObject *Sender)
{
try
{
// cette ligne déclenche l'événement OnPassword
Table1->Open();
}
// exception si impossible d'ouvrir la table
catch(...)
{
ShowMessage("Impossible d'ouvrir la table!");
Application->Terminate();
}
}