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 :

A nouveau syntaxe update imbriqués


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut A nouveau syntaxe update imbriqués
    Décidément, je sèche avec les requêtes imbriquées

    Voici le cas qui me préoccupe:
    J'ai deux tables qui contiennent respectivement
    Table1: QC_Res champs: Test, QC_lot, Result, Flag
    Table2: QC_Val Champs: Test, QCLot, Mean, ETCalc
    Tout est en VARCHAR!!!

    Je souhaite mettre un Flag à "2SD" quand le Flag est vide et que le Result<Mean-(2*ETCalc)
    pour le lot et le test correspondant bien sûr

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
                    Query.Active:=False;
                    Query.SQL.Clear;
                    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res');
                    Query.Active:=true;
                    Query.First;
                    while not Query.eof do
                          begin
                          Query2.Active:=False;                                    // query2
                          Query2.SQL.Clear;
                          Query2.SQL.Add('UPDATE qc_res SET Flag = '+quotedStr('-2SD')
                          +'WHERE '+(Query.FieldByName('Result').AsString)
                          +'< Mean FROM QC_Val'  );
                            //  +'(WHERE '
                              +'(WHERE Test LIKE '+Query.FieldByName('Test').AsString       //de query
                              //  message d'erreur de la ligne ci-dessus: Opérateur pas applcable à ce type d'opérande
                              // j'ai aussi tenté le "=" mais pas mieux :-(
                              +'AND'
                              +'Lot LIKE '+Query.FieldByName('QC_Lot').AsString
                              +')'
                          +'- 2*ETCalc FROM QC_Val '
                              +'(WHERE '
                              +'Test = '+Query.FieldByName('Test').AsString
                              +'AND'
                              +'Lot = '+Query.FieldByName('QC_Lot').AsString
                              +')'
                          +'AND  Flag FROM QC_Res = '')
                          +')');
                          Query2.ExecSQL();
                          end;
                    Query.Next;
    Avant de voir à la ponctuation, qui peux me dire si au moins la structure est correcte?
    Bien sûr le plaisir de la ponctuation est ensuite une autre paire de manches
    pour vos lumières d'experts

  2. #2
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    ... oui, j'ai essayé le LIKE et le = mais pas mieux

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Ce sont des chaînes de caractères, donc à mettre entre apostrophes
    Pour une recherche partielle par LIKE, il faut faire suivre le texte d'un %.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ... where Champ LIKE 'texte%'

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Décidément tu sembles fâché avec les requêtes paramétrées !! et le quotedStr tu ne l'utilises que rarement !

    ensuite , première erreur ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     +'WHERE '+(Query.FieldByName('Result').AsString)
    il manque le nom du champ


    mais surtout voici quelques points qui me choquent :
    1-
    Tout est en VARCHAR!!!
    Comment une moyenne et un écart type (si j'ai bien compris) peuvent-ils être en varchar
    2- c'est ta sélection des enregistrements de Query qui ne va pas (voir le SQL de la procedure)
    3- Il ne te viens pas à l'esprit de récupérer ton SQL en mode debug et vérifier ce texte directement avec un GUI ?
    4- pourquoi ne pas passer par des procedures mySQL ? (note , cette remarque s'applique également à ton post précédent)


    en gros (Syntaxe Firebird à adapter)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE PROCEDURE MAPROC  
    DECLARE VARIABLE STEST VARCHAR(nn); // pour le test selectionné
    DECLARE VARIABLE SLOT   VARCHAR(nn); // pour le lot selectionné 
    begin
     FOR SELECT R.Test, R.QC_Lot FROM qc_res R JOIN QC_val v ON R.TEST=V.TEST AND R.QC_LOT=V.QCLOT
           WHERE R.Flag is NULL AND R.Result<V.MEAN-(2*V.ETCALC) 
           INTO :STEST,:SLOT
     DO  UPDATE QC_VAL SET FLAG='-2SD' WHERE TEST=:STEST AND QC_LOT=:SLOT; 
    end;
    et du coup une simple exécution de la procédure via le programme au lieu de deux query , d'une boucle et de la construction de SQL (query2)
    sans parler de l'avantage de faire exécuter ça sur le serveur en une seule transaction
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Merci Sergiomaster!
    concernant ta remarque:

    +'WHERE '+(Query.FieldByName('Result').AsString)
    il manque le nom du champ

    C'est une valeur renvoyée par le QUERY du début:
    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res');

    Concernant le varchar je m'en doutais et je vais corriger ça tout de go, mais j'avais une erreur avant ce traitement.

    En fait ma question principale est de savoir si 2 query imbriqués sont possibles?
    Ici Query et Query2
    Query first and next permettant de récupérer les valeurs: Test, Result, QC_Lot, Flag
    à chaque boucle
    Query2 récupère ces valeurs et les compare à d'autres valeurs via un calcul mean-2*SD pour faire un update conditionnel de flag
    ou faut-il utiliser un LIMIT 1 OFFSET i pour récupérer ces données?

    Merci en tout cas pour tes conseils

  6. #6
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Je tente une autre approche, mais pas mieux
    le code=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    j:=0;
            for i:=1 to Query.FieldByName('nombre').AsInteger do
            begin
                    Query.Active:=False;
                    Query.SQL.Clear;
                    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res LIMIT 1 ,'+quotedStr(intToStr(j)));
                    Query.Active:=true;
                    memo1.Lines.Append(IntToStr(j)+' '+Query.FieldByName('test').AsString+' '+FloatToStr(Query.FieldByName('Result').Asfloat));
                    j:=j+1;
            end;
    me renvoie une erreur "near ''0'' at line 1"
    j'utilise déjà j:=i pour ne pas utiliser le compteur lui-même mais pas mieux non-plus



    Merci encore

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    j'avais bien compris ton traitement , ce qui n'est pas bon c'est ta manière de le faire , (encore moins dans ton dernier jus)
    je n'ai pas bien compris la structure des tables et encore moins leurs relations exacte

    Et après avoir fait une rapide recherche mysql , si j'ai bien vu qu'il existait des procédures , je n'ai par contre pas vu l'équivalent de FOR SELECT ... DO

    donc si je reprends le code de ton premier post , voici ce qui me paraît le plus proche de la demande

    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
     Query.Active:=False;
     Query.SQL.Clear;
     Query.SQL.Add('SELECT r.Test, r.QC_Lot,R.result FROM qc_res r');
     Query.SQL.Add('JOIN QC_val v ON R.TEST=V.TEST AND R.QC_LOT=V.QCLOT');  // jointure avec la table QCVal
     Query.SQL.Add('WHERE R.Flag IS NULL AND R.Result<V.MEAN-(2*V.ETCALC)');   // test des conditions  
     Query.Active:=true;
     // Query.First; inutile 
     Query2.SQL.Text:='UPDATE QC_VAL SET FLAG='-2SD' WHERE TEST=:STEST AND QC_LOT=:SLOT AND RESULT=:SR' ;  // c'est bien les requêtes paramètrées 
     Query2.SQL.Prepare; // pas obligatoire mais tout dépend des composants d'accès  
     while not Query.eof do
          begin
             Query2.ParamByName('STEST').asString:=Query.FieldByName('TEST').asString;
             Query2.ParamByName('SLOT').asString:=Query.FieldByName('QC_LOT').asString;
             Query2.ParamByName('SR').asFloat:=Query.FieldByName('RESULT').asFloat;
             Query2.ExecSQL();
             Query.Next;
         end;
    +'WHERE '+(Query.FieldByName('Result').AsString)
    C'est une valeur renvoyée par le QUERY du début:
    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res');
    OUI mais il n'empêche , la clause WHERE c'est un Champ+une condition+une valeur donc selon ton SQL il manquerait WHERE RESULT=Query.FieldByName('RESULT').as .....

    faut-il utiliser un LIMIT 1 OFFSET i pour récupérer ces données?
    non , tu n'a pas compris la notion de LIMIT
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Salut Sergiomaster et merci pour ces explications, je teste ça maintenant
    Par contre au sujet de LIMIT:
    faut-il utiliser un LIMIT 1 OFFSET i pour récupérer ces données? (et dans MySQL remplacer OFFSET par ,)
    non , tu n'a pas compris la notion de LIMIT
    Il me semble que LIMIT 1,i permet de lire un record à partir de i
    (et par exemple LIMIT 5, 10 permet de lire 5 record à partir de l'enregistrement 10)
    ou je me trompe?
    Donc le but de ma boucle était de lire à chaque itération le record suivant
    ...mais bon, je n'y suis peut-être pas?!?

    Encore merci!!!
    PhilLu

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    par exemple LIMIT 5, 10 permet de lire 5 record à partir de l'enregistrement 10)
    Non, ça retourne 10 enregistrements en partant du 6ième (indice à base 0) et pourquoi quotedStr(intToStr(j)), ce sont des entiers
    Peut-être relire Syntaxe de SELECT.

  10. #10
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Voilà SergioMaster, j'ai testé après avoir changé qq paramètres de ma DB:
    Mean et ETCalc de QC_Val sont en float (et plus en Varchar)
    Flag de QC_Res est en VarChar(5) avec défault NULL
    et le code (corrigé pour le quotedstring) est:
    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
     
    Query.Active:=False;
     Query.SQL.Clear;
     Query.SQL.Add('SELECT r.Test, r.QC_Lot,R.result FROM qc_res r');
     Query.SQL.Add('JOIN QC_val v ON R.TEST=V.TEST AND R.QC_LOT=V.QCLOT');  // jointure avec la table QCVal
     Query.SQL.Add('WHERE R.Flag IS NULL AND R.Result<V.MEAN-(2*V.ETCALC)');   // test des conditions
     Query.Active:=true;
     // Query.First; inutile
     //modifié
     //Query2.SQL.Text:='UPDATE QC_VAL SET FLAG='-2SD' WHERE TEST=:STEST AND QC_LOT=:SLOT AND RESULT=:SR' ;
     //en
     Query2.SQL.Text:='UPDATE QC_VAL SET FLAG='+quotedStr('-2SD') +'WHERE TEST=:STEST AND QC_LOT=:SLOT AND RESULT=:SR' ;  // c'est bien les requêtes paramètrées
     
     //Query2.SQL.Prepare; // pas obligatoire mais tout dépend des composants d'accès   ?Identificateur non déclaré :'Prepare'
     while not Query.eof do
          begin
             Query2.ParamByName('STEST').asString:=Query.FieldByName('TEST').asString;
             Query2.ParamByName('SLOT').asString:=Query.FieldByName('QC_LOT').asString;
             Query2.ParamByName('SR').asFloat:=Query.FieldByName('RESULT').asFloat;
             Query2.ExecSQL();
             Query.Next;
         end;
    ...mais après avoir forcé qq résultats très bas, rien ne se passe, les Flags ne sont pas mis à jour
    En fait on n'entre jamais dans la boucle: while not Query.eof do
    J'ai tenté d'activer Query.first, mais pas mieux
    J'ai aussi tenté d'activer le: Query2.SQL.Prepare; mais Delphi me renvoie: Identificateur non déclaré :'Prepare'
    Je pense qu'on touche au but, mais ce doit être un détail qui m'échappe (comme d'hab
    Si tu vois qq chose de louche dans mon code et pourquoi ou comment activer prepare ce serait super te ta part
    déjàpour ton aide!!!

  11. #11
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Non, ça retourne 10 enregistrements en partant du 6ième (indice à base 0) et pourquoi quotedStr(intToStr(j)), ce sont des entiers
    Peut-être relire Syntaxe de SELECT.
    Ouf, oui, autant pour moi, j'ai inversé
    Merci AndNotOr!!!

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    Flag de QC_Res est en VarChar(5) avec défault NULL
    et le code (corrigé pour le quotedstring) est:
    au temps pour moi , j'avais vérifié le SQL via un GUI mais pas avec Delphi
    quant au prepare , une faute de frappe c'est Query2.Prepare et pas Query2.SQL.Prepare

    ...mais après avoir forcé qq résultats très bas, rien ne se passe, les Flags ne sont pas mis à jour
    En fait on n'entre jamais dans la boucle:
    il faudrait tester le SQL de Query et vérifier que ce dernier renvoie un résultat , ce qui n'est pas le cas à priori

    pour avoir de l'aide plus 'optimale' il aurait fallu nous proposer dès le début une code SQL de création des tables
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE QC_RES (
     .....// indiquer la structure
    );
    CREATE TABLE QC_VAL (
     ..... // indiquer la structure
    );

    et pour faire le test il faudrait un jeu d'essai genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',10);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',9);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',11);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',9);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',11);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',10);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',1);
    INSERT INTO QC_RES (TEST,QC_LOT,RESULT) VALUES ('1','2',2);
     
    INSERT INTO QC_VAL (TEST,QCLOT,MEAN,ETCALC) VALUES ('1','2',10,1);   // valeur Mean et ETCalc au pif


    je n'ai pas le temps aujourd'hui (départ en vacances oblige) de créer ces deux tables et le jeu d'essai pour vérifier via GUI la syntaxe de Query mais logiquement
    la query devrait retourner 2 enregistrements
    En résultat , après le programme , on devrait obtenir 2 enregistrement ceux avec les Resultats 1 et 2 (les derniers) indiquant '-2SD'

    en faisant ce jeu d'essai , je m’aperçois que si QC_RES permet des doublons TEST+QC_LOT+RESULTAT , on peut améliorer query en rajoutant un DISTINCT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Query.SQL.Add('SELECT DISTINCT r.Test, r.QC_Lot,R.result FROM qc_res r');
    ceci étant je ne trouve pas très pro l'approche de QC_RES, je lui aurais bien ajouter un champ auto-incrémenté
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Merci SergioMaster
    Je n'ai pas 'Query2.Prepare;' mais 'Query2.PrepareStatement;'
    ... mais pas mieux

    Pour les doublons, pas de risque, je ne peux reçevoir qu'un test par lot à la fois et ensuite le processus tourne.
    Je compte aussi mettre un flag 'OK' quand auncun -2SD ou -3SD ... n'est ajouté, donc le Flag sera alors <> de '' et ne risque pas d'être traité

    Merci pour tes conseils!
    Et très bonnes vacances!!!

  14. #14
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Prepare est pour le composant TQuery (donc utilisé avec BDE) , s'il existe aussi avec les composants IBExpress,ZEOSDBO et certainement d'autres sets de composants d'accès aux base de données
    c'est PrepareStatement qui est son équivalent avec DBExpress
    Il semblerait que pour AdoQuery , il suffirait de mettre sa propriété prepared à True (n'utilisant ces derniers , je ne peux confirmer) .

    Il est bon de toujours indiquer le composant utilisé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. [SQL] Syntaxe UPDATE + manuel SQL
    Par massif dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/01/2007, 11h28
  2. Erreur syntaxe Update
    Par amel123456789 dans le forum Access
    Réponses: 5
    Dernier message: 18/09/2006, 18h47
  3. Syntaxe Update : erreur
    Par Mariboo dans le forum Access
    Réponses: 6
    Dernier message: 09/06/2006, 19h46
  4. [ORACLE] problème de syntaxe UPDATE
    Par magic charly dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2006, 13h26
  5. syntaxe "UPDATE" (lecture d'une valeur avec jointu
    Par mrblue1978 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/01/2006, 15h38

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