Mapping relationnel objet

utbm90 Messages postés 3 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 29 juillet 2013 - 24 juil. 2013 à 11:37
utbm90 Messages postés 3 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 29 juillet 2013 - 24 juil. 2013 à 11:43
Bonjour,

J'ai un blocage, j'ai une classe Tprincipale qui s'interface directement avec une base de donnée (access), j'ai également les classes suivantes Tlivre, TAuteur, Tassociation et Templacement qui représente les tables dans la BD

-> un livre est édité par un ou plusieurs auteur
-> un auteur peut appartient à une ou plusieurs associations


Je voudrais créer une fonction qui permet d'extraire un objet de type livre
par exemple :

dans ma classe principale je voudrais crée dans un premier temps une pile, et chercher

type 
Tlivre = class(TObject)
private :
nom : string ;
annee_apparition : integer ;
type : string ;
List_auteur : Tlist ;
Pcomplet:boolean;


public :
constructor Create,overload;
constructor Create(tnom;string; tannee_apparition : integer;ttype : string;List_auteur : Tlist ) ;  overload;

//les getters et Setters

procedure add_auteur(tauteur: Tauteur);
procedure delete_auteur(tauteur: Tauteur);
function idx_auteur(tauteur: Tauteur) : integer;
procedure delete_propriete(tindex : integer); overload;

end;
implementation

constructor TMateriau.Create;
begin
     nom := '';
     annee_apparition := '';
     type := '';
     List_auteur := Tlist.Create();
end;

//getters et setters
.....
//****
procedure Tmateriau.add_auteur(tauteur : Tauteur);
begin
     list_auteur.Add(tauteur);
end;

procedure Tmateriau.delete_auteur(tauteur : Tauteur);
var
  i : integer;
begin
     i := list_auteur.IndexOf(tauteur);
     list_auteur.Delete(i);
end;


function Tmateriau.idx_auteur(tauteur : Tauteur) : integer;
begin
     result := list_auteur.IndexOf(tauteur);
end;

procedure Tmateriau.delete_auteur(aindex : integer);
begin
     list_auteur.Delete(tindex);
end;
end.


J'ai également la classe auteur

Type
  Tauteur = class (TObject)
private 
    nom : string ;
    description : string ;
    typezone : string ;
    fiche_as : Tlist ;
public 
   constructor Create(type_association :integer; tnom : string); overload;
   constructor Create(tnom : string; tdesc : string; assoc : Tassociation );overload;

//getters et setters
  //...
  procedure add_assoc(assoc : Tassociation);
  procedure delete_assoc(assoc : Tassociation);Overload;
  function idx_assoc(assoc : Tassociation) : integer;
  procedure delete_assoc(tidx : integer); Overload;
end ;
implementation

constructor Tauteur.Create(typezone_in :integer; tnom_in : string);
begin
     Pcomplet:=false;
     nom := trim(tnom_in);
     typezone :=typezone _in;
     if (typezone as1) OR (typezone as2) then fiche_as := Tlist.Create()
                                                     else  fiche_as:=nil;
     description := '';

end;

constructor Tauteur.Create(tnom : string;assoc : Tassociation);
begin
     nom := tnom ;
     fiche_as := Tlist.Create;
     fiche_as.Add(aunite);
     description := '';
end;

// getters et Setters
//.....
//
   
procedure Tauteur.add_assoc(assoc : Tassociation);
begin
     fiche_as.Add(assoc);
end;

procedure Tauteur.delete_assoc(assoc : Tassociation);
var
  i : integer;
begin
     i := fiche_as.IndexOf(assoc);
     fiche_as.Delete(i);
end;

function Tauteur.idx_assoc(assoc : Tassociation) : integer;
begin
     result := fiche_as.IndexOf(assoc);
end;

procedure Tauteur.delete_assoc(tidx : integer);
begin
     fiche_as.Delete(tidx);
end;
end.


type 
Tassociation : class(TObject)
private :
nom : string ;
idx : integer ;
emplacement_A : string ;
emplacement_B : string ;
public :

constructor Create;overload; 
constructor Create(tidex:integer; tnom : string; templacement_A : string; templacement_B : string); overload;

// getters et setters 
//....

end ;

Templacement = class (TObject)
Private 
Zone1 : integer ;
Zone2 : integer ;
Zone3 : integer ;

public 
constructor Create(tZone1,tZone2,tZone3);
//getters et setters 
//.....
//
end;
implementation
constructor Templacement.Create(tZone1,tZone2,tZone3:integer);
begin

Zone1 : tZone1 ;
Zone2 : tZone2 ;
Zone3 : tZone3 ;

