Composants ado de connexion avec privileges d'accées avec l'aide

Soyez le premier à donner votre avis sur cette source.

Vue 8 951 fois - Téléchargée 1 401 fois

Description

1. TMyDataSet:

Ce composant est un composant AdoDataSet un peut modifié, car son état est fixé suivant le privilège affecté au user connecté:
Close si la propriété Lire=false.
Readonly si la propriété Modif=false.
Insert et append ne fonctionne pas si la propriété Ajout=false.
Delete ne fonctionne pas si la propriété Supprim=false.

Ce composant contient les mêmes propriétés de AdoDataSet sauf TabelName qui indique le nom de la table principale sais la composant est une requête SQL.
La méthode "Open" contient comme paramètre l'identifiant d'utilisateur connetcté "TMyDataSet.Open(Id_User)".


Les propriétés sont fixé dans la table "Privilège" dans la base de donnée suivant la catégorie d'utilisateur connecté depuis la table "ClasseHumain".

2. TMyConnect:

Composant utilisé pour identifier l'utilisateur qui va connecter pour récupérer sont ID_HUMAIN depuis la table Humain dans la base de donnée.
La méthode Execute est appelée pour afficher la fenêtre de connexion.

? AdoConnection: Contient le nom de composant connexion.
? DefaultlLanguage: Langue de la fenêtre de connexion.
? Id_User: Identifant d'utilisateur connecté.


N.B:
Vous pouvez toujours personnaliser votre fenêtre de connexion
3. TExtDBUserInfo:



Composant visuel pour afficher des informations sur la donnée actuelle dans la table TMyDataSet spécifiée, tel que:
? Date de création de la donnée
? Utilisateur qui a créé la donnée
? Date de modification de la donnée
? Utilisateur qui a modifié la donnée
? Etat de la donnée

Pour cela il faux fixer les propriétés:
? Connection: Nom de composant connexion ADO.
? DataSet: Nom de composant TMyDataSet.



4. La base de données:

Chaque base de données utilise ces composants doit avoir les tables principales suivantes:
? Humain: Liste des utilisateurs de programme.
? ClasseHumain: Catégorie d'utilisateurs.
? Privilege: Privilèges de chaque table de la base de données par catégorie utilisateur.
? Etat: Table des états possibles pour les données de programme.
Voire (ExtADO.mdb).

E-Mail: contact@djil-info.com , site web: http://www.djil-info.com

Source / Exemple :


unit MyDataSet;

interface

uses
  SysUtils, Classes, DB, ADODB, Dialogs, Windows, Messages, Variants,Controls, DBConsts;

type

  TExtMyDataSource = class;
  TMyDataSet = class;

  TExtMyDataSource = class (TDataSource)
  private
  //FDataSet:TMyDataSet;
    { Déclarations privées }
  protected
//  procedure UpdateState;
  //procedure SetDataSet(AdataSet:TMyDataSet);
    { Déclarations protégées }
  public
    { Déclarations publiques }
  published
  //property DataSet:TMyDataSet read FDataSet Write SetDataSet;
    { Déclarations publiées }
  end;

  TMyDataSet = class(TADODataSet)
   private
    { Déclarations privées }

  protected

    { Déclarations protégées }
  public

  Id_User:integer;
  aTableName:string;
  Lire,Ajout,Modif,Supprim,Herite:boolean;
  procedure Open(IdUser:integer);
  procedure Insert;    //Ajouter un champ
  procedure Append;
  procedure Edit; //Modifier le champ
  procedure post;
  procedure Delete(confirm:boolean);    //Supprime le champ
  procedure saveState(Sender:TDataSet);
    { Déclarations publiques }
  published
  property TableName:string read aTableName write aTableName;
    { Déclarations publiées }
  end;

procedure Register;

implementation

procedure TMyDataSet.Open(IdUser:integer);
var THumain1,TClasseHumain1,TPrivilege1:TADODataSet;

begin
if(self.CommandType=cmdTable) and (Self.TableName='')then self.TableName:=Self.CommandText
else
if(Self.TableName='')then
 Self.TableName:=Self.Name;

