Objectif :
Un
composant TDataBase permet de rendre disponible une base de données
contenue dans un fichier sous un format connu de Delphi, il est le lien
entre le fichier de base de données et Delphi. Il est envisagé
d'observer deux genres de BD : sans mot de passe et avec mot de passe.
La fiche
principale, le code associé dans la unit
Base de données avec mot de passe
Exécuter
le programme
Pour utiliser pratiquement le composant TDataBase :
La fiche principale du projet :
Pour utiliser un mot de passe, il faut agir
sur deux éléments du TDataBase sa propriété
LoginPrompt
et son gestionnaire d'événement OnLogin.
Etude de la propriété
LoginPrompt :
si "LoginPrompt"=True
alors une boîte de dialogue de connexion apparaît
dès que "Connected" est passé à
True, afin de remplir la clef "USER NAME"
et la clef "PASSWORD" de la propriété
"Params" de Database1 avant la connexion.
Etude de l'évènement
OnLogin :
se produit à la connexion si LoginPrompt=True
afin de permettre
à l'utilisateur de prendre en charge la
saisie du nom d'utilisateur
et du mot de passe
La Unit contenant la fiche de saisie du mot de passe
unit uFDataBaseLoginPerso;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Buttons;
type
TFDataBaseLoginPerso = class(TForm)
ELogin: TEdit;
EPassword: TEdit;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
procedure FormShow(Sender: TObject);
private
{ Déclarations privées
}
public
{ Déclarations publiques
}
end;
var
FDataBaseLoginPerso: TFDataBaseLoginPerso;
implementation
{$R *.DFM}
procedure TFDataBaseLoginPerso.FormShow(Sender: TObject);
begin
Elogin.text:='';
EPassword.text:='delphi';
end;
end.
Remonter
unit uFDataBaseTest;
{ Ce composant permet de négocier les
protocoles de communication avec le fichier de base de données afin
que d'autres composants puissent aller lire les tables de la base de données,
faire des requêtes sur ces tables, créer des tables,... }
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
DBTables, StdCtrls, Buttons;
type
TFDataBaseTest = class(TForm)
Database1: TDatabase;
BChemin1: TButton;
Memo1: TMemo;
BChemin2: TButton;
SBConnecte: TSpeedButton;
SpeedButton1: TSpeedButton;
LEtat: TLabel;
Label2: TLabel;
CBLogin: TCheckBox;
CBLoginPerso: TCheckBox;
BChemin3: TButton;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure BChemin1Click(Sender: TObject);
procedure BChemin2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SBConnecteClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure CBLoginClick(Sender: TObject);
procedure Database1Login(Database: TDatabase;
LoginParams: TStrings);
procedure CBLoginPersoClick(Sender: TObject);
procedure BChemin3Click(Sender: TObject);
private
{ Déclarations privées
}
public
{ Déclarations publiques
}
end;
var
FDataBaseTest: TFDataBaseTest;
implementation
uses uFDataBaseLoginPerso;
const
chemin_base1='BaseAccess1.mdb';
chemin_base2='BaseAccess2.mdb';
chemin_base3='BaseAccess3.mdb';
var
rep_application:string;
{$R *.DFM}
//////////// procédures communes /////////
procedure AfficheParams_DataBase(leDataBase:TDataBase; leMemo:TMemo);
begin
leMemo.Lines.Assign(leDataBase.params);
end;
procedure ChangeChemin_DataBase(ceDataBase:TDataBase; ceCheminBase:string);
begin
ceDataBase.params[0]:='DATABASE NAME='+rep_application+ceCheminBase;
end;
//////////////////////////////////////////
procedure TFDataBaseTest.BChemin1Click(Sender: TObject);
begin
ChangeChemin_DataBase(DataBase1,chemin_base1);
AfficheParams_DataBase(DataBase1,Memo1);
end;
procedure TFDataBaseTest.BChemin2Click(Sender: TObject);
begin
ChangeChemin_DataBase(DataBase1,chemin_base2);
AfficheParams_DataBase(DataBase1,Memo1);
end;
procedure TFDataBaseTest.FormCreate(Sender: TObject);
begin
rep_application:=extractfilepath(application.exename);
AfficheParams_DataBase(DataBase1,Memo1);
end;
procedure TFDataBaseTest.SBConnecteClick(Sender: TObject);
begin
DataBase1.connected:=true;
AfficheParams_DataBase(DataBase1,Memo1);
LEtat.caption:='Connecté';
end;
procedure TFDataBaseTest.SpeedButton1Click(Sender: TObject);
begin
DataBase1.connected:=false;
LEtat.caption:='Déconnecté';
end;
procedure TFDataBaseTest.BChemin3Click(Sender: TObject);
begin
ChangeChemin_DataBase(DataBase1,chemin_base3);
AfficheParams_DataBase(DataBase1,Memo1);
end;
////////////------ procédures
dans le cas d'un mot de passe -------/////////
procedure TFDataBaseTest.CBLoginClick(Sender:
TObject);
{ paramétrage permettant d'autoriser
la sélection d'une BD avec mot de passe}
begin
DataBase1.LoginPrompt:=CBLogin.checked;
CBLoginPerso.enabled:=CBLogin.checked;
end;
procedure TFDataBaseTest.Database1Login(Database:
TDatabase;
LoginParams: TStrings);
{ Evènement OnLogin appelle la fiche
FDataBaseLoginPersode
saisie du mot de passe}
begin
FDataBaseLoginPerso.showmodal;
LoginParams.Values['USER NAME']:=FDataBaseLoginPerso.ELogin.text;
LoginParams.Values['PASSWORD']:=FDataBaseLoginPerso.EPassword.text;
end;
procedure TFDataBaseTest.CBLoginPersoClick(Sender:
TObject);
{ validé après paramétrage.
Le choix permet ici ,de sélectionner une BD avec mot de passe ou
sans mot de passe }
begin
if CBLoginPerso.checked then //
case cochée = oui : on veut un mot de passe
DataBase1.OnLogin:=Database1Login
else //
case cochée = non : on ne veut pas de mot de passe
DataBase1.OnLogin:=nil;
end;