//getters et setters 
//....
//
end ;

constructor Tassociation.Create(tidex:integer; tnom : string; templacement_A : string; templacement_B : string);
begin

nom : tnom ;
idx : tidx ;
emplacement_A : templacement_A ;
emplacement_B : templacement_B ;
// getters et setters 
//....
//
end ;
end .



unit Tconstante;
interface
const 
as1 :string : association1 ;
as2 :string : association2;
as3 :string : association3;
as4 :string : association4;
as5 :string : association5;
implementation
end.



interface
uses
Tconstante,
//....... ;
type
Principale = class (TObject)
private

associationList : TList ;
TableLivre : TADOTable;
TableTypeLivre : TADOTable ;
Reqauteur : TADOQuery;
ReqListeAuteur : TADOQuery;
DBlivre:TADOConnection;
TableAssociation:TADOTable;
TableAuteurLivre : TADOTable ;
ReqLivre :TADOQuery;
Res:string;

indexlivre : integer ;
nomLivre_interne : string ;
indexauteur : integer ;
nomAuteur_in : string ;
res : boolean ;
memolistlivre :Tlist ;
listeAssociation : TList ;
ListeLivre : TList ;
ListeAuteurLivre : TList ;
LivreCourant : TLivre ;
AuteurCourant : TLivre ;

public :
Constructor Create (connect,src:string);
GetLivre (Nom : string ):TLivre;
testLivre(Nom:string;memo: boolean) : boolean ;
function getAuteurLivre(nomLivre:string;nomAuteur:string):Tauteur;
function testauteurlivre(nomlivre, nomAuteur, memo:boolean):boolean;
destructor Free ;
end ;

implementation
Constructor principale.Create(connect,src:string);
var
tmpAssociation : Tassociation;
tmpLivre : TLivre ;
tmpAuteurLivre : TAuteur ;
begin

DBlivre := TADOConnection.Create(nil);
DBlivre.ConnectionString:=connect;
DBlivre.LoginPrompt :=false;

TableLivre:= TADOTable.Create(nil);
TableLivre.TableName:='Livre';
TableLivre.Connection:=DBlivre;

ReqAuteur := TADOQuery.Create(nil);
ReqAuteur.Connection:=DBLivre;
// la selection sur la table Livre et AuteurLivre
//..............
// where ((Auteur_Livre.idx_Livre =: liv )AND(Auteur_Livre.Auteur_Livre=: livP);


ReqAuteur.parameters.ParamByName('liv').DataType:=ftInteger;
ReqAuteur.Parameters.ParamByName('livP').DataType:=ftString;


ReqListeAuteur:=TADOQuery.Create(nil);
ReqListeAuteur.Connection:=DBLivre;
// la selection sur la table Livre et AuteurLivre
//..............
// where ((Auteur_Livre.idx_Livre =: liv )

associationList := TList.Create;
ReqLivre := TADOQuery.Create(nil);
ReqLivre.Connection:=DBLivre;



ReqLivre.SQL.Add('SELECT Livre.idx_Livre, Livre.nom, Livre.description,');
ReqLivre.SQL.Add('Livre.idx_type_Livre,');
ReqLivre.SQL.Add('FROM Livre ');
ReqLivre.SQL.Add('WHERE (((Livre.materiau)=:PLivre)); ');
ReqLivre.Parameters.ParamByName('PLivre').DataType:=ftString;

TableAssociation:= TADOTable.Create(nil);
TableAssociation.TableName:='Association';
TableAssociation.Connection:=DBLivre;

DBLivre.Open;
TableLivre.Open;
TableAuteur.Open;

listAssociation := Tlist.Create;
listAssociation.First;
while not(TableAssociation.Eof) do Begin

tmpAssociation:= TAssociation.Create(TableAssociation.FieldByName('idx_Association').AsInteger,TableAssociation.FieldByName('Association').AsString,TableAssociation.FieldByName('description').AsString,'');
listeAssociation.Add(tmpAssociation);
TableAssociation.Next;

end;
TableAssociation.Close;

end ;

1 réponse

utbm90 Messages postés 3 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 29 juillet 2013
24 juil. 2013 à 11:43
je dois coder la fonction GetLivres mais je ne sais pas avec quoi commencé sachant que je dois utiliser testLivre qui permet de vérifier si le nom existe dans la base de donnée, pour ne pas avoir à chaque fois access à la base de donnée, l'idée c'est de tester sur une pile
Quelqu'un pourra t'il m'aidez, je suis débutant en delphi
0
Rejoignez-nous