begin process at 2012 02 10 18:56:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de Donnees

 > GDC MANAGER

GDC MANAGER


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de Donnees Classé sous :delphi 7, access, qreport Niveau :Débutant Date de création :28/04/2008 Vu / téléchargé :5 091 / 881

Auteur : nraloux

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Petite application de gestion de contact, elle permet l'ajout, la modification et la suppression d'un contact donnée.
C'est mon premier code donc SVP soyez tolérant.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture STOCKEUR CODE SOURCE par PythonGreg
Source avec Zip Source avec une capture EXEMPLE UTILISATION DBGRID par HAFTARIFOUAD
Source avec Zip EXPORTE TABLE VER EXCEL par apcmorsott
Source avec Zip Source avec une capture BAK_RESORT POUR SGBD INTERBASE par solitair
Source avec Zip Source avec une capture GESTION DES CODE POSTAUX AVEC UNE BASE ACCESS par AlexFr23

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GESTION DES CODE POSTAUX AVEC UNE BASE ACCESS par AlexFr23
Source avec Zip Source avec une capture CHRONOS V1.0.0 par Christophe67
Source avec Zip Source avec une capture MAGMANAGEMENT par christ91147
Source avec Zip Source avec une capture VIDÉOTHÈQUE V1.0.0 par Christophe67
Source avec Zip Source avec une capture CONNEXION MYSQL ET RECUPERATION DANS BASE ACCESS par eli42

Commentaires et avis

Commentaire de MAURICIO le 28/04/2008 18:44:15 administrateur CS

Salut,

si c' est ton premier code, c' est pas mal du tout:
- tu as fait le ménage dans les fichiers.
- les unités sont presques toutes nommées.
- les compos appelés dans le code sont plus ou moins nommés.
- Le code est assez bien présenté et semble plutôt correct.

Malheureusement je n' ai pas compilé parce que tu utilises des compos externes que je ne peux tester pour l' instant.

L' interface graphique et la disposition des compos sont à améliorer.

Si tu l' as fait tout seul (je t' avoue que j' en doute un peu), bravo!
A+

Commentaire de nethacker le 28/04/2008 19:57:59

Salut,
C'est très bien mais ca serait bien si tu avais utilisé une base SQL distante ! les exemples avec access sont plusieurs !
Mais bon, ^^

Commentaire de HAFTARIFOUAD le 29/04/2008 12:58:37

Bonjour

Vu que c'est votre premier code je dit personnellement trés bien. vous avez fait du bon travail. trés bon courage, et bonne continuation.

Commentaire de lafarge le 04/05/2008 13:27:04

Bonjour tout le monde,

Ne serait il pas plus simple d'utiliser des fiches de type Référentielle (Fichier *.dro)
quand on a plusieurs fiches ayant la même ergonomie, avec les mêmes coordonnées.
L'on crée une fiche FicheMere sauvegardée dans le référentiel avec comme fonctionnalité (Herited)
Exemple: TFicheMere = Class(TFORM) puis --> qui EST la fiche référentielle puis..

         TFajoutContact = Class (TFicheMere) // au lieu de class (TFORM)
         TFModifContact = Class (TFicheMere) // au lieu de class (TFORM)
         etc, etc...
C'est surprenant je n'ai jamais vu dans delphifr.com, utiliser ce type de fonctionnalité qui est pourtant fort pratique.cela permet une uniformisation des différentes fiches et donne un aspect "Pro" ..si je puis dire....

LAFARGE

Commentaire de Caribensila le 04/05/2008 17:34:23

Bonjour,

LAFARGE me fait penser à un truc...
Je n'y connais rien en BDD et j'espère ne pas dire de bêtises, mais il me semble que TFrame est aussi sous-exploité.
TFrame permet de céer une sorte de composant ré-utilisable sans qu'il soit néccessaire de l'installer.
De plus il permet qu'on le charge au moment voulu, seulement si c'est utile, et de placer le code le gérant dans son unité.
Je ne sais pas pourquoi on le voit si rarement...  

Commentaire de nraloux le 06/05/2008 14:45:54

Merci a tous pour vos encouragements et contrairement a ce que peut penser MAURICIO je l'ai fais tout seul l'application.

Commentaire de MAURICIO le 06/05/2008 18:08:34 administrateur CS

Et bien bravo si tu l' as fait seul ^^

Le TFrame est une sorte de panel que l' on peut disposer sur n' importe quel contenant (parent) comme une Form, un panel, un PageControl etc ...
Il se présente en Design-time comme une form et est travaillée comme cette dernière.

