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

Requêtes MySQL Discussion :

inclure variable query via Delphi [MySQL-5.6]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut inclure variable query via Delphi
    Salut,
    Je voudrais inclure dans mes requêtes SQL via Delphi des variables comme par exemple ici pour balayer une table sur un champ heure et un filtre heure dans une date:
    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
    25
    26
    27
    28
     
           for i:=0  to 23 do
                    begin
                    if i<10 then
                    istr:='0'+intTostr(i)
                    else
                    istr:= intTostr(i);
                    if i<9 then
                    istr1:='0'+intTostr(i+1)
                    else
                    istr1:= intTostr(i+1);
     
                   Query.Active:=False;
                    Query.SQL.Clear;
                      Query.SQL.add('UPDATE out_evo_tat');
                      Query.SQL.add('SET TAT_CHAINE = (SELECT AVG(DELTA_CKIN_RESAN)');
                      Query.SQL.add('FROM tests');
                      Query.SQL.add('WHERE TAT_CHAINE = out_evo_tat.TAT_CHAINE');
                      Query.SQL.add('AND DELTA_CKIN_RESAN BETWEEN 0 AND 3600');
                      Query.SQL.add('AND CKIN_NEMO_DT BETWEEN 2013-07-30 ');
                      Query.SQL.add(Quotedstr(istr));
                      Query.SQL.add(':00:00 AND 2013-07-30 ');
                      Query.SQL.add(Quotedstr(istr1));
                      Query.SQL.add(':00:00)');
                      Query.SQL.add('WHERE Heure = ');
                      Query.SQL.add(Quotedstr(intTostr(i)));
                      Query.ExecSQL(true) ;
                     end;
    PHPMySQL me renvoie:
    Error...right syntax to use near "00'
    :00:00 AND 2013-07-30
    '01'
    :00:00)
    WHERE Heure =
    '0" at line 7
    ???
    C'est sûrement une co... mais là je boucle

  2. #2
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Bonjour.
    il y effectivement une erreur de syntaxe dans la requête : un ' de trop en rouge ci-dessous.
    "00'
    :00:00 AND 2013-07-30
    '01'
    :00:00)
    WHERE Heure =
    '0" at line 7
    En SQL, l'heure s'écrit 00:00:00 et non pas 00' 00:00 ...
    L'erreur vient de la fonction Quotedstr qui ajoute ' avant l'ajout de la variable. Je ne connais pas Delphi mais j'imagine que cette fonction doit avoir des options de formatage

  3. #3
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    J'ai aussi testé:
    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
    25
    26
    27
    for i:=0  to 23 do
                    begin
                    if i<10 then
                    istr:='0'+intTostr(i)
                    else
                    istr:= intTostr(i);
                    if i<9 then
                    istr1:='0'+intTostr(i+1)
                    else
                    istr1:= intTostr(i+1);
     
                   Query.Active:=False;
                    Query.SQL.Clear;
                      Query.SQL.add('UPDATE out_evo_tat');
                      Query.SQL.add('SET TAT_CHAINE = (SELECT AVG(DELTA_CKIN_RESAN)');
                      Query.SQL.add('FROM tests');
                      Query.SQL.add('WHERE TAT_CHAINE = out_evo_tat.TAT_CHAINE');
                      Query.SQL.add('AND DELTA_CKIN_RESAN BETWEEN 1800 AND 3600');
                      Query.SQL.add('AND  CKIN_NEMO_DT >= 2013-07-30 ');
                      Query.SQL.add(Quotedstr(istr));
                      Query.SQL.add(':00:00 AND CKIN_NEMO_DT < 2013-07-30 ');
                      Query.SQL.add(Quotedstr(istr1));
                      Query.SQL.add(':00:00)');
                      Query.SQL.add('WHERE Heure = ');
                      Query.SQL.add(Quotedstr(intTostr(i)));
                      Query.ExecSQL(true) ;
                     end;
    PHPMySQL me renvoie le même message

  4. #4
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    J'utilise pourtant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Query.SQL.add('WHERE Heure = ');
    Query.SQL.add(Quotedstr(intTostr(i)));
    qui fonctionne très bien???

  5. #5
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Disons plutôt que tu ne sais pas encore si ça fonctionne puisque SQL n'est pas encore arrivé jusque là. Tu verras alors qu'il y aura une erreur puisqu'il manque un apostrophe après la valeur de l'heure ...
    La Syntaxe MySQL exige que les valeurs des variables soient entourées de ' :
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Heure = '01:24:36'

    Je pense que tu devras écrire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Query.SQL.ADD(Quotedstr(intTostr(i)));
    Query.SQL.ADD('' ');
    pour terminer correctement ta requête

    Mais pour essayer de résoudre ton premier problème, n'existe il pas une fonction Str () que tu pourrais utiliser au lieu de Quotedstr () et qui te renverrai la valeur de la variable sans le ' devant ?

  6. #6
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    En fait c'est simple str existe bien : http://delphi.about.com/library/rtl/blrtlStr.htm

    tu remplaces quotedstr par str pour les 2 fois ou tu fourni un bout de la valeur de l'heure et ty ne change rien pour le troisième quotedstr

  7. #7
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    de fait, maintenant plus de bug mais la condition du range de date (>= <) ne renvoie rien???
    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
    25
    26
    27
    28
    29
     
     i:=0;
                 repeat
                    begin
                    if i<10 then
                    istr:='0'+intTostr(i)
                    else
                    istr:= intTostr(i);
                    if i<9 then
                    istr1:='0'+intTostr(i+1)
                    else
                    istr1:= intTostr(i+1);
     
                   Query.Active:=False;
                    Query.SQL.Clear;
                      Query.SQL.add('UPDATE out_evo_tat');
                      Query.SQL.add('SET TAT_CHAINE = (SELECT AVG(DELTA_CKIN_RESAN)');
                      Query.SQL.add('FROM tests');
                      Query.SQL.add('WHERE TAT_CHAINE = out_evo_tat.TAT_CHAINE ');
                      Query.SQL.add('AND DELTA_CKIN_RESAN BETWEEN 0 AND 3600 ');
                      Query.SQL.add('AND tests.CKIN_NEMO_DT >= ''2013-07-30 '+istr+':00:00''');
                      Query.SQL.add('AND tests.CKIN_NEMO_DT < ''2013-07-30 '+istr1+':00:00''');
                      Query.SQL.add('AND out_evo_tat.Heure = ');
                      Query.SQL.ADD(Quotedstr(intTostr(i)));
                      Query.SQL.add(')');
                      Query.ExecSQL(true) ;
                    end;
                    i:=i+1;
                    until  i>23;

  8. #8
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    ...et le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     i:=0;
                 repeat
                    begin
                    if i<10 then
                    istr:='0'+intTostr(i)
                    else
                    istr:= intTostr(i);
                    if i<9 then
                    istr1:='0'+intTostr(i+1)
                    else
                    istr1:= intTostr(i+1);
     
                   Query.Active:=False;
                    Query.SQL.Clear;
                      Query.SQL.add('UPDATE out_evo_tat');
                      Query.SQL.add('SET TAT_CHAINE = (SELECT AVG(DELTA_CKIN_RESAN)');
                      Query.SQL.add('FROM tests');
                      Query.SQL.add('WHERE TAT_CHAINE = out_evo_tat.TAT_CHAINE ');
                      Query.SQL.add('AND DELTA_CKIN_RESAN BETWEEN 0 AND 3600 ');
                   //   Query.SQL.add('AND tests.CKIN_NEMO_DT >= ''2013-07-30 '+istr+':00:00''');
                   //   Query.SQL.add('OR tests.CKIN_NEMO_DT < ''2013-07-30 '+istr1+':00:00''');
                      Query.SQL.add('AND out_evo_tat.Heure = ');
                      Query.SQL.ADD(Quotedstr(intTostr(i)));
                      Query.SQL.add(')');
                      Query.ExecSQL(true) ;
                    end;
                    i:=i+1;
                    until  i>23;
    ne me renvoie qu'un résultat à la dernière ligne (23) de la table out_evo_tat dans la bonne colonne TAT_Chaine (au lieu d'une valeur à chaque ligne de cette table) ?!?
    Déjà merci 1000x pour vos aides et suggestions

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

Discussions similaires

  1. recuperer champs texte dans variable session via javascript
    Par richton95 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/03/2006, 14h17
  2. Sélection dans un query via case à cocher dans un form
    Par Bernard123 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2005, 14h49
  3. Modifier la variable desktopwidth en delphi possible ?
    Par ludo5532 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 31/08/2005, 08h12
  4. [Firebird D7] Modifier une procedure stocké via Delphi
    Par EGI dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 30/03/2005, 15h54
  5. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56

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