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

Delphi Discussion :

Enregistrer des données dans une table sql, via une application delphi, avec clé auto-incrément


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut Enregistrer des données dans une table sql, via une application delphi, avec clé auto-incrément
    Slt les amis. Je travaille sur un petit projet personnel où j'ai lié mon application delphi à sql server 2008. Cependan, j'ai du mal à enregistrer des données dans sql quand la clé primaire de ma table "Frais" est de type auto-incrément. J'utilise ADOCommande et ADOConnection. Quelqu'un pourrait m'aider?

    Voici un extrait de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    adoc1.CommandText := 'INSERT INTO frais VALUES(:idF, :libF, :tarF, echF)';
    adoc1.Parameters.ParamValues['idF'] := edtCodeF.Text;//identifiant
    adoc1.Parameters.ParamValues['libF'] := edtLibF.Text; //Libellé frais
    adoc1.Parameters.ParamValues['tarF'] := strtoint(edtTarF.Text);//Tarif ou montant à payer
    adoc1.Parameters.ParamValues['echF'] := dtpEchF.Text;//Echéance
    adoc1.Execute;
     
    showmessage('Succès!');

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    si la colonne IDF est la colonne auto-incrémentée alors il ne faut pas la mettre dans le INSERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    adoc1.CommandText := 'INSERT INTO frais VALUES( :libF, :tarF, echF)';
    adoc1.Parameters.ParamValues['libF'] := edtLibF.Text; //Libellé frais
    adoc1.Parameters.ParamValues['tarF'] := strtoint(edtTarF.Text);//Tarif ou montant à payer
    adoc1.Parameters.ParamValues['echF'] := dtpEchF.Text;//Echéance
    adoc1.Execute;
    Si non, car vous n'êtes pas très explicite quant à l'erreur, je trouve étonnant que :
    - l'échéance soit une string et non une date ( le format d'une colonne de type date est souvent spécifique à une SGBD, pour SQL Server YYYY-MM-DD) donc il y a là source d'erreur potentielle
    - Il est étonnant que la colonne TarF puissent être un Tarif ou un Montant (selon votre commentaire), un Tarif je comprend que cela puisse être un code de type entier, peut être en référence à une table Tarif ? auquel cas il faut être sur que ce code existe bien dans la table, mais un montant .. Généralement une colonne montant est de type NUMERIC ou DECIMAL avec 2 chiffres après la virgule sans parler du fait que StrtoInt est également une source d'erreur potentielle

    Donc si vous nous indiquiez quelle erreur est levée par votre code ?

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    ,

    si la colonne IDF est la colonne auto-incrémentée alors il ne faut pas la mettre dans le INSERT
    Mais dans ce cas, il faut lister les colonnes à insérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adoc1.CommandText := 'INSERT INTO frais (LibF, tarF, EchF) VALUES( :libF, :tarF, :echF)'
    NB1 : je suppose que les colonnes ont le nom correspondant à la variable utilisée
    NB2 : pour autant que j'ai bien vu, il manque un : au paramètre echF

    Cordialement

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par acaumes Voir le message
    NB2 : pour autant que j'ai bien vu, il manque un : au paramètre echF
    Bien vu

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @baronmbk : Ce n'est pas le bouton « Créer une entrée Blog  » qu'il faut utiliser, c'est sous le dernier message. Je recopie ici ce que tu as écrit :
    Citation Envoyé par baronmbk
    Merci beaucoup pour votre aide. J'ai revu mon code en enlevant le champ de l'identifiant dans la requête sql et en ajoutant quelques petites corrections.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    adoc1.CommandText := 'INSERT INTO frais(LibelléF, TarifF, EcheanceF) VALUES(:libF, :tarF, echF)';
    adoc1.Parameters.ParamValues['libF'] := edtLibF.Text; //Libellé frais
    adoc1.Parameters.ParamValues['tarF'] := strtofloat(edtTarF.Text);//Tarif ou montant à payer
    adoc1.Parameters.ParamValues['echF'] := dtpEchF.Date;//Echéance
    adoc1.Execute;
     
    showmessage('Succès!');
    Maintenant je reçois l'erreur suivante: "Echec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractère"

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Merci Winjerome pour la régularisation de mon message.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 15h13
  2. Réponses: 3
    Dernier message: 23/01/2012, 14h55
  3. [phpMyAdmin] Insérer des données dans mes tables SQL (phpMyAdmin) ?
    Par bond70 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/10/2009, 23h16
  4. utiliser formulaire pour enregistrer des données dans différentes tables
    Par silue fignigue siaka dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/04/2009, 13h53
  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