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

Windows Forms Discussion :

Faire patienter l'utilisateur durant l’exécution d'une requête SQL ?


Sujet :

Windows Forms

  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut Faire patienter l'utilisateur durant l’exécution d'une requête SQL ?
    Bonjour

    Comment peut-on faire patienter l'utilisateur genre de faire un progress bar ou une image gif loading durant l’exécution d'une requête SQL ?

    Merci
    Bien Cordialement

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Pour ce faire sans bloquer l'ihm , il faut passer par exemple par un background worker pour lancer ladite requete.

  3. #3
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Salut ce vidéo explique tt


  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Salut ,
    Merci pour le vidéo , c'est très claire
    Comment peut on programmer le progress bar genre le temps d'attente de l’exécution de la requête SQL ?
    La requête SQL contient un calcul et des inners joins dont le temps de calcul pour 1 stockage d'une journée est de 1e min, nous avons un stockage hebdomadaire.

    Merci
    Cordialement

  5. #5
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    met ta requête dans une procstock ensuite dans une méthode
    tu pass la methode dans method avec InvokeMethod
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    internal class ServiceHelper<T>
            where T: class
        {
            private readonly BackgroundWorker backgroundWorker;
            internal delegate void Completed(T result);
            internal event Completed CompletedHandler;
     
            internal ServiceHelper()
            {
                backgroundWorker = new BackgroundWorker();
            }
     
            internal void InvokeMethod(Func<T> method)
            {
                backgroundWorker.DoWork += BackgroundWorkerDoWork;
                backgroundWorker.RunWorkerCompleted += BackgroundWorkerRunWorkerCompleted;
                backgroundWorker.RunWorkerAsync();
            }
     
            private void BackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (e == null)
                    return;
                var result = e.Result as T;
                if (result == null)
                    throw new InvalidCastException("The result obtained is not of the requested type.");
                if (CompletedHandler != null)
                    CompletedHandler(result);
            }
     
            private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
            {            
                if (e == null)
                    return;
                var method = e.Argument as Func<T>;
                if (method == null)
                    return;
                e.Result = method();
            }
    }

  6. #6
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Salut , Merci

    Comment peut on remplir le progress bar avec le code ci dessus ?

  7. #7
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Pourquoi j'ai eu ce problème après le copie colle du code ci dessus dans mon namespace?
    Images attachées Images attachées  

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    tout est indiqué dans le message d'erreur : ta déclaration de Form1 doit être la première de ton fichier Form1.cs.
    Tu doit recopier la classe que t'a fournie charouel après (ou dans un autre fichier).

    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    ok , comment peut on utiliser cette classe après le copier dans un nouveau fichier class en C#?
    J'ai créé la procédure stockée du ma requête , après comment on peut faire l'appel du procédure stockée en utilisant la classe ci dessus ?
    Et pour la partie du progress bar comment peut on la programmer ?

    merci

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Faire une progresse bar qui avance en syncro avec le calcul de la requêtes sur SQL c'est impossible. Tu peux mettre une progressbar qui tourne en boucle par contre.

    Il y a éventuellement une solution en faisant une statistique sur le temps d'exécution de la requêtes et en remplissant la progressbar selon une estimation du temps. Si tu sais que ta requête fait normalement 1 minutes, tu peux très bien bidouiller un timer pour qu'il remplisse la barre en 1 minutes indépendamment du traitement de la requête.

    Par contre mettre une progressbar sur la matérialisation du résultat d'une requêtes en objet .net (des entités, des datarows ou autres) c'est possible, même si c'est moyennement intéressant vu que c'est pas forcément ce qui prend le plus temps.

    J'ajouterai qu'une requête SQL qui fait 1 minutes, c'est probablement une requête, ou une base de données mal construite.

  11. #11
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Du point de vue conception; comment peut-on résoudre le problème d'avoir 200 000 lignes dans un tableau qui contient des données suivant des dates ? (chaque date contient 200 000 lignes) ?
    La requête prend du temp car il y a inner join 2 fois entre 2 tableaux différentes (tableau calls_durations 2G et calls_durations 3G d'une part et d'autre part Est_Calls_2G et Est_Calls_3G) et il y a le pivotage suivant la capabilité des mobiles.
    Alors il y a un traitement de 200 000 *4= 800 000 lignes pour une seule date.

Discussions similaires

  1. Phrase pour faire patienter l'utilisateur durant l'envoi d'un formulaire
    Par heretik25 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/03/2012, 13h40
  2. exécution d'une requête SQL dans access
    Par skyarnangel dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2009, 11h18
  3. Exécution d'une requête SQL qui affiche un message
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/11/2006, 16h15
  4. Assurer l'exécution d'une requête SQL
    Par condor_01 dans le forum JDBC
    Réponses: 4
    Dernier message: 11/08/2006, 11h23
  5. Erreur d'exécution d'une requête sql
    Par marceline dans le forum Oracle
    Réponses: 2
    Dernier message: 11/07/2006, 13h12

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