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 :

effectuer une requete insert avec 'values' ET 'select'


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut effectuer une requete insert avec 'values' ET 'select'
    bonjour à tous,

    je souhaiterai effectuer une requete d'insertion avec ajout d'éléments directement et à l'aide d'une table.

    il est possible de faire un insert à l'aide d'une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query1.sql.add('INSERT INTO table_client (numero, nom, prenom) SELECT tabl_pers.num, tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
    il est possible de faire un insert avec ajout direct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) VALUES (13, "dupont", "bernard")');
    mais je voudrais concaténer ces deux possibilités. Ainsi, il est également possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT tabl_pers.num, "dupont", tabl_pers.firstname FROM tabl_pers');
    mais le problème se pose pour les entiers. En effet, le code suivant ne fonctionne pas et me génére une erreur 'différence de type dans une expression' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT 13, tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
    ainsi, je peux inserer des données via des enregistrements d'une table et du texte mais je ne peux pas faire la même chose avec des entiers. J'ai essayé de passer via différentes variables mais le problème reste le même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT :varnum, tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
    query1.parambyname['varnum'].asinteger := 13;
     
    ou
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT ' + 13 + ', tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
     
    ou 
     
    var_numero := 13;
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT ' + var_numero + ', tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
    merci par avance pour ceux qui auraient une petite idée de comment rajouter dans un INSERT une variable à affecter de type integer.



    del.

  2. #2
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    -Après un Select on écris les noms des colonnes et pas les valeurs des colonnes ce que tu tente de faire est que tu dis à SQL de choisir une enregistrement qui a comme nom de champs "13" et pas la valeur 13.
    -Un Select n'accepte pas les arguments et c'est logique :varnum tu dis à SQL je te passe le nom du champs comme arguments et ce que tu veux c'est une valeur qui n'existe que tu affecte avec un Select qui est fait pour selectionner des valeur qui existe. et c'est impossible.
    Il est possible dans la plupart des SGBD d'insérer une ligne à partir d'une séléction d'une ligne qui existe et pas à partir d'une ligne qui n'existe pas.[/b]

  3. #3
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT 13, tabl_pers.name, tabl_pers.firstname FROM tabl_pers');

    j'ai fais le test sur Oracle et ca marche très bien !
    Une idée comme ça, as tu essayé avec le cast de trouver le bon type ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    cette requête SQL est également supportée sous DB2... Tu utilises quoi comme SGBD?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut
    merci à tous pour votre aide.

    Comme le suggere Iper, il faut effectivement effectuer un cast pour que l'entier soit pris en compte.

    ainsi le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var_numero := 13;
    query1.sql.add('INSERT INTO table_client(numero, nom, prenom) SELECT CAST(' + var_numero + ' AS INTEGER), tabl_pers.name, tabl_pers.firstname FROM tabl_pers');
    merci encore

    del.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur 3201 sur une requete INSERT avec recordset
    Par forzaxelah dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/01/2012, 08h01
  2. Requête INSERT avec VALUES et SELECT
    Par FredLo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/02/2010, 14h16
  3. [RegEx] Ecrire une requete INSERT avec des variables $_POST
    Par arnaudperfect dans le forum Langage
    Réponses: 10
    Dernier message: 13/06/2007, 15h12
  4. [ Requete ] effectuer une requete avec la valeur d'un combo box
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 28/06/2006, 15h36
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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