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é
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.