THumain1:=TADODataSet.Create(self);
//THumain1.ConnectionString:= self.ConnectionString;
THumain1.Connection:= self.Connection;
THumain1.CommandType:=cmdText;
THumain1.CommandText:='Select * from Humain';
THumain1.LockType:=ltOptimistic;
THumain1.CursorLocation:= clUseClient;
THumain1.CursorType:=ctStatic;
THumain1.Active:=true;
if THumain1.locate('Id_Humain',IdUser,[]) then
 begin
 TClasseHumain1:=TADODataSet.Create(self);
 TClasseHumain1.ConnectionString:= self.ConnectionString;
 TClasseHumain1.Connection:= self.Connection;
 TClasseHumain1.CommandType:=cmdText;
 TClasseHumain1.CommandText:='Select * from ClasseHumain';
 TClasseHumain1.LockType:=ltOptimistic;
 TClasseHumain1.CursorLocation:= clUseClient;
 TClasseHumain1.CursorType:=ctStatic;
 TClasseHumain1.Active:=true;
 if TClasseHumain1.Locate('Id_ClasseHumain',THumain1['Id_ClasseHumain'],[]) then
  begin
  TPrivilege1:=TADODataSet.Create(self);
  TPrivilege1.ConnectionString:= self.ConnectionString;
  TPrivilege1.Connection:= self.Connection;
  TPrivilege1.CommandType:=cmdText;
  TPrivilege1.CommandText:='Select * from Privilege';
  //TPrivilege.CommandText:=TPrivilege.CommandText+'  ';
  TPrivilege1.CommandText:=TPrivilege1.CommandText+' Where Privilege.TableName='''+self.TableName+'''';
  TPrivilege1.CommandText:=TPrivilege1.CommandText+' and Privilege.Id_ClasseHumain='+TClasseHumain1.FieldByName('Id_ClasseHumain').AsString;
  TPrivilege1.CursorLocation:= clUseClient;
  TPrivilege1.CursorType:=ctStatic;
  TPrivilege1.Active:=true;
  if(not(TPrivilege1.Eof)) then
   begin
   Self.Lire:=(TPrivilege1['Lire']);
   Self.Ajout:=(TPrivilege1['Ajout']);
   Self.Modif:=(TPrivilege1['Modif']);
   Self.Supprim:=(TPrivilege1['Supprim']);
   Self.Herite:=(TPrivilege1['Herite']);
   //showmessage(Self.TableName+' - '+TPrivilege.FieldByName('Lire').AsString+TPrivilege.FieldByName('Ajout').AsString+TPrivilege.FieldByName('Modif').AsString+TPrivilege.FieldByName('Supprim').AsString+TPrivilege.FieldByName('Herite').AsString);
   if(not(Ajout or Modif or Supprim)) then
    Self.LockType:=ltReadOnly
   else
    Self.LockType:=ltOptimistic;
   end
  else
   Self.LockType:=ltOptimistic;
   inherited Active:=self.Lire;
   TPrivilege1.Close;
  end;
 TClasseHumain1.Close;
 end;
self.Id_User:=IdUser;
Self.BeforePost:=saveState;
THumain1.close;
end;

procedure TMyDataSet.Insert;
begin
if(self.Ajout)then
begin
inherited Insert;
self.FieldByName('Créé par').AsInteger:=self.Id_User;
self.FieldByName('Créé le').AsDateTime:=Date;
//self.IndexFields[0].AsString:=datetostr(date)+timetostr(time);
end;
end;

procedure TMyDataSet.saveState(Sender:TDataSet);
begin
if Sender.State=dsedit then
begin
  Sender.FieldByName('Modifié par').AsInteger:=self.Id_User;
  Sender.FieldByName('Modifié le').AsDateTime:=Date;
end
else
if Sender.State=dsinsert then
begin
 Sender.FieldByName('Créé par').AsInteger:=self.Id_User;
 Sender.FieldByName('Créé le').AsDateTime:=Date;
end;
end;

//proc Append pour insérer à la fin de la table
procedure TMyDataSet.Append;
begin
if(self.Ajout)then
begin
inherited Append;
self['Créé par']:=self.Id_User;
self['Créé le']:=Date;
//self.IndexFields[0].AsString:=datetostr(date)+timetostr(time);
end;
end;

procedure TMyDataSet.Delete;
begin
if(self.Supprim)then
begin
if messagedlg('Etes vous sure de supprimer l''enregistrement',mtconfirmation,[mbyes,mbno],0,mbNo)=mrYes then
inherited Delete;
end;
end;

procedure TMyDataSet.Edit;
begin
if(self.Modif)then
begin
inherited Edit;
self['Modifié par']:=self.Id_User;
self['Modifié le']:=Date;
end;
end;

procedure TMyDataSet.Post;
begin
inherited Post;
end;

procedure Register;
begin
  RegisterComponents('ExtADO', [TMyDataSet]);
  RegisterComponents('ExtADO', [TExtMyDataSource]);
end;

end.

Conclusion :


Les bugs sont corrigés et un fichier d'aide est associé

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009

Une gestion par Trigger me semble bien plus adaptée !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (pascal1541)