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 :

Insertion dans une table


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Par défaut Insertion dans une table
    Bonjour,
    J'ai un problème d'insertion avec ma base de données.
    Sur la fiche
    Paiement
    , j'ai les champs suivants:
    Editnumpaie,Editrefsinistre,Editdatepaie,Editmontant,Editnumpiece et Editlibelle.
    Et derrière le bouton
    valider
    j'ai écrit les codes suivants qui me permettent d'inserer dans la table
    Paiement
    les elements ci_dessus,voici le code:
    base.tpaiement.FieldByName('Num_paiement').Value:=strtoint(Editnumpaie.Text);
    base.tpaiement.FieldByName('Ref_Sinistre').Value:=Editrefsinistre.Text;
    base.tpaiement.FieldByName('Date_Paye').Value:=strtoDateTime(Editdatepaie.Text);
    base.tpaiement.FieldByName('Montant').Value:=strtoint(EditMontant.Text);
    base.tpaiement.FieldByName('Numero_Pièce').Value:=Editnumpiece.Text;
    base.tpaiement.FieldByName('Libelle').Value:=Editlibelle.Text;
    base.tpaiement.Append;
    .
    Mais quand j'exécute voici le message qu'il me donne:Violation de clé.
    Un index ou une clé principale ne peut pas contenir une valeur null.
    Etant donné que
    'Num_paiement'
    est la clé principale et l'insert après la dernière valeur de
    Num_Paiement
    sans confusion de valeur.
    Mais si je met un
    DBEdit
    au niveau de
    'Num_paiement'
    les Edits chez les autres ils ne s'affiche pas sur la même ligne que
    'Num_paiement'
    et j'aimerais les faire tous comme des
    Edits
    .
    Qui a une idée pour me donner?
    Je suis vraiment dans cette difficulté, aidez moi pour me permetre de passer à cette étape.
    Merci par avance.
    Par Zizou7.

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Salut;

    l'erreur est claire tu as une clé en double. pour contourner le problème faut travailler avec BeforeInsert ou OnNewRecord, c'est ici que ton Num_Paiement doit recevoir sa valeur.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 129
    Par défaut Insertion dans une table
    Meerci pour votre reponse.
    Pouvez-Vous me donner un exemple d'utilisation de
    OnNewRecord?
    Par Zizou7

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Re;

    onNewRecord est une méthode. son utilisation est assez facile, genre :

    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
    17
    18
     
    var
      Num_P : Integer;// en supposant que le type est integer sinon à toi de le changer
    ....
    Table1BeforePost(Sender : TObject);
    begin
      Num_Paiement := Num_P;
    end;
     
    Table1NewRecord(Sender : TObject)
    begin
      // se positionner le le dernier enregistrement
      Table1.Last;
      // on récupère la dernière clé
      Num_P := Table1.FieldByName('Num_Paiement').Value;
      // on l'incrémente
      inc(Num_P);
    end;
    attention le code n'est pas testé mais l'idée c'est ça. on résumé, on récupère la dernière clé sur un nouvelle enregistrement (OnNewRecord) puis avant validation des données on affecte la valeur de la clé.

  5. #5
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Just Soft, ton système risque de créer des erreurs en mode multi-utilisateurs.
    Zizou, est ce que tu peux en dire plus sur la base de donnée et le composant d'accès utilisés.
    Sinon, j'ai remarque une petite erreur dans ton code. Généralement, on fait Append avant les affectations et Post pour valider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    WIth base.tpaiement do
    try
        Append;
        FieldByName('Num_paiement').Value:=strtoint(Editnumpaie.Text);
        FieldByName('Ref_Sinistre').Value:=Editrefsinistre.Text;
        FieldByName('Date_Paye').Value:=strtoDateTime(Editdatepaie.Text);
        FieldByName('Montant').Value:=strtoint(EditMontant.Text);
        FieldByName('Numero_Pièce').Value:=Editnumpiece.Text;
        FieldByName('Libelle').Value:=Editlibelle.Text;
        Post;
    except
        //Ici traitement des erreurs.
    end;
    A+

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    @ Andry bien vu pour Append et Post.
    Absolument le code que j'ai proposé fonctionne en mode mono-poste.

Discussions similaires

  1. [ZEOSLIB] Problème Insertion dans une table
    Par moscovisci dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/06/2005, 12h05
  2. [interbase6]probleme d'insertion dans une table
    Par macadam314 dans le forum Bases de données
    Réponses: 10
    Dernier message: 22/02/2005, 14h21
  3. [Sybase] Temps d'une insertion dans une table
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 14/02/2005, 10h04
  4. Extraction d'un .txt et Insertion dans une table
    Par PoPmiSiR dans le forum Access
    Réponses: 8
    Dernier message: 28/10/2004, 19h13
  5. Détection insertion dans une Table
    Par abelman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/07/2004, 14h24

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