Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPOSANTS ADO DE CONNEXION AVEC PRIVILEGES D'ACCÉES AVEC L'AIDE


Information sur la source

Catégorie :Composants Classé sous : Composant, database, ado, connexion, privilèges Niveau : Expert Date de création : 16/09/2008 Date de mise à jour : 12/10/2008 01:35:55 Vu / téléchargé: 2 637 / 335

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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: djilinfo@open-web.fr , site web: http://djilinfo.open-web.fr

 

Source

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

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Demo_ExtADO
    • ExtADO.mdbTélécharger ce fichier [Réservé aux membres club]1 290 240 octets
    • Project1.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier336 octets
    • Project1.dprojTélécharger ce fichier [Réservé aux membres club]3 440 octets
    • Project1.dproj.localTélécharger ce fichier [Réservé aux membres club]1 048 octets
    • Project1.resTélécharger ce fichier [Réservé aux membres club]3 232 octets
    • Unit1.dcuTélécharger ce fichier [Réservé aux membres club]3 791 octets
    • Unit1.dfmTélécharger ce fichier [Réservé aux membres club]808 octets
    • Unit1.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier406 octets
    • Unit2.dcuTélécharger ce fichier [Réservé aux membres club]2 806 octets
    • Unit2.dfmTélécharger ce fichier [Réservé aux membres club]722 octets
    • Unit2.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier831 octets
  •   ExtADO
    • ArConnect.dcuTélécharger ce fichier [Réservé aux membres club]5 895 octets
    • ArConnect.dfmTélécharger ce fichier [Réservé aux membres club]4 752 octets
    • ArConnect.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 435 octets
    • Connect.dcuTélécharger ce fichier [Réservé aux membres club]5 809 octets
    • Connect.dfmTélécharger ce fichier [Réservé aux membres club]2 894 octets
    • Connect.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 403 octets
    • DBUserInfo.dcuTélécharger ce fichier [Réservé aux membres club]14 002 octets
    • DBUserInfo.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier9 944 octets
    • ExtADO.dcuTélécharger ce fichier [Réservé aux membres club]2 937 octets
    • ExtADO.dpkTélécharger ce fichier [Réservé aux membres club]748 octets
    • ExtADO.dprojTélécharger ce fichier [Réservé aux membres club]3 904 octets
    • ExtADO.dproj.localTélécharger ce fichier [Réservé aux membres club]1 163 octets
    • ExtADO.mdbTélécharger ce fichier [Réservé aux membres club]1 290 240 octets
    • ExtADO.resTélécharger ce fichier [Réservé aux membres club]5 940 octets
    • FrConnect.dcuTélécharger ce fichier [Réservé aux membres club]5 742 octets
    • FrConnect.dfmTélécharger ce fichier [Réservé aux membres club]3 940 octets
    • FrConnect.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 378 octets
    • MyConnect.dcuTélécharger ce fichier [Réservé aux membres club]3 081 octets
    • MyConnect.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 847 octets
    • MyDataSet.dcuTélécharger ce fichier [Réservé aux membres club]14 306 octets
    • MyDataSet.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier5 386 octets
  • Les composants ExtAdo.docTélécharger ce fichier [Réservé aux membres club]261 632 octets

Télécharger le zip

Historique

16 septembre 2008 01:18:22 :
manque de la source
22 septembre 2008 09:03:49 :
Mise à jours de code source
22 septembre 2008 17:24:53 :
Mise à jour
24 septembre 2008 14:19:10 :
Correction et mise à jours des composanst
09 octobre 2008 15:53:16 :
Uned capture
09 octobre 2008 15:56:54 :
Capture
12 octobre 2008 01:31:07 :
Correction des bugs et ajout d'un document word pour aider les utilisateurs de composant.
12 octobre 2008 01:35:55 :
Les bugs sont corrigés et un fichier d'aide est associé

Commentaires et avis

signaler à un administrateur
Commentaire de FENETRES le 25/09/2008 12:37:25

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Ado et connection a une base de donnee [ par developpeur_mehdi ] BonjoursVoila je voudrais connaitre la véritable utilité du composant adoconnection, car pour l'instant j'arrive a travailler directement avec le com Composant ado connection a une BD [ par developpeur_mehdi ] VoilaJaimer'ai savoir comment avoir un rafraichissement de la connection a une base de donnée automatiquement a l'ouverture d'un form1 (via le composa TDatabase, connexion a base access dynamique [ par usmok ] je voudrais pouvroir associer mon TDatabase à un bdd Access à l'exécution,le tout sans utiliser de lien ODBCles valeurs de mon database sont initialis comment ouvrir une connexion àvec programmation avec l'objet ADO [ par benalioua1975 ] slt à l'equipe, je voudrait savoir comment ouvrir une Bdd ADO par programmationuser :??password:??je sait comment me connecter je cherche seuleme connexion oracle avec ADO [ par gattou ] bonjour j essai de me connecter a distance sur une base oracle 9i a partir d une application developpee sur delphi 5Pour cela j utilise ADo,dans un pr Programme console et composant database [ par VTCFMAN ] Peut-on utiliser les composants Database dans un programme console avec ou sans module de données ?. Si non existe-t-il des des librairies permettant test connexion ADO [ par gabs77 ] bonjour,je cherche à effectuer un test de connexion à une base de donnée de tel sorte qu'il y est 2 réactions possibles :1/ si la connexion est établi composant ADO [ par ryoryo ] salut ! j'utilise delphi 2005 et MySQL je développe une application qui me permettra sous delphi d'enregistrer une image dans la base de donnée MySQ composant ado [ par nada2008 ] bonjouuuuuuur,je reçoi l'erreur suivante quand j'insere un composant ADO: erreur de creation de l'objet , verfier que les composants microsoft data ac connexion ADO [ par wahidov2000 ] bonjour tm;j'essai de tester une connexion ADO en utilisant le langage delphi, ds le premier cas ou la chaine de connexion est correcte(ADOConnection1


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,966 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.