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 :

Mise à jour UPDATE


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut Mise à jour UPDATE
    Bonjour,

    J'utilise une base access.
    Sur ma form, j'ai un DBGrid avec deux colonnes : nom et prenom

    Dans le 1° ADOQuery, je vais chercher dans ma base la date de naissance afin de calculer l'age.

    Dans le 2° ADOQuery, je fais la mise à jour de ma base (dans le champs age) avec l'age ainsi calculé.
    Message d'erreur : le parametre AgeAdherent n'a pas de valeur par défaut. Je ne comprend pas car l'age se calcule bien.

    Merci
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    var Jour, JourN, Mois, MoisN, Annee, AnneeN: Word;
        AgeAdherent:integer ;
    begin
        {Calcul de l'âge}
        With DM.ADOQuery1 do
          begin
              SQL.Clear;
              SQL.Add('SELECT Nom, Prenom, DateNaissance FROM Adherent');
              SQL.Add('WHERE Nom='+quotedstr(DBgrid1.Fields[0].AsString)+' AND Prenom='+quotedstr(DBgrid1.Fields[1].AsString)+'');
              open;
     
              {Calcul de l'âge}
              DecodeDate(StrToDate(Fields[2].asstring), AnneeN, MoisN, JourN);
              DecodeDate(Date, Annee, Mois, Jour);
     
              if (AnneeN=Annee) and (MoisN=Mois) and (JourN=Jour) then AgeAdherent:=0 // Jour actuel = Date de Naissance
                else
              begin
                  AgeAdherent:=Annee-AnneeN; // Calcul de l'âge
                  if (MoisN>Mois) then Dec(AgeAdherent)
                    else
                  if (MoisN=Mois) AND (JourN>Jour) then Dec(AgeAdherent);
              end;
     
              close;
          end;
     
          {Mise à jour de l'âge dans la base de données}
          With DM.ADOQuery1 do
            begin
                SQL.Clear;
                SQL.Add('UPDATE Adherent SET Age=AgeAdherent');
                SQL.Add('WHERE Nom='+quotedstr(DBgrid1.Fields[0].AsString)+' AND Prenom='+quotedstr(DBgrid1.Fields[1].AsString)+'');
                execsql;
                close;
            end;

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add('UPDATE Adherent SET Age='+IntToStr(AgeAdherent));
    Me parait plus adapté
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Quel ane, j'y avais pensé.
    Je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Add('UPDATE Adherent SET Age='+IntToStr(AgeAdherent)+'');
    merci

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    @yannba

    Il me parait opportun que tu utilise les parameters qui t'éviterons tous les problemes de format de champs (sinon @Sergio va pas être content ), illustration :

    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
    
        With DM.ADOQuery1 do
          begin
              SQL.Clear;
              SQL.Add('SELECT Nom, Prenom, DateNaissance FROM Adherent ');
              SQL.Add('WHERE Nom= :pNom AND Prenom= :pPrenom ');
        Parameters.ParamByName('pNom').Value := DBgrid1.Fields[0].AsString;  <=== ICI
        Parameters.ParamByName('pPrenom').Value := DBgrid1.Fields[1].AsString;  <=== ICI
              open;
    // ...
              close;
          end;
    
          {Mise à jour de l'âge dans la base de données}
          With DM.ADOQuery1 do
            begin
                SQL.Clear;
                SQL.Add('UPDATE Adherent SET Age= :pAgeAdherent ');
                SQL.Add('WHERE Nom= :pNom AND Prenom= :pPrenom ');
        Parameters.ParamByName('pNom').Value := DBgrid1.Fields[0].AsString;  <=== ICI
        Parameters.ParamByName('pPrenom').Value := DBgrid1.Fields[1].AsString;  <=== ICI
        Parameters.ParamByName('pAgeAdherent').Value := IntToStr(AgeAdherent); <=== ICI
                execsql;
                close;
            end;

    Les parameters sont à laisser entre toutes les mains...

    Il faudrait également ajouter des bloc Try finally avant ton Open; et ExcelSQL; c'est important.



  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    @BuzzLeclaire

    Il me parait opertun que tu utilise les parameters qui t'éviterons tous les problemes de format de champs
    Effectivement, n'étant qu'un programmateur occasionnel et n'ayant suivi aucune formation autre qu'en consultant le forum, j'ai vu qu'on pouvait aussi utilisé les parameters.

    (sinon @Sergio va pas être content ),
    N'ayant jamais compris la différence entre les deux (ajouter des lignes pour obtenir le meme resulat) et voulant faire aussi plaisir à Sergio , je modifie immédiatement mon programme. Il faut que je prenne les bonnes habitudes.

    Il faudrait également ajouter des bloc Try finally avant ton Open; et ExcelSQL; c'est important.
    Je l'ai volontairement enlevé du message pour ne pas le surcharger.

    Merci

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

Discussions similaires

  1. I.E Mozilla mise à jour Update
    Par jlbern dans le forum Windows 7
    Réponses: 2
    Dernier message: 13/10/2012, 19h12
  2. Réponses: 1
    Dernier message: 20/08/2009, 11h32
  3. Problème de mise à jour (UPDATE)
    Par rvaouate dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/10/2008, 12h10
  4. [Conception] erreur de mise à jour UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/06/2006, 12h56
  5. [MySQL] Les champs sont vides lors d'une mise à jour (update)
    Par gregos13 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/04/2006, 08h01

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