Delphi Base de Données

composant TDataBase
 (CD-ROMDelphi.BD)



: Les projets Delphi


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 :

                                                                                                Remonter 



Base avec mot de passe

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

    Remonter 
 

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 



Le code de la Unit fiche principale :

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;
 

end.                                                                        Remonter 



EXECUTION DU PROGRAMME :