Syntaxe du insert avec des combo

cs_Mawie Messages postés 8 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 juin 2006 - 30 mars 2004 à 17:42
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009 - 31 mars 2004 à 15:05
Salut à tous,

j'ai bien pris le temps de lire presque tous les sujets du forum ki s'approchaient plus ou moins de ce ke je cherchait mais en vain.

Voila mon probleme:

Je suis en delphi 5 avec une BDD oracle.
Je souhaite inserer dans ma table le contenu d'une combo.

voila ma requete:

Query.Close;
Query.SQL.Clear;
Query.SQL.Add( 'INSERT INTO TEMPS.TPS(TEMPS.TPS_MAT, TEMPS.TPS_DATE, TEMPS.TPS_DOSSIER, TEMPS.TPS_DESC, TEMPS.TPS_CLI) VALUES(3, :DateTps, :Dossier, :Comment, :Client)');
Query.ParamByName('DateTps').AsString:=dbedtDate.Text;
Query.ParamByName('Dossier').AsString:=dbcboDossier.Text;
Query.ParamByName('Comment').AsString:=dbmemComment.Text;
Query.ParamByName('Client').AsString:=dbcboClient.Text;
Query.ExecSQL;


le truc c ke je ne suis pas tres sure des : avant les DateTps, Dossier, ...

à l'execution, j'ai un msg d'erreur:
"Le projet Temps.exe a provoque une classe d'exception Exception avec le message 'Parameter DateTeps not found".

De plus, lorsque j'essaie d'ecrire qqch ds ma combo, plantage avec:
"ORA-00900: Instruction SQL non valide".

merci par avance de votre aide :kisses)

7 réponses

cs_Mawie Messages postés 8 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 juin 2006
30 mars 2004 à 18:03
euh je me suis plantée dans le 1° message d'erreur.

a l'execution de ma requete, le message est:

"Le projet Temps.exe a provoque une classe d'exception EOraError avec le message 'ORA601745:nom de variable de lien/d'accueil non valide. Processus stoppé..."

voila desolee pour l'erreur. :shy)

a bientot j'espere, c assez urgent qd meme :kisses)
0
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009
30 mars 2004 à 19:34
Salut,

et voici..

au lieu d'utiliser des params, tu peux tapper directement ta valeur dans la requête....

par exemple:

//pareil ton exemple...
Query.Close;
Query.SQL.Clear;
Query.Add( 'INSERT INTO TEMPS.TPS(TEMPS.TPS_MAT, TEMPS.TPS_DATE, TEMPS.TPS_DOSSIER, TEMPS.TPS_DESC, TEMPS.TPS_CLI)');
Query.Add(' VALUES (');

//ajouter ici les valeurs dans le chaine de caractères
Query.Add(' 3,');
Query.Add('''' + dbedtDate.Text + ''',' );
Query.Add('''' + dbcboDossier.Text + ''',' );
etc...
Query.Add(' ) ');
Query.ExecSQL;

Ou sinon, si tu veux utiliser des paramètres, tu fais comme tu faisais, mais tu dois créer tes paramètres (TParams) au runtime avant de les affectés... un peu plus complexe et moins clair...

By the way, la solution 1 devriat régler ton problème, si j'ai bien saisi ton prob.
_______
Bonus
0
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009
30 mars 2004 à 19:37
J'oubliais,
la raison des '''' dans Query.Add('''' ...

c'est lorsque tu insères un champs qui est une chaine de caractère, tu dois formatter ta string pour qu'elle insère une chaine
comme en Sql normal Insert into ... values ('Allo','salut',4)
Allo est entre apostrophe... et si c'est un chiffre, tu ne fais que mettre ton texte sans apostrophe...

_______
Bonus
0
cs_Mawie Messages postés 8 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 juin 2006
31 mars 2004 à 10:36
euh maintenant il me met une erreur:
'ORA-01722: Nombre non valide'.

je vois pas du tout pkoi il met ça. J'ai fait un ptit changement:

Query.SQL.Add('INSERT INTO TEMPS.TPS(TPS_MAT, TPS_DATE, TPS_SOC, TPS_DOSSIER, TPS_DESC, TPS_CLI)');
Query.SQL.Add('VALUES(');
Query.SQL.Add('''' + frmLogin.dbedtLogin.Text +''',');
Query.SQL.Add('''' + dbedtDate.Text +''',');
Query.SQL.Add('''' + frmLogin.dbedtSoc.Text +''',');
Query.SQL.Add('''' + dbcboDossier.Text +''',');
Query.SQL.Add('''' + dbmemComment.Text +''',');
Query.SQL.Add('''' + dbcboClient.Text +'''');
Query.SQL.Add(')');
Query.ExecSQL;


ds mes tables les champs correspondants sont au format:
dbedtLogin.Text --> varchar2(6)
dbedtDate.Text -->varchar2(10)
frmLogin.dbedtSoc.Text -->varchar2(10)
dbcboDossier.Text -->varchar2(20)
dbmemComment.Text -->varchar2(200)
dbcboClient.Text -->varchar2(15)

je ne comprends pas d'où vient l'erreur.
merci d'avance
MaWiE :kisses)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009
31 mars 2004 à 15:04
Salut,

je vais t'avouer ne pas vraiment connaitre le Sql de Oracle et ces subitilités, donc en ce qui concerne l'erreur :'ORA-01722: Nombre non valide', je ne peux plus ou moins t'aider.

Seulement un conseil, si tu veux bien et facilement te déboguer, essai de faire un insertion manuelle dans ta bd, la même requête mais exécuté au lieu par un programme delphi par un exécuteur de script sql. Si sa plante, le problème est au niveau de la syntaxe. Sinon, essai d'insérer un champs à la fois, insérer que le premier champs. Si sa passe, inséere en un deuxieme, etc...

Puis fais un Prepare, peut-être que tu dois en faire un. Query.Prepare. Une autre chose, ton query est créer au runtime ou design time? Au design time, si tu remplis la composante à bras, cela fonctionne t-il? Sa Databaname est bien configurer, et ouverte, active?

à ce niveau là, je ne peux pas vraiment plus t'aider, la balle est dans ton camps...

_______
Bonus
0
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009
31 mars 2004 à 15:05
Salut,

je vais t'avouer ne pas vraiment connaitre le Sql de Oracle et ces subitilités, donc en ce qui concerne l'erreur :'ORA-01722: Nombre non valide', je ne peux plus ou moins t'aider.

Seulement un conseil, si tu veux bien et facilement te déboguer, essai de faire un insertion manuelle dans ta bd, la même requête mais exécuté au lieu par un programme delphi par un exécuteur de script sql. Si sa plante, le problème est au niveau de la syntaxe. Sinon, essai d'insérer un champs à la fois, insérer que le premier champs. Si sa passe, inséere en un deuxieme, etc...

Puis fais un Prepare, peut-être que tu dois en faire un. Query.Prepare. Une autre chose, ton query est créer au runtime ou design time? Au design time, si tu remplis la composante à bras, cela fonctionne t-il? Sa Databaname est bien configurer, et ouverte, active?

à ce niveau là, je ne peux pas vraiment plus t'aider, la balle est dans ton camps...

_______
Bonus
0
cbonus2000 Messages postés 32 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 2 décembre 2009
31 mars 2004 à 15:05
Salut,

je vais t'avouer ne pas vraiment connaitre le Sql de Oracle et ces subitilités, donc en ce qui concerne l'erreur :'ORA-01722: Nombre non valide', je ne peux plus ou moins t'aider.

Seulement un conseil, si tu veux bien et facilement te déboguer, essai de faire un insertion manuelle dans ta bd, la même requête mais exécuté au lieu par un programme delphi par un exécuteur de script sql. Si sa plante, le problème est au niveau de la syntaxe. Sinon, essai d'insérer un champs à la fois, insérer que le premier champs. Si sa passe, inséere en un deuxieme, etc...

Puis fais un Prepare, peut-être que tu dois en faire un. Query.Prepare. Une autre chose, ton query est créer au runtime ou design time? Au design time, si tu remplis la composante à bras, cela fonctionne t-il? Sa Databaname est bien configurer, et ouverte, active?

à ce niveau là, je ne peux pas vraiment plus t'aider, la balle est dans ton camps...

_______
Bonus
0
Rejoignez-nous