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 :

Exécuter une requête SQL avec un timer sans utiliser de next


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 29
    Par défaut Exécuter une requête SQL avec un timer sans utiliser de next
    Bonjour à tous,
    J'aurais besoin de votre aide concernant un problème que je n'arrive pas à résoudre.. en effet je réalise grâce à une requête SQL une boucle while pour me permettre de retrouver des enregistrements dans une table ensuite grâce à 1 next je passe aux enregistrements suivants jusque là tout est ok par contre j'aimerais que ma requête avance seule grâce à un timer et non un next mais je n'arrive pas à générer le code ... voici mon code
    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 TForm1.Button1Click(Sender: TObject);
    begin
      query1.SQL.Clear;
      query1.SQL.Add('select * from affichdynamique order by Date;');
      if not query1.Active then query1.Active:=True else query1.Execute;
      if query1.RecordCount<>0 then
      begin
        query1.First;
        while not query1.Eof do
        begin
          label1.Caption:=query1.Fields[0].AsString;
          query1.Next;
        end;
      end;
    end;
    A l'heure actuelle mon next fonctionne avec l'appui sur le bouton mais je voudrais supprimer le bouton et que cela se fasse avec un timer au bout de 10s est ce possible comment faire ?

    Merci par avance

  2. #2
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    Tu peux par exemple activer ton timer au moment où tu lances le open de ta query. Et dans le OnTimer (de ton timer) tu fais ton query.next et la lecture de ta donnée. Sans oublier de vérifier que tu n'es pas arrivé à la fin des enregistrements.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 680
    Billets dans le blog
    65
    Par défaut
    Bonjour et bienvenue puisqu'il s'agit de votre premier message.

    j'aimerais que ma requête avance seule grâce à un timer et non un next
    Quelle idée étrange mais, bon pourquoi pas pour par exemple une sorte de "TIP OF THE DAY".

    A l'heure actuelle mon next fonctionne avec l'appui sur le bouton mais je voudrais supprimer le bouton et que cela se fasse avec un timer au bout de 10s est ce possible comment faire ?
    La solution proposée par blonde est certainement la meilleure.
    Toutefois j'aimerais me pencher sur votre code, car là j'ai quelques doutes
    dans un Query1.Close; avant cela va poser un premier problème.
    query1.SQL.Add('select * from affichdynamique order by Date;'); Je suis perplexe, Date est souvent un mot réservé par les SGBD sinon rien à dire sauf, peut être, que le ; n'est pas nécessaire et qu'il vaut mieux prendre l'habitude d'indiquer la liste des colonnes souhaitées que d'utiliser *
    if not query1.Active then query1.Active:=True else query1.Execute; Là, c'est beaucoup plus erroné. Déjà, puisque pour changer le SQL il faut faire un Close le test n'est plus nécessaire ensuite, toute requête renvoyant un résultat devrait être utilisée avec un Open (ou active:=true) donc seul Query1.Active suffit.
    Le me fait douter comme vous n'avez pas indiqué le type de composant de Query1 je suis parti sur du TQuery (BDE) basique, TQuery.Execute n'existe pas dans ce cas . Il aurait été bon de nous indiquer la version de Delphi, le set de composant utilisé pour se connecter aux tables et, tant qu'à faire le SGBD (certains permettant d'accéder directement à une ligne de table selon son rang)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      if query1.RecordCount<>0 then
      begin
        query1.First;
        ... 
      end;
    inutile, la portion de code suffit, nous en arrivons au code d'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     while not query1.Eof do
        begin
          label1.Caption:=query1.Fields[0].AsString;
          query1.Next;
        end;
    Donc quand vous écrivez
    A l'heure actuelle mon next fonctionne avec l'appui sur le bouton
    cela me laisse perplexe pour moi, ce code vous affiche la dernière ligne de la table (dernière date).

    En admettant qu'il y ait un timer de déposé sur votre forme je propose ceci

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    // je choisi le OnActivate pour ouvrir la table ce qui permet en cas de forme "indépendante" de repartir à la première ligne 
    procedure TForm1.FormActivate(Sender: TObject);
    begin
    Query1.Active:=False;
    Query1.SQL.Text:='select * from affichdynamique order by Date';
    Query1.Active:=True;
    Label1.Caption:=Query1.Fields[0].AsString;
    Timer1.Enabled;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    Query1.Next;
    if  Query1.EOF then 
         begin
              Label1.Caption:='Fin de table';
              // pour une boucle je ferai
              // Query1.First;
              // Label1.Caption:=Query1.Fields[0].AsString;  
         end
        else Label1.Caption:=Query1.Fields[0].AsString;
    end;

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    ..

    En admettant qu'il y ait un timer de déposé sur votre forme je propose ceci
    je ferais plutôt.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    // je choisi le OnActivate pour ouvrir la table ce qui permet en cas de forme "indépendante" de repartir à la première ligne 
    procedure TForm1.FormActivate(Sender: TObject);
    begin
    Query1.Active:=False;
    Query1.SQL.Text:='select * from affichdynamique order by Date';
    Query1.Active:=True;
    Label1.Caption:=Query1.Fields[0].AsString;
    if Query1.EOF then
      ShowMessage('aucun enregistrement trouvé')
    else
      Timer1.Enabled;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Label1.Caption:=Query1.Fields[0].AsString;
      Query1.Next;
      if  Query1.EOF then 
      begin
        ShowMEssage('Terminé');
        Timer1.Enabled := False;
      end;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 29
    Par défaut
    Bonjour à tous et merci beaucoup pour votre aide ça fonctionne et j'ai ainsi pu corriger mes erreurs récurrentes sur le code SQL (au passage)

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 680
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je ferais plutôt.
    Effectivement, j'avais écrit le code online sans en tester l'exécution. J'avais un doute sur le déclenchement du timer : le Ontimer se déclenchait-il lors de l'instruction Timer1.Enabled; ou pas ? Tu m'évites d'avoir à faire le test

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/11/2015, 09h36
  2. Exécuter une requête SQL avec Hibernate Interceptor
    Par top007 dans le forum Hibernate
    Réponses: 0
    Dernier message: 13/08/2014, 11h47
  3. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  4. [MySQL] concaténer une requête sql avec condition
    Par maliak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/02/2006, 12h01
  5. Une requête SQl avec concaténation
    Par Bobybx dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/01/2006, 10h18

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