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 :

Comment utiliser TADOStoredProc et DBGrid ?


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Comment utiliser TADOStoredProc et DBGrid ?
    Bonjour,

    j'ai une application qui affiche dans un dbgrid le résultat d'un TADOQuery relativement complexe (unions de plusieurs Select...) mais surtout qui traite de grosses tables.

    Dans un souci d'optimisation je cherche à exécuter le Query sur le serveur, pour cela je pense aux procédures stockées mais... je n'y arrive pas.

    Si quelqu'un a déjà traité ce genre de problème merci de poster une aide ou un petit tuto.

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Il serait peut être préférable d'utiliser les vues. Cette démarche me paraît mieux adaptée pour alimenter un dbgrid que de mettre en oeuvre une procédure stockée.

    Pour ma part, je procède ainsi et utilise les procédures stockées pour les opérations sur la base ou pour le retour d'une ou deux données.

    Bon courage

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    exactement les procédures stockées servent à effectuer des calculs sur les champs mais là tu compte extraire des données donc c'est pas le bon moyen pour le faire. en plus les requêtes même sil elles sont complexes elles sont (en général) effectuées sur le poste client pas serveur.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Tout d'abord merci pour vos réponses.

    En effet, les vues sont plus simples à mettre en oeuvre seulement mes adoquery utilisent des paramètres. Et d'après ce que je sais les vues ne prennent pas les paramètres.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Si bien sûr. Tu dois considérer une vue comme un Query à qui tu transmets ton paramètre comme d'habitude.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MA_VUE WHERE MON_CHAMP = :Param1;

    @+ Claudius

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Si bien sûr. Tu dois considérer une vue comme un Query à qui tu transmets ton paramètre comme d'habitude.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MA_VUE WHERE MON_CHAMP = :Param1;

    @+ Claudius
    J'ai essayé ceci:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create view test01 AS     
    SELECT Nom, Prenom 
    FROM table1               
    WHERE service = :pSrv

    Mais ça ne passe pas, il me dit que l'utilisation des paramètres n'est pas permise.

    Pour info, mon serveur est un AS400 (iSeries) et mon SGBD est DB2.

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Je construirais ma vue ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW test01 AS     
    SELECT Nom, Prenom, service
    FROM table1

    Ensuite avec un Query:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Prenom
    FROM test01
    WHERE service = :pSrv;

    @+ Claudius

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Je construirais ma vue ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW test01 AS     
    SELECT Nom, Prenom, service
    FROM table1

    Ensuite avec un Query:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Prenom
    FROM test01
    WHERE service = :pSrv;

    @+ Claudius
    Ok j'avais mal compris.

    Merci pour ton coup de main et merci à tous d'avoir participé.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Bonsoir,

    j'ai fait des tests avec les vues, ça marche le seul bémol c'est que ma vue ne me permet pas d'optimiser mes requêtes qui je le rappelle traitent des tables très volumineuses (obligé d'avoir une vue contenant tous les services puis de faire une sélection derrière) .

    Donc je vais revenir aux procédures stockées, et je vais pour cela me pencher sur un documents d'IBM (en anglais) que j'ai trouvé.

    Je vous tiendrai au courant.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Maintenant ça marche, J'ai créé une Proc Stockée dans BD2, j'ai ajouté un TADOSTOREDPROC dans mon projet delphi, auquel j'ai attaché un TDATASOURCE.
    Ensuite j'ai attaché mon DBGRID à mon Datasource, et ça marche.

    Pour ceux que ça intéresse voici le code de la procédure sotckée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create PROCEDURE Test01(IN pSRV CHAR(9)) 
    RESULT SETS 1                                      
    LANGUAGE SQL                                       
    BEGIN                                              
    DECLARE c1 CURSOR WITH RETURN FOR                  
    SELECT ana, mois, annee, 'BUDGET' as LIB, Montant 
    FROM BUDGET where ana = pSRV              
    UNION ALL                                          
    SELECT ana, mois, annee, 'REALISE' as LIB, Montant 
    FROM REALISE where ana = pSRV;             
    OPEN c1;                                           
    END

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Bravo c'est génial mais j'ai deux petites questions si tu permet :

    1. es-tu satisfait du temps de réponse ?
    2. as-tu mesuré la différence entre les deux modes ; procédure stockée et requête SQL ?


    Enfin c'est juste pour avoir une idée. Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Bravo c'est génial mais j'ai deux petites questions si tu permet :

    1. es-tu satisfait du temps de réponse ?
    2. as-tu mesuré la différence entre les deux modes ; procédure stockée et requête SQL ?


    Enfin c'est juste pour avoir une idée. Bonne chance.
    Non je n'ai pas pu faire de mesures, mais je peux te dire que ça n'a rien à voir (un rapport de 1 à 50 facile).

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Cependant il reste un petit souci;

    Les chaines 'REALISE' et 'BUDGET' sont renvoyées en type varbytes
    et ceci même si je fais un cast('BUDGET as char(10)) dans mon sql !!

Discussions similaires

  1. Comment utiliser un DBGRID
    Par nd25 dans le forum Débuter
    Réponses: 6
    Dernier message: 24/11/2008, 09h56
  2. [Débutant] Comment utiliser une DBGrid ?
    Par braecking dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/02/2008, 17h30
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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