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 :

Insérer un enregistrement dans une table en utilisant une requête SQL


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Insérer un enregistrement dans une table en utilisant une requête SQL
    Bonjour;
    Je voudrais faire des opération d'ajout,modification, suppression et recherche sur une base de données mais en utilisant des requetes SQL
    pour l'insertion la syntaxe est
    insert into table(champ1,champ2,...) VALUES(v1,v2,...)
    Ce que je veux c'est de ne pas préciser les valeurs à saisir de manière à permettre à l'utilisateur de saisir ce qui est afficher dans les edits ou les dbedits.
    J'espère que je me suis bien expliqué
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Utilise une requête paramétrée:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table(champ1,champ2,...) VALUES(:v1,:v2,...)

    Reste à renseigner la valeur des paramètres avec les Edit, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query1.ParamByName('v1').Value := Edit1.Text;
    Query1.ParamByName('v2').Value := QuotedStr(Edit2.Text);
    // etc...
    Query1.ExecSQL;
    @+ Claudius

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci de votre réponse, mais il y a toujours un problème
    c'est au niveau du parammetrage des valeurs de V1 et V1
    dans la proprieté Params/datatype,paramtype des valurs v1 et v2 en essayant d'activer le query im y a message d'erreur 'expression d'expression.
    dans ma table j'ai mis le code(numerique) et le nom(alphanum) et dans les proprieté de param

    pour le code datatype:integer et paramtype:input
    et le nom et les autres champs alphanum datatype:string et paramatype:input et donc je n'arrive pas à activer le query
    Merci de votre réponse

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Un query avec un ordre Insert ne s'active pas il s'exécute.

    Quel est ton message d'erreur ?
    Quelle base utilises-tu ?
    Quel moyen d'accès ou de connexion utilises-tu (BDE, ADO,...) ?

    Quels objets utilises-tu ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci de m'avoir répondu
    J'utilise le BDE, voilà d'habitude pour ajouter, modifier oui supprimer un enregistrement d'une table, j'utilisais
    Table1.insert(insertion)
    Table1.delete(suppression)
    Table1.edit(modification)
    Mais cette fois j'ai un TP dans lequel je dois faire les opérations citées dessus avec des requêtes SQL pour maîtriser le langage SQL.
    Donc j'ai suivi les conseils de Claoudius, j'ai utilisé un query en utilisant la syntaxe dans le string


    INSERT INTO TABLE(champ1,champ2,...) VALUES(:v1,:v2,...)
    mais j'ai eu un message d'erreur en essayant d'activer le query (erreur d'expression
    J'ai paramartré les valeurs de V1(code qui est numerique= et v2(champ alphanum) comme suit
    pour le code datatype:integer et paramtype:input
    et le nom et les autres champs alphanum datatype:string et paramatype:input
    et c'est là le problème, le query ne s'active pas
    J'espère que tu as compris et ne me mets des trous dans ma tête avec ta mitrailleuse
    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    puisque v1 est de type numérique alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var x : integer;
    .....
    try x:=strtoInt(edit1.text); except x:=0; end; // j'aime bien savoir que c'est bien une valeur numérique d'où ma gestion de l'exception
    Query1.ParamByName('v1').Value := x;
    ....
    Query1.ExecSQL;
    comme le dit Youki la query s'éxecute elle ne "s'active" pas
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci Sergio
    Si j'ai bien compris je dois ignorer la proprieté params (datatype et paramtype) des valeurs v1 et v2 et donc je ne chercherai pas à activer le query.
    Vous savez, avant j'utilisais les requêtes SQL pour des filtres ou edition (select.....), mais c'est la première fois ou je dois utiliser SQL pour des opération d'insertions, suppression et modification
    Merci à tous le monde et je compte sur vous pour m'aider

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par afatdz Voir le message
    Si j'ai bien compris je dois ignorer la proprieté params
    Non c'est l'inverse , tu dois faire attention au type de données
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour;
    Merci à tous ce qui qui m'ont repondu
    Voilà selon les conseils precieux des membres du forum j'ai tenté de deux manières à la réalisation de mon programme, la 1ère s'est executé :
    1- En introduisant le code SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into etudient (code,nom) values (:v1,:v2)
    Et dans la proprieté onclick du bouton pour executer l'insertion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with query1 do
    begin
    close;
    query1.ParamByName('v1').value:=strtofloat(edit1.text);
    query1.ParamByName('v2').value:=edit2.text;
    try
    query1.ExecSQL;
    except
    showmessage('erreur');
    end;
     end;
     end;
     end.
    Mais avec la 2ème méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with query1 do
    begin
    close;
    query1.sql.clear;
    query1. sql.add('insert into etudient(code,nom)values(+ strtofloat edit1.text)  , ''' + edit2.text+ ''' )');
    try
    ExecSQL;
    except
    showmessage('erreur');
    la complilation ne signale aucun proplème mais à l'execution un message d'erreur " utilisation incorrecte du mot clé" et le curseur et positionné à la ligne query1.ExecSQL

    Il est vrai que le prg s'est executé avec la 1ère méthode, mais je voudrais bine savoir pour ça n'a pas marché avec la 2ème
    Merci à tous

  10. #10
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with query1 do
      begin
        close;
        query1.sql.clear;
        query1. sql.add('insert into etudient(code,nom) values(' + edit1.text + ',' + quotedstr(edit2.text) + ' )');
        try
          ExecSQL;
        except
          on e:exception do
          showmessage('erreur sur ' + slinebreak + query1. Text + slinebreak + e.message);
        end;
       end;
    end;
    Affiche ton text sql sur l'erreur tu comprendras mieux celle-ci.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci Yurck et tous ce qui m'ont aidé, maintenant, je vais que continuer avec la modiciation et la suppression et je compte sur vous pour m'aider
    Merci encore une fois

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Mon programmed s'est executé grace à vous
    Merci bien

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 15h13
  2. Réponses: 2
    Dernier message: 16/01/2010, 16h24
  3. [MySQL] insérer des enregistrements dans des tables
    Par zezee dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/11/2009, 12h22
  4. comment remplir une table en utilisant une boucle
    Par nice dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 07/02/2008, 10h52
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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