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 :

pboblème de mis à jour dans une table


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut pboblème de mis à jour dans une table
    bonjour,
    je suis nouveau en programation et delphi

    j'ai un bouton qui permet de mettre à jour la table 'lieu2' à partir de la table 'lieu1'
    Les tables 'lieu2'et 'lieu1' sont les mêmes( même champs, même enrégistrement ....)
    une partie de ce programme est:


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    qrlieu1.Open;
    while not (qrlieu1.eof) do
    begin
    qrInsertlieu2.ParamByName('li_id').AsInteger := qrlieu1.fieldbyname('li_id').AsInteger;
    qrInsertlieu2.ParamByName('vi_id').AsInteger := qrlieu1.fieldbyname('vi_id').AsInteger;
    qrInsertlieu2.ParamByName('li_adr1').Asstring := qrlieu1.fieldbyname('li_adr1').Asstring;
    qrInsertlieu2.ExecSQL;
    qrcommit.ExecSQL;
    qrlieu1.Next;
    end;
    end;

    Explication : qrlieu1 est un Query: ( select * from lieu1)

    qrInsertlieu2 est le bouton dont le query est :

    insert into lieu2 (li_id,vi_id,li_adr1)
    values(:li_id, :vi_id, :li_adr1).

    Ce programme marche bien seulement si la table lieu2 est vide.
    Si la table Lieu2 contient déjà des enregistrements , le programme plante: " violation de clé primaire"

    Donc je cherche à mettre un test dans ce programme: Il y aura insertion seulement des
    nouveaux enrégistrements ou modification des enrégistrements dans la table Lieu1.

    Comment faire ????

    Merci pour votre aide .

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Salut,

    Soit tu test si l'enregistrement existe avant l'insertion.
    Soit tu englobe ton insertion dans une exception mais c'est moins propre.
    @++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par yoyo44
    Salut,

    Soit tu test si l'enregistrement existe avant l'insertion.
    Soit tu englobe ton insertion dans une exception mais c'est moins propre.
    @++
    Comment faire ce test et c'est quoi une exception ?
    pourriez vous être plus explicite ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Soit tu test si l'enregistrement existe avant 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      qrlieu1.Open; 
     
      with TQuery.Create(nil) do
      begin
        DatabaseName := Ton DataBaseName;
        SQL.Text := 'select li_id from lieu2 ' +
                           'where li_id = :li_id ';
        while not (qrlieu1.eof) do 
        begin  
          // Verif si clé existe déjà
          Close;
          ParamByName('li_id').AsInteger := qrlieu1.fieldbyname('li_id').AsInteger; 
          Open;
          if IsEmpty then
          begin 
            qrInsertlieu2.ParamByName('li_id').AsInteger := qrlieu1.fieldbyname('li_id').AsInteger; 
            qrInsertlieu2.ParamByName('vi_id').AsInteger := qrlieu1.fieldbyname('vi_id').AsInteger; 
            qrInsertlieu2.ParamByName('li_adr1').Asstring := qrlieu1.fieldbyname('li_adr1').Asstring; 
            qrInsertlieu2.ExecSQL; 
            qrcommit.ExecSQL; 
          end;
          qrlieu1.Next; 
        end; 
    end;
    Soit tu englobe ton insertion dans une exception mais c'est moins propre

    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 
    qrlieu1.Open; 
    while not (qrlieu1.eof) do 
    begin 
      try
        qrInsertlieu2.ParamByName('li_id').AsInteger := qrlieu1.fieldbyname('li_id').AsInteger;  
        qrInsertlieu2.ParamByName('vi_id').AsInteger := qrlieu1.fieldbyname('vi_id').AsInteger; 
        qrInsertlieu2.ParamByName('li_adr1').Asstring := qrlieu1.fieldbyname('li_adr1').Asstring; 
        qrInsertlieu2.ExecSQL; 
        qrcommit.ExecSQL; 
      finally
        qrlieu1.Next; 
      end;
    end; 
    end;

  5. #5
    Membre confirmé Avatar de JustMe
    Inscrit en
    juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 479
    Points : 583
    Points
    583
    Par défaut
    Je ne sais pas si ton SGBD te le permet mais si tu essais de faire tous ça avec une requete du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Table2(Champs1,Champ2) (SELECT Champs1,Champs2 FROM Table1 where Table1.Champs1 <> Table2.Champs1
    )
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

Discussions similaires

  1. mis à jour d'une table impossible
    Par artotal dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/01/2008, 10h26
  2. probleme de mise a jour dans une table
    Par k_boy dans le forum MFC
    Réponses: 1
    Dernier message: 16/11/2007, 10h25
  3. Réponses: 2
    Dernier message: 14/05/2007, 11h45
  4. Mise à jour dans une table
    Par manucha dans le forum Oracle
    Réponses: 4
    Dernier message: 01/03/2007, 12h11
  5. Réponses: 10
    Dernier message: 07/03/2006, 14h30

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