IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

DataModule ou pas ?


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut DataModule ou pas ?
    bonjour,

    d'une manière générale que ce soit avec le BDE ou interbase/firebird:

    il faut mieux utiliser un datamodule ou pas pour poser les composant de connexion au base ?



    merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 192
    Points
    192
    Par défaut
    Il est toujour préférable de séparer l'interface - la couche métier - la couche acces DB.

    Tu peux donc rassembler dans un ou plusieurs datamodules tes composants et fonction qui accès à la DB.

    C'est une façon de faire "élégante" (pour moi)
    Tu peux le faire, tu veux le faire tu vas le faire Bref, soyons positif

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    En fait le DataModule c'est utile mais cela peut devenir trop énorme lorsque tu mets autant de TTable que tu as de table dans la base ... ayant vu des DataModule avec plus de 300 composants c'est horrible ...

    Pour séparer le métier de l'interface, il vaut mieux faire des objets métiers qui regroupent la données (sous forme de propriété pour les plus utilisées, sous forme d'un FieldBtName comme le DataSet pour les autres), ainsi que les traitements (Nouveau, Modifier, Supprimer, Lier Table A avec Table B ...)

    Ensuite, certains diront que tout le métier peut être mis dans des procédures stockées, mais là ... c'est un autre débat ...

    De plus, tu vas souvent devoir lancer des SQL, donc
    soit tu as des objets globaux que tu changes à chaque fois, vive le sac de noeud
    soit tu as un objet par query, ouch, ça risque d'être lourd ... mais cela peut t'amener à faire un objet dans le genre de celui ci au lieu d'un DataModule ...
    soit tu fais de l'allocation dynamique, et tu es rigoureux pour tes libérations, voir ce sujet

    Pour InterBase, si tu utilise les composants IB comme le IBQuery, il faut savoir que le prepare n'est pas implicite contrairement à la plupart des composants DB ... donc il faut créer autant de Query que de SQL, les préparer (à l'avance, choisir le moment opportun comme le chargement de l'application pour les plus utiliser, à la première utilisation pour les autes), ... n'ayant jamais poussé avec les composants IB, j'ignore si l'on prépare une requête sur le serveur, si lorsque l'on détruit l'objet est-ce que la requête est libérée aussi ou si c'est fait à la fermeture de la connexion ... au final, les composants ADO sont plus efficace ...

    je m'écarte ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Personnellement, chaque fois que je peux, je proscris les TTable et TStoredProcedure.

    Je fais tout par requêtes SQL. Donc le problème est réglé, je n'ai pas besoin de poser les composants sur quoi que ce soit.

    Je gère un composant de type Database en singleton dans l'application. Sur ce composant, je veille à ce qu'il possède deux méthodes :
    - ExecSQL : Une méthode a laquelle je fournis le code SQL d'une requête (une chaîne de caractères), avec éventuellement une liste de paramètres (un TParams). Cette méthode exécute la requête fournie en paramètre et ne retourne aucun résultat.
    - OpenSQL : Une fonction qui attends les mêmes paramètres que ExecSQL sauf que celle-ci est destinée à exécuter une requête qui retourne un résultat. En retour la fonction renvoie un TDataSet créer dynamiquement que je peux ensuite lire ou connecter à une grille.
    Comme l'a indiqué ShaiLeTroll, il faut juste faire attention à bien détruire le DataSet à la fin.

    Avec ça, tu fais tout. Les query, pour appeler une SP tu fais une requête SQL qui appelle la SP...

    Tu implémentes le composant database en fonction de l'API que tu veux utiliser. Pour ADO, Tu as la méthode Execute. Pour dbx, le composant TSQLConnection fonctionne déjà comme ça.
    En plus, le reste de ton code est indépendant de l'API utilisée et tu peux en changer en un claquement de doigt (dans mon dernier projet, je crois que j'ai bien dû toutes les essayer (ADO, dbx, NCOCI, OLEDB, OCI...)).

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15
  3. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo