Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Langage
Langage Tout ce qui concerne le langage (POO, syntaxe, message d'erreur...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/12/2012, 01h04   #1
youce90
Invité de passage
 
Homme
Développeur informatique
Inscription : août 2012
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2012
Messages : 22
Points : 4
Points : 4
Par défaut Problème avec une requête paramétrée

Bonsoir !
j'aimerai insérer des lignes à partir de mon application Delphi,
Mais comme les valeurs sont des chaines de caractères, il doivent être délimitées par des cotes
et aussi les noms des paramètres doivent etre précédés par ':'.
J'ai essayé le suivant:
Code :
1
2
3
4
5
6
7
8
9
.
.
.
with query1 do
  begin
  sql.clear;
  sql.Add('Insert into Matable values('+quotedstr(':nom')+')');
  parameters.parambyname('nom').value:=edit1.text;
  end;

Je pense que le problème avec mon code c'est qu'il rajoute les cotes avant de charger les paramètres,
et je n'arrive pas à inverser les choses.
youce90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 07h24   #2
seabs
Membre chevronné
 
Inscription : janvier 2009
Messages : 401
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 401
Points : 645
Points : 645
Bonjour,

Une requête d'insertion s'écrit ainsi

Code :
1
2
INSERT INTO MaTable(Col_1, Col_2, Col_3) 
VALUES(:pCol_1, :pCol_2, :pCol_3)
En partant de ce principe, ton code devrait être
Code :
1
2
3
4
5
6
7
8
with query1 do
  begin
  sql.clear;
  sql.Text := 'INSERT INTO MaTable(Col_1, Col_2, Col_3) VALUES(:pCol_1, :pCol_2, :pCol_3)';
  parameters.parambyname('pCol_1').value:=edit1.text;
  parameters.parambyname('pCol_2').value:=edit2.text;   
  parameters.parambyname('pCol_3').value:=edit3.text;
end;
Je pense que tu peux supprimer sql.clear. A vérifier.

Ainsi, tu n'es plus ennuyé par les délimiteurs

A+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 10h24   #3
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 270
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 270
Points : 7 530
Points : 7 530
Citation:
Envoyé par seabs Voir le message
Je pense que tu peux supprimer sql.clear. A vérifier.
exact à partir du moment où tu utilises SQL.text:= ....
car SQL.Text:= "réinitialise" la propriété SQL
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2013, 13h46   #4
e-ric
Membre émérite
 
Avatar de e-ric
 
Homme Eric BARBIER
Développeur informatique
Inscription : mars 2002
Messages : 636
Détails du profil
Informations personnelles :
Nom : Homme Eric BARBIER
Âge : 44
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2002
Messages : 636
Points : 956
Points : 956
Je comprend mal ton besoin, pourquoi ne pas écrire directement :

Code :
1
2
3
4
5
6
7
 
with query1 do
  begin
  sql.clear;
  sql.Add('Insert into Matable values(:nom)');
  parameters.parambyname('nom').value:=edit1.text;
  end;
Il s'agit d'un paramètre pas d'une valeur littérale (une constante si tu préfères), dans ce dernier cas, tu aurais eu besoin de "quoter" ta valeur (qui n'est alors plus un paramètre).

Pour seabs, si tu affectes directement la propriété SQL.Text, effectivement, le SQL.Clear est superflu.

Cdlt
__________________

M E N S.A G I T A T.M O L L E M
e-ric est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h22.


 
 
 
 
Partenaires

Hébergement Web