Sur ce TFrame, on y met les compos que l' on veut ainsi que le code associé. Ça fait penser à un ActiveX en fait. Les points forts comme le dit si bien Cari, sont la réutilisabilité, la simplicité et pas la peine d' installer puisque en fait, ce n' est pas un compo.
Par contre, il n' est pas visualisé dans son emplacement car on doit le faire par code:
Exemple:
  FramAg := TFrameAgend.Create(FrmPrin);
  FramAg.Parent := NoteBook_Page(NBookRight, 'AGENDA');
  FramAg.Align  := alClient;


Particulièrement, je l' utilise mais assez peu car j' ai commencé à utiliser des Dlls avant que le TFrame n' existe. Les Dlls sont compilées indépendemment des applis qui l' appelle alors que si l' on modifie un Frame, toutes les applis qui l' utilisent doivent être recompilées comme toute unité que l' on modifie.

A+

Commentaire de Delphiprog le 10/05/2008 15:54:34 administrateur CS

Effectivement, pour une première, c'est pas mal.
Voici néanmoins quelques remarques (constructives) :
1- Eviter de désactiver les messages d'erreur du compilateur qui ne sont pas là pour meubler le décor. Ainsi, les avertissements suivants sont à prendre au sérieux :
[Avertissement] AjoutContact.pas(256): La variable 'senderEdt' n'est peut-être pas initialisée
[Avertissement] AjoutContact.pas(267): La variable 'SenderEdt' n'est peut-être pas initialisée
[Avertissement] AjoutContact.pas(299): Le symbole 'fmShareDenyRead' est propre à une plate-forme
[Avertissement] ModifContact.pas(260): La variable 'senderEdt' n'est peut-être pas initialisée
[Avertissement] ModifContact.pas(271): La variable 'SenderEdt' n'est peut-être pas initialisée
[Avertissement] ModifContact.pas(312): Le symbole 'fmShareDenyRead' est propre à une plate-forme

Hormis l'avertissement concernant l'utilisation du symbole fmShareDenyRead, le reste peut poser de gros problèmes à l'exécution.

2- Il manque des contrôles à la suppression d'un contact : si on ne rentre aucune donnée et que l'on clique sur le bouton [ok], voici le beau message qui s'affiche :
---------------------------
Gestion Des Contacts
---------------------------
Base de données inconnue.

Alias: Contact.
---------------------------
OK  
---------------------------
A affiner, donc.

3- idem que ci-dessus lorsque l'on tente de visualiser un contact ou tous les contacts avec une base de données vide.

4- "Visualiser un contact", puis cliquer sur "visualiser", on obtient ceci :
---------------------------
Gestion Des Contacts
---------------------------
Violation d'accès à l'adresse 005263D0 dans le module 'GDCManager.exe'. Lecture de l'adresse 0000033C.
---------------------------
OK  
---------------------------

5- Au niveau du code, on trouve des redondances comme dans Timer1Timer et dans FormCreate (Accueil.pas) pour une simple mise à l'heure des différents composants. Place cette potion de code dans une procédure que tu appelles ensuite.
De même pour :
procedure TFenPrincipale.AjoutContact1Click(Sender: TObject);
begin
  TFajoutContact.Create(Self);
  ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
end;

{-------------------------------------------------------------------------}

procedure TFenPrincipale.Label11Click(Sender: TObject);
begin
  TFajoutContact.Create(Self);
  ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
end;
De plus, je dirai que c'est un peu maladroit qu'une fiche soit chargée de modifier le titre d'une autre fiche lorsque ce titre est statique.

6- Attention à la façon de nommer tes composants car cela peut prêter à confusion comme ici :
procedure TFenPrincipale.AjoutContact2Click(Sender: TObject);
begin
  TFsuppContact.create(self);
  ActiveMDIChild.Caption := 'Suppression d''un Contact';

end;
Le bouton AjoutContact a pour action d'afficher la fiche de suppression d'un contact !

