Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Je suis entrain de faire une recherche multicritères et pour cela, j'utilise un variable de type string pour fabriquer ma requête SQL à partir du code. Donc ma requête n'est pas statique; elle varie en fonction des critères choisis. Après avoir retourné la variable string, je l'utilise comme suis:
string sql // //Je fabrique mon sql dynamique dans le code (delete from etchr where ........) // //A la fin je veux éxécuter mon sql dynamique EXECUTE IMMEDIATE :sql using sqlca; if sqlca.sqlcode = 0 then messagebox("DELETE","Successful") return elseif sqlca.sqlcode = -1 messagebox("DELETE","Not Successful"+upper(sqlca.Errtext)) //c'est un code qui vient de mémoire end if
le message d'erreur qui apparaît dans la boite de dialogue: LES VARIABLES NE SONT PAS LIEES
Est ce que quelqu'un peut m'expliquer ce message car j'ai déjà tout essayé.
Une petite précision: Lorsque je fais EXECUTE IMMEDIATE en passant une requête statique du genre
EXECUTE IMMEDIATE " delete from etchr where etchr.ncp = :numcpt " using sqlca; ça marche mais lorsque je récupère ma chaîne dynamiquement et je l'utilise ça ne marche plus et ça m'affiche le message ci-dessus
Message de modération
Hors ligne
Bonjour patricktobou,
Afin de résoudre ton problème, merci de nous préciser les informations suivantes:
- Version PB
- SGBD et sa version
- Connexion via ODBC, OLE-DB, native...
Il serait bon également de vérifier dans le débugger PB la syntaxe de ta chaîne SQL constituée dynamiquement.
Il doit probablement y avoir une erreur de formattage.
Hors ligne
Bonjour,
Tu ne peux pas passer de variables dans une requête EXECUTE IMMEDIATE comme tu le fais en EMBEDDED SQL.
Si ta requête à la forme suivante en EMBEDDED SQL :
delete from etchr where etchr.ncp = :numcpt " using sqlca;
En EXECUTE IMMEDIATE cela devient :
Integer li_numcpt String ls_sql ls_sql = "delete from where etchr.ncp = " + String(li_numcpt) EXECUTE IMMEDIATE :ls_sql USING SQLCA;
Hors ligne
Je travaille avec PowerBuilder 11, j'utilise une base de données oracle 10g et je suis sous environnement XP.
Merci pour la remarque
Hors ligne
Utilise un datastore, compose ta requete et passe lui ta requete
Hors ligne