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 :

affichage d'une progressbar lors de l'execution d'une requete


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut affichage d'une progressbar lors de l'execution d'une requete
    Salut à tous, j'aimerai savoir comment afficher une progress bar durant l'execution d'une requete de type Select *

    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
              ProgressBar1.Min:=0;
              ProgressBar1.Max:=limite //c'est une variable que j'ai défini
     
              MaRequete.open;
              While not (MaRequete.Eof) do 
                   Begin
                      ProgressBar1.Position;=ProgressBar1.Position+1;
                      MaRequete.next;
                   end;
    Ce code marche très bien seulement il execute d'abord la requête avant d'afficher la progressbar, comment faire en sorte ke la progressbar progresse en même temps ke l'execution de la requête (c-a-d en même temps que le parcours de ma table puisque tel est le but de ma requête)

    Si quelqu'un peut me répondre, merci bcp

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    il faut que tu rajoutes un application.processmessages pour que tu vois ta barre défiler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     ProgressBar1.Min:=0;
              ProgressBar1.Max:=limite //c'est une variable que j'ai défini
              
              MaRequete.open;
              While not (MaRequete.Eof) do 
                   Begin
                      ProgressBar1.Position:=ProgressBar1.Position+1;
                      MaRequete.next;
                      Application.ProcessMessages;
                   end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Merci malatar, j'ai testé mais ma requête est toujours effectuée une première fois avant à cause du MaRequete.open

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Malatar
    il faut que tu rajoutes un application.processmessages pour que tu vois ta barre défiler.
    Ma barre défilait bien avec ma méthode. Le problème est que lorsque j'ouvre MaRequete par le MaRequete.open celle ci s'execute avant d'effectuer le défilement de la ProgressBar. Visiblement application.processmessages ne change rien à cela

    J'aimerai savoir comment faire pour que la ProgressBar défile en même temps que l'execution de la requête.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par RodEpsi
    Ma barre défilait bien avec ma méthode. Le problème est que lorsque j'ouvre MaRequete par le MaRequete.open celle ci s'execute avant d'effectuer le défilement de la ProgressBar. Visiblement application.processmessages ne change rien à cela

    J'aimerai savoir comment faire pour que la ProgressBar défile en même temps que l'execution de la requête genre comme un threat séparé pour d'un côté executer la requête et d'un autre côté effectuer le défilement de la ProgressBar

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    A ma connaissance, il n'y a qu'avec les composants Ado qu'il est possible d'utiliser une progressbar lors de l'exécution de la requete.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    J'utilise déjà ADO

    En fait ma requête récupère des photo au format bmp stockées directement dans une bdd acess, évidemment cette requête prend du temps la base de données faisant environ 150Mo à cause des images... :s Je voulais donc un progressBar le temps que la requête s'execute pour faire patienter l'utilisateur mais le mieux serait évidemment que ça ne rame pas Or j'ai stocké des bmp dans la bdd car je n'arrivais pas à insérer du jpeg... Ne saurais-tu pas sinon à tout hasard comment insérer une image jpeg dans une bdd access ???

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Une QR que je suis en train de rédiger sur l'utilsation des progressbar avec Ado


    [QR] Comment utiliser une progressbar avec un TAdoQuery ?

    Afin de pouvoir utiliser un AdoQuery avec un composant de type ProgressBar, il faut configurer les options du composant, afin de le rendre asynchrone, de la manière suivante :

    Propriété ExecuteOptions :
    • eoAsyncExecute à True
    • eoAsyncFetchNonBlockinng à True


    Grace à cette configuration vous pouvez maintenant utiliser les deux événements onFecthProgress et OnFetchComplete

    Ci-dessous un exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    procedure TfrmMain.ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
      MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      ProgressBar1.Max:= MaxProgress;
      ProgressBar1.Position := Progress;
      Application.ProcessMessages;
    end;
     
    procedure TfrmMain.ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
      const Error: Error; var EventStatus: TEventStatus);
    begin
      // La requete est terminée, alors on passe à vrai la variable pour laisser le programme continuer
      bMaVariableGlobale := True; 
    end;
    Le code pour l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bMaVarGlobal := False; 
    With AdoQuery do
    begin
      Close;
      // Ici le SQL
      Open;
      // On attend que la requete se termine pour continuer
      While not bMaVarGlobal do
        Application.ProcessMessages;
    end;

    Sinon pour l'insertion des données blob dans une base de données :

    http://delphi.developpez.com/faq/?pa...ichierdansblob
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Merci Maletar je v tester de suite pour la progressbar par contre pour l'insertion de l'image dans la bdd (lien que tu m'as filé) c'est exactement la méthode que j'ai utilisé mais visiblement la bdd access n'aime pas le jpeg, je pe insérer du bmp sans problème mais j'ai un message d'erreur dès que je cherche à insérer du jpeg, du coup j'ai utilisé une fonction de conversion des JPEG en BMP afin de pouvoir insérer dans ma table, ce qui l'alourdit évidemment ...

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Et si tu mettais les images à l'extérieur de la base de données et que tu indiquais uniquement le chemin+le nom dans la base de données. ca serait surement beaucoup moins lourd.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Oui oui je sais bien mé je reprends un travail en cours pour une entreprise dans lequel les images étaient directement stockées dans la bdd or je n'ai pas tro envie d'arriver et de révolutionner leur système... Et puis c'est surtout qu'il s'agit d'une entreprise utilisatrice, donc je n'ai aps tro envie que les photos se baladent sur le disque dur (une mauvaise manip est si vite arrivée), mais il est vrai que je songe peut êtr à faire une seconde version avec la gestion des images à partir du disque dur, en attendant je voulais finir au mieux ce que j'avais commencé, ça pourra toujours servir (de plus j'ai rendez-vous ce soir avec le client donc fodrait ke g kelkechose ki tienne la route et il est tro tard pour changer toute la strucure je n'ai aps le temps...), voilà tu connais toute ma vie

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ne revenir à ton problème, normalement en utilisant le A-1 de cette QR, tu ne devrais pas avoir de problème pour insérer un jpeg.
    Après ca depend si tu veux afficher en direct live les images à l'utilisateur, alors la tu n'as pas vraiement le choix, tu es limité aux formats acceptés par le composant dbimage (ou assimilé).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Malatar
    Pour ne revenir à ton problème, normalement en utilisant le A-1 de cette QR, tu ne devrais pas avoir de problème pour insérer un jpeg.
    Après ca depend si tu veux afficher en direct live les images à l'utilisateur, alors la tu n'as pas vraiement le choix, tu es limité aux formats acceptés par le composant dbimage (ou assimilé).
    Pourtant je t'assure que j'ai procédé de cette manière qui accepte parfaitement les bmp mais affiche une erreur lors de l'insertion d'un jpg dans la table ...

    Sinon j'ai testé pour la progressBar, j'obtiens l'erreur suivante :

    "Le fournisseur actuel ne prend pas en charge l'exécution asynchrone."


  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu peux faire voir le code de ta procédure d'insertion et de l'utilisation de la ProgressBar ?

    Tpaux m'indiquer l'erreur exacte que te retourne delphi quand tu insères un jpeg ?

    Sinon tu as fait un pas à pas pour voir ou ca plante exactement ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  15. #15
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Oups !!! Visiblement j'avais dû faire une grosse connerie car je te confirme qu'on peut insérer du jpg dans une bdd access :s Je viens de le faire.
    ça risque de sacrément arranger mes affaires, je n'ai plus qu'à stocker du jpg dans la table, ça l'allègera considérablement

  16. #16
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Cependant Malatar en ce qui concerne la progressBar, dès l'instant que j'active les Options
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eoAsyncFetchNonBlocking = true
    sur ma requete et que j'ouvre ma requete en faisant simplement
    j'obtiens l'erreur suivante :

    "Le fournisseur actuel ne prend pas en charge l'execution asynchrone"

    c'est pourtant bien les 2 champs que tu m'avais dis d'activer non ?

  17. #17
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ma part, je n'ai testé qu'avec une base de données ACCESS, après faut voir si les configurations du composants + le pilote de connexion à la base de données prennent en charge ces options.

    Tu utilises quoi comme base de données ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  18. #18
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    ACCESS justement...

  19. #19
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Le composant Ado que tu utilises, il sert que pour cette requete où pour d'autres ?
    Car je sais pas si ca fonctionne avec des requetes autres que du type Select
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Malatar
    Le composant Ado que tu utilises, il sert que pour cette requete où pour d'autres ?
    Car je sais pas si ca fonctionne avec des requetes autres que du type Select

    euh il s'agit d'une requête select mais j'ai un datasource qui relie la requête à une DBgrid et à un EDBImage

Discussions similaires

  1. Délai expiré lors de l'execution d'une requete sqlserver
    Par lc.soft dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/09/2015, 12h41
  2. Réponses: 8
    Dernier message: 17/03/2009, 18h49
  3. Erreur PLSQL lors de l'execution d'une fonction
    Par chicken92000 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 17/03/2006, 18h12
  4. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 13h43
  5. Execution d'une fonction lors de l'appui sur CTRL+ALT+I
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 17/03/2004, 02h35

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