7- Ce type de code fait un peu ringard de nos jours et me rappelle les applications des années 80 :
procedure TFenPrincipale.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if
    MessageDlg('Cette operation fermera l''application. Voulez-vous effectuer cette operation ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    Application.Terminate
  else
  begin
    Action := caNone;
  end;
end;
On alerte l'utilisateur uniquement si des données ont été modifiées et non sauvegardées. D'autre part, éviter l'utilisation de l'appel à Application.Terminate qui arrête brutalement l'application sans laisser le temps aux composants orientés données de vider leurs buffers.

8- Attention à vérifier l'existence d'un fichier avant de l'ouvrir comme dans :
procedure Tsplash.FormShow(Sender: TObject);
begin
  sprite := tbitmap.create;
  sprite.loadfromfile('1.bmp');

9- Privilégier l'utilisation de TDataModule pour centraliser la logique métier en matière de gestion des données. Cela aurait évité de multiplier les composants TQuery sur chaque fiche et de retrouver des requêtes identiques d'une fiche à l'autre. Lors de la maintenance d'une application, cela peut devenir critique et coûteux en temps avec des tests inutiles quand il faut revisiter chaque fiche de l'application (qui peut en contenir plusieurs centaines). La preuve :

E:\delphifr\GDC\GDC Manager\Acceuil.pas
    163 ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
    171 ActiveMDIChild.Caption := 'Ajout d''un nouveau Contact';
    187 ActiveMDIChild.Caption := 'Recherche et Modification d''un Contact';
    195 ActiveMDIChild.Caption := 'Suppression d''un Contact';

E:\delphifr\GDC\GDC Manager\AjoutContact.pas
    173 query1.SQL.Add('insert into contact (civilite,Societe,Nom,Prenom,Adresse,CodePostal,Ville,Pays,Site,Email,telephone,Fax,Mobile,DateNaiss,Observation,photo) values (:ci,:s,:n,:p,:a,:c,:v,:pa,:si,:e,:t,:f,:m,:d,:o,:pho)');

E:\delphifr\GDC\GDC Manager\ModifContact.pas
    105 Query1.SQL.Add('select * from contact where nom = :p');
    198 Query1.SQL.Add('UPDATE contact SET civilite=:ci ,societe=:s,Nom=:n,Prenom=:p,Adresse=:a,CodePostal=:c,ville=:v,pays=:pa,Email=:e,site=:si,telephone=:t,fax=:f,mobile=:m,datenaiss=:d,observation=:o,photo=:pho WHERE nom=:pr');
    335 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');

E:\delphifr\GDC\GDC Manager\SelectContact.pas
     64 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');
     81 Query1.SQL.Add('select * from contact where nom = :p');

E:\delphifr\GDC\GDC Manager\SupprimerContact.pas
     54 Query1.SQL.Add('select prenom from contact where nom = :p ');
     86 Conf := MessageDlg(('Voulez-vous Vraiment supprimer le contact ' + combo.Text
     92 Query1.SQL.Add('Delete from Contact WHERE nom=:pr');
    116 Query1.SQL.Add('SELECT Nom from contact where Nom LIKE :p Order by Nom Asc');

Dans le code, on remarque aussi que tu ne vérifies aucune des données entrées par l'utilisateur et que tu ne prends même pas la précaution de "quoter" tes chaines. Rien de tel pour faire planter une requête si un contact s'appelle "Monsieur Archibald de l'archipel". Ta base de données est gravement exposée aux injections SQL.

Bon, je vais m'arrêter là et passer le relais aux autres. Tu as déjà de quoi occuper les quelques jours du long week-end qu'il te reste.
Mais, je le dis comme d'autres ici, pour une première c'est pas mal du tout.

Commentaire de nraloux le 12/05/2008 10:11:45

Merci pour les conseils, je vais me mettre au boulot pour essayer d'ameliorer le code source et l'application.

Commentaire de jackalunion le 25/06/2008 14:32:49 6/10

il ya des trucs que j'apprecie

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Requêtes sur une Base Access ? [ par Gerard ] Je souhaiterai savoir quelles sont les moyens les plus performants pour réaliser des requêtes sur une base Access et que me conseillez-vous ?(SQL,...) comparatif paradox et access [ par laurent ] Salut,Pour l'instant j'utilise dans mon programme des bases paradox. Est-ce que l'utilisation de bases access seraient plus rapide et plus stable ?Si planing [ par pasoif ] bonjourca fait au moins un an que je cherche a faire un planing sous access ou nimporte quelle autre log de base de donne et je ne trouve pas de solu Administrateur BDE & Access [ par Vinch ] Salut à tous,J'ai créer une BD sous Access2002 (XP) et je l'ai convertie au format 97, puis j'ai créer un alias avec un driver natif MSACCESS. Tout s' Access [ par Shadow ] Salut, y'a un moyen d'écrire,lire,supprimer, dans une base de donnée Access? mot de passe ACCESS [ par lguez ] Je suis en train d'écrire une appli qui utilise une BD ACCESS sous DELPHI 5, J'ai vu dans le forum comment retirer la fenêtre de mot de passe ACCESS, Pb TDBCombobox + Table ACCESS [ par lguez ] Bonjour,Dans une table ACCESS, j'ai 3 colonnesidVentil : numAuto (clé primaire)Ventilation : entierlibellé : stringSous Delphi, j'ai une Form qui cont diffusion Delphi Access [ par MDR ] J'ai réalisé une application sous Delphi V qui utilise une base de données ACCESS.L'application fonctionne correctement.Lorsque je la diffuse certains création de vue avec access ? [ par tgomas ] je bosse sur une appli interfacée avec access, j'ai une requête qui crée une vue (CREATE VIEW...), mais à l'éxecution j'ai l'erreur 'Erreur de syntaxe 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,618 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales