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 :

Problème mise à jour table sous Acces


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Problème mise à jour table sous Acces
    Bonjour

    Avec le code suivant j'ai un message "objet parameter défini de manière incorrecte"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      qry.close;
      qry.SQL.Clear;
      qry.SQL.Text:=
         'UPDATE BATCH SET BATCH_NB_CONTROL = '+IntToStr(Rec.NbrControls)+','+//Int
         'BATCH_DELTA_E_DE_MAX = '+FloatToStr(Rec.DeMax)+','+//float
         'BATCH_DELTA_E_DE_AVERAGE = '+FloatToStr(Rec.DeAverage)+','+ //Float
         'BATCH_NB_OK = '+IntToStr(Rec.NbrControlOk)+','+// Int
         'BATCH_NB_DELTA_E_OK = '+IntToStr(Rec.NbrDeOk)+','+// Int
         'BATCH_RESULT_OK = '+BoolToStr(Rec.ResultOk)+','+ // bool
         'BATCH_DATETIME_END = '+DateTimeToStr(Now)+','+ // DateTime
         ' WHERE BATCH_NO = '+IntToStr(Rec.BatchNo)+' ;'; // Int
      qry.ExecSQL;
    Nota :
    Le champ "'BATCH_RESULT_OK" est déclaré VARCHAR(32) car BoolToStr fournit '-1' pour true et '0' pour false. Cela marche parfaitement dans les autres tables. De plus j'ai mis la ligne 9 en remarque et cela ne change rien !

    Où est le problème ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Complément et correction d'info
    Voici le code de déclaration des champs de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      ' BATCH_NB_CONTROL INTEGER, ' + // Nombre de pièces contrôlées
      ' BATCH_DELTA_E_DE_MAX SINGLE, ' + // Delta E Maxi contrôlé sur le lot
      ' BATCH_DELTA_E_DE_AVERAGE SINGLE, ' + // Delta E Moyen contrôlé sur le lot
      ' BATCH_NB_OK INTEGER, ' + // Nombre de pièces bonnes
      ' BATCH_RESULT_OK VARCHAR(2), ' + // Batch acceptable
      ' BATCH_DATETIME_END DATETIME, ' + // date de dernière mise à jour
    Correction : le champ ' BATCH_RESULT_OK' est déclaré VARCHAR(2) et non 32 comme indiqué par erreur dans le 1er message
    J'ai choisi cette forme après des problèmes de booléens dans access. A la lecture il suffit de lire le champ en mode asInteger et s'il fournit -1 c'est true le contraire c'est false

  3. #3
    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
    @Salut

    En un mot : parameters

    Si tes champs dans la base son bien typés, il n'y a aucune raison de les passer tous en STR ??

    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 Qry do
    begin
        SQL.Clear;
        SQL.Add('UPDATE BATCH SET BATCH_NB_CONTROL = :xNbrControls , ');
        SQL.Add('BATCH_DELTA_E_DE_MAX = xRecDeMax , ');
        SQL.Add('BATCH_DELTA_E_DE_AVERAGE = xDeAverage , ');
        SQL.Add('BATCH_NB_OK = xNbrControlOk , ');
        SQL.Add('BATCH_NB_DELTA_E_OK = xNbrDeOk , ');
        SQL.Add('BATCH_RESULT_OK = xResultOk , ');
        SQL.Add('BATCH_DATETIME_END = xdatetime ');
        SQL.Add('WHERE BATCH_NO = xBatchNo ');
     
       Parameters.ParameterByName('xNbrControls').Value := Rec.NbrControls;
       Parameters.ParameterByName('xDeMax').Value := Rec.DeMax;
       Parameters.ParameterByName('xDeAverage').Value := RecDeAverage;
       Parameters.ParameterByName('xNbrControlOk').Value := Rec.NbrControlOk;
       Parameters.ParameterByName('xNbrDeOk').Value := Rec.NbrDeOk;
       Parameters.ParameterByName('xResultOk').Value := Rec.ResultOk;
       Parameters.ParameterByName('xdatetime').Value := DaNow;
       Parameters.ParameterByName('xBatchNo').Value := Rec.BatchNo;
      Try  
       ExecSQL;
      finally
        Close;
      end;
    end;

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Je viens d'inclure le source proposé
    Résultat :

    Delphi ne reconnait pas "Parameters.ParameterByName.ParameterByName"

    ParameterByName non déclaré

    Faut-il introduire un uses spécifique et si oui lequel ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Correction ParameterByName remplacé par ParamByName
    Avec le changement en ititullé le code se compile mais à l'exécution une erreur se produit
    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
      With Qry do
      begin
        SQL.Clear;
        SQL.Add('UPDATE BATCH SET BATCH_NB_CONTROL = :xNbrControls , ');
        SQL.Add('BATCH_DELTA_E_DE_MAX = xRecDeMax , ');
        SQL.Add('BATCH_DELTA_E_DE_AVERAGE = xDeAverage , ');
        SQL.Add('BATCH_NB_OK = xNbrControlOk , ');
        SQL.Add('BATCH_NB_DELTA_E_OK = xNbrDeOk , ');
        SQL.Add('BATCH_RESULT_OK = xResultOk , ');
        SQL.Add('BATCH_DATETIME_END = xdatetime ');
        SQL.Add('WHERE BATCH_NO = xBatchNo ');
     
        Parameters.ParamByName('xNbrControls').Value := Rec.NbrControls;
        Parameters.ParamByName('xRecDeMax').Value := Rec.DeMax;
        Parameters.ParamByName('xDeAverage').Value := Rec.DeAverage;
        Parameters.ParamByName('xNbrControlOk').Value := Rec.NbrControlOk;
        Parameters.ParamByName('xNbrDeOk').Value := Rec.NbrDeOk;
        Parameters.ParamByName('xResultOk').Value := Rec.ResultOk;
        Parameters.ParamByName('xdatetime').Value := Now;
        Parameters.ParamByName('xBatchNo').Value := Rec.BatchNo;
      Try
       ExecSQL;
      finally
        Close;
      end;
    Curieusement la ligne 13 passe mais pas la ligne 14 message :
    Qryarametres 'xRecDeMax' non trouvés

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    bonjour,

    @Buzz commence a prendre de bonnes habitudes avec les paramètres des querys

    il a juste oublié de mettre un ':' devant le nom de ces derniers il me semble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        SQL.Clear;
        SQL.Add('UPDATE BATCH SET BATCH_NB_CONTROL = :xNbrControls , ');
        SQL.Add('BATCH_DELTA_E_DE_MAX = :xRecDeMax , ');
        SQL.Add('BATCH_DELTA_E_DE_AVERAGE = :xDeAverage , ');
        SQL.Add('BATCH_NB_OK = :xNbrControlOk , ');
        SQL.Add('BATCH_NB_DELTA_E_OK = :xNbrDeOk , ');
        SQL.Add('BATCH_RESULT_OK = :xResultOk , ');
        SQL.Add('BATCH_DATETIME_END = :xdatetime ');
        SQL.Add('WHERE BATCH_NO = :xBatchNo ');
    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 habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok résolu
    Merci mille fois

  8. #8
    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
    Salut Serge,

    En fait j'ai saisie directe sur le fofo et copier-coller les zones... effectivement avec les ':' sa marchera mieux....


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

Discussions similaires

  1. [MySQL] Erreur de mise à jour table sous mySql
    Par noubs dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/10/2014, 21h47
  2. Problème mise à jour table liée à un datagrid
    Par Gildas22 dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/08/2014, 14h06
  3. Mise à jour table: sous requête UPDATE
    Par aiss57 dans le forum Requêtes
    Réponses: 7
    Dernier message: 27/04/2009, 15h18
  4. Réponses: 6
    Dernier message: 29/05/2006, 14h22
  5. Problème mise à jour vers IE6 sous W2K
    Par lio33 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 11/10/2005, 11h51

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