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
+'WHERE '+(Query.FieldByName('Result').AsString)
il manque le nom du champ
mais surtout voici quelques points qui me choquent :
1- 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)
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
Partager