unit daoplanclassement;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB, databasemanager, DAO;
type
/////////////////////////////////////////////////////////////////////
// TRecordPlanClassement
/////////////////////////////////////////////////////////////////////
TRecordPlanClassement = record
PKPlan: integer; // La clé primaire du plan de classement
Libelle: string; // Le libellé du plan de classement
end;
////////////////////////////////////////////////////////
// TDAORecordPlanClassement
////////////////////////////////////////////////////////
// Un plan de classement est défini dans le SGBD dans la table spécifiées
// ci-dessous (les classes du plan de classement sont dans la table
// DocLesPlansClasses ):
//
// CREATE TABLE "docLesPlansClassement" (
// "PKplan" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
// "NomPlan," CHAR(100) UNIQUE )
//
// Remarque : Dans cette version les champs left et right ne sont pas utilisés
// (méthode des 'data set', car j'utiliseplutôt l'exploitation des indices
// décimaux de classes et leur traitement sous simple chaine de caractère. Il
// est possible de rechercher les descendants par comparaison du début de
// l'indice et de retrouver le chemin qui mène à l'ancêtre par lecture de
// l'indice courant.
************* THIS 2 LIGNES ARE THE PROBLEM ****************************
IDAORecordPlanClassement = specialize IDAO<TRecordPlanClassement>;
TDAOPlanClassement = class(IDAORecordPlanClassement)
private
_PKPlan: integer;
_Libelle: string;
public
// La collection des plans de classement
procedure AttacheDataSourceLesPlansClassements(DataSource: TDataSource);
// Attacher une DataSource à la collection des classes du plan de classement
procedure AttacheDataSourceLesClasses(DataSource: TDataSource);
// Détache une DataSource
procedure DetacheDataSource(DataSource: TDataSource);
// La clé primaire du plan de classement s'il existe
function Existe(NomPlan: string): integer;
// Lire un objet TRecordPlanClassement existant
function Instancier(const id: integer): TRecordPlanClassement; override;
// Ajoute un nouvel objet TRecordPlanClassement
function Ajouter(const obj: TRecordPlanClassement): TRecordPlanClassement; override;
// Mémoriser un objet TRecordPlanClassement
procedure Sauvegarder(const obj: TRecordPlanClassement); override;
// Supprimer un objet TRecordPlanClassement
procedure Supprimer(obj: TRecordPlanClassement); override;
end;
implementation
/////////////////////////////////////////////////////////////////////////////
// TDAOPlanClassement
/////////////////////////////////////////////////////////////////////////////
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Méthode : AttacheDataSourceLesPlansClassements (procedure)
// Parametres
// La collection des noms de plans de classement.
// -----------------------------------------------------------------------------
procedure TDAOPlanClassement.AttacheDataSourceLesPlansClassements(
DataSource: TDataSource);
var
hsql: IRequeteSQL;
begin
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_COLLECTION');
hsql.Execute;
hsql.AttacherDataSourceCible(DataSource);
end;
// -----------------------------------------------------------------------------
// Classe : TDAORecordPlanClassement
// Méthode : AttacheDataSourceLesClasses (procedure)
// Parametres
// FKPlan Integer La liste des classes d'un plan
// La collection des classes instanciée correspondant au plan de classement
// passé en paramètre.
// -----------------------------------------------------------------------------
procedure TDAOPlanClassement.AttacheDataSourceLesClasses(DataSource: TDataSource);
var
hsql: IRequeteSQL;
begin
hsql := _dbm.LaRequete('PLAN_CLASSE_COLLECTION');
hsql.ParamByName('FKPlan', _PKPlan);
hsql.Execute;
hsql.AttacherDataSourceCible(DataSource);
end;
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Méthode : Existe (class function)
// Parametres
// PKPlan si le plan de classement du nom entré en paramètre existe, sinon -1.
// -----------------------------------------------------------------------------
function TDAOPlanClassement.Existe(NomPlan: string): integer;
var
hsql: IRequeteSQL;
begin
try
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_EXISTE');
hsql.ParamByName('NomPlan', NomPlan);
if hsql.NombreLignes = 1 then
Result := hsql.ValueByName('PKPlan')
else
Result := 0;
except
Result := 0;
end;
end;
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Methode : Ajouter (fonction)
// Parametre
// obj TRecordPlanClassement Le nouveau plan de classement
// Ajoute un nouveau plan de classement à la base (pas les classes, seulement le
// nom du nouveau plan de classement. (Les classes seront ajoutées une à une au
// moment de leur création par la méthode ajouterClasse de la classe
// TPlanClassement).
// -----------------------------------------------------------------------------
function TDAOPlanClassement.Ajouter(
const obj: TRecordPlanClassement): TRecordPlanClassement;
var
hsql: IRequeteSQL;
begin
try
// Ajout du nouveau plan dans la table docLesPlansClassement
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_AJOUTER');
hsql.ParamByName('NomPlan', obj.Libelle);
hsql.Execute;
// Actualisation de la nouvelle clé du plan créé par la base de données
Result.PKPlan := hsql.ValueByName('PKPlan');
Result.Libelle := hsql.ValueByName('Libelle');
_PKplan := hsql.ValueByName('PKPlan');
_Libelle := hsql.ValueByName('NomPlan');
except
Result.PKPlan := -1;
Result.Libelle := '';
end;
end;
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Méthode : Instancier (function)
// Parametres
// id Integer La clé primaire du plan
// Resultat TRecordPlanClassement
// Description
// Le plan de classement instancié en une fois (sans pagination)
// -----------------------------------------------------------------------------
function TDAOPlanClassement.Instancier(const id: integer): TRecordPlanClassement;
var
hsql: IRequeteSQL;
begin
try
// Verification que la plan existe
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_INSTANCIER');
hsql.ParamByName('PKplan', id);
hsql.Execute;
// Instanciation des paramètres du plan
Result.PKPlan := hsql.ValueByName('PKPlan');
Result.Libelle := hsql.ValueByName('NomPlan');
_PKplan := hsql.ValueByName('PKPlan');
_Libelle := hsql.ValueByName('NomPlan');
except
Result.PKPlan := -1;
Result.Libelle := '';
end;
end;
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Méthode Sauvegarder (procedure)
// Parametres
// obj TRecordPlanClassement Le plan de classement à sauvegarder dans la base
// -----------------------------------------------------------------------------
procedure TDAOPlanClassement.Sauvegarder(const obj: TRecordPlanClassement);
var
hsql: IRequeteSQL;
begin
// Sauvegarde du nouveau nom du plan de classement
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_SAUVEGARDER');
hsql.ParamByName('PKPlan', obj.PKPlan);
hsql.ParamByName('NomPlan', obj.Libelle);
hsql.Execute;
end;
// -----------------------------------------------------------------------------
// Classe : TDAOPlanClassement
// Méthode Supprimer (procedure)
// Parametres
// obj TRecordPlanClassement Le plan de classement à sauvegarder dans la base
// -----------------------------------------------------------------------------
procedure TDAOPlanClassement.Supprimer(obj: TRecordPlanClassement);
var
hsql: IRequeteSQL;
begin
// Suppression d'un plan de classement (les classes associées au plan ne
// sont pas supprimée).
hsql := _dbm.LaRequete('PLAN_CLASSEMENT_SUPPRIMER');
hsql.ParamByName('PKPlan', obj.PKPlan);
hsql.Execute;
_PKplan := 0;
_Libelle := '';
end;
end.