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 Update Base de données avec les composants ADO


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Problème Update Base de données avec les composants ADO
    Bonjour,
    Je viens de m'inscrire à ce Forum. J'ai un gros problème de Update des donneeés. Mon pb est le suivant:
    Je voudrais développer avec delphi 7, une application sous Windows avec une base de données de MS Access 2003 ( 7 tables) pour gérer les heures de travail des personnes. Sous Delphi, j'utilise les composants TADOConnection, TADOQuery. Je réussis afficher les données et ajouter les enregistrement dans la BDD sous Delphi. Mais pour la modification, j'ai de PB. Audébut, je voulais utiliser une Requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'Update NomTable Set NomChamp = 'ValChaine', NomChamp = ValInt Where ID= ValID';
    ADOQuery1.ExecuteSQL;
    J'ai le message ' Erreur automation interne', en ajoutant
    ADOQuery1.Edit;
    Je n'ai plus de ce PB, mais les données ne sont pas modifiées.
    Ensuite, j'utilise la méthode Post :
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := Select NomCham From Nomtable Where ID = ValID'
    ADOQuery.Open
    ADOQuery1.Edit;
    ADOQuery1.Field[0].Value := 'ValSaisie';
    ADOQuery1.Post;
    ADOQuery.Close;
    C'est bon, mais, il me faut faire champ par champ. Surtout, pour un champ de type Reel double, j'ai encore le message 'Erreur automation interne'. Je suis bloqué; Je n'ai plus de solutions.
    Pourriez vous m'aider? J'ai besoin de votre compétence de développement des applications avec une BDD d'Access. Merci en avance.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'Update NomTable Set NomChamp = 'ValChaine', NomChamp = ValInt Where ID= ValID';
    ADOQuery1.ExecuteSQL;
    J'ai le message ' Erreur automation interne', en ajoutant
    ADOQuery1.Edit;
    Je n'ai plus de ce PB, mais les données ne sont pas modifiées.
    Normal que tu es cette erreur , tu ne peux pas editer une requete qui ne te renvoit pas de données (insert,delete, update).
    Sinon tes données sont bien modifiées mais il faut rafraichir l'affichage de tes données.

    Je n'ai plus de ce PB, mais les données ne sont pas modifiées.
    Ensuite, j'utilise la méthode Post :
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := Select NomCham From Nomtable Where ID = ValID'
    ADOQuery.Open
    ADOQuery1.Edit;
    ADOQuery1.Field[0].Value := 'ValSaisie';
    ADOQuery1.Post;
    ADOQuery.Close;
    C'est bon, mais, il me faut faire champ par champ. Surtout, pour un champ de type Reel double, j'ai encore le message 'Erreur automation interne'. Je suis bloqué; Je n'ai plus de solutions.
    Pourriez vous m'aider? J'ai besoin de votre compétence de développement des applications avec une BDD d'Access. Merci en avance.
    Après la modification de du champs puis le Post, il faut que tu rafraichisses ta requete et surtout que tu ne l'as ferme pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Text := Select NomCham From Nomtable Where ID = ValID'
     ADOQuery.Open
     ADOQuery1.Edit;
     ADOQuery1.Field[0].Value := 'ValSaisie';
     ADOQuery1.Post;
    //ADOQuery.Close; // <----- requete fermer
    AdoQuery1.Requery; // <--- rappel la requete
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Malatar
    Normal que tu es cette erreur , tu ne peux pas editer une requete qui ne te renvoit pas de données (insert,delete, update).
    Sinon tes données sont bien modifiées mais il faut rafraichir l'affichage de tes données.



    Après la modification de du champs puis le Post, il faut que tu rafraichisses ta requete et surtout que tu ne l'as ferme pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Text := Select NomCham From Nomtable Where ID = ValID'
     ADOQuery.Open
     ADOQuery1.Edit;
     ADOQuery1.Field[0].Value := 'ValSaisie';
     ADOQuery1.Post;
    //ADOQuery.Close; // <----- requete fermer
    AdoQuery1.Requery; // <--- rappel la requete
    Merci pour vitre réponse. mais je n'ai pas de problème de raffraichir. Le pb est, pour un champ de type Reel , l'execution de la ligne
    ADOQuery1.Post produit le message d'erreur ' Erreur automation Interne'
    Je vais quand même essayer ma première méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text := 'Update NomTable Set NomChamp = 'ValChaine', NomChamp = ValInt Where ID= ValID';
    ADOQuery1.ExecuteSQL;
    AdoQuery1.Requery; // En ajoutant votre solution
    Merci encore

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Toujours le problème de Update
    Citation Envoyé par Malatar
    Normal que tu es cette erreur , tu ne peux pas editer une requete qui ne te renvoit pas de données (insert,delete, update).
    Sinon tes données sont bien modifiées mais il faut rafraichir l'affichage de tes données.



    Après la modification de du champs puis le Post, il faut que tu rafraichisses ta requete et surtout que tu ne l'as ferme pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     ADOQuery1.SQL.Clear;
     ADOQuery1.SQL.Text := Select NomCham From Nomtable Where ID = ValID'
     ADOQuery.Open
     ADOQuery1.Edit;
     ADOQuery1.Field[0].Value := 'ValSaisie';
     ADOQuery1.Post;
    //ADOQuery.Close; // <----- requete fermer
    AdoQuery1.Requery; // <--- rappel la requete
    Mon problème est venu quand l'excution de la ligne
    Ce n'est pas après. Quand le champ à modifier est le type Real ou un cle etrangère. J'ai toujours le message 'erreur automation interne'. Quand c'est un champ de type text, pas de problème
    Pourriez-vous m'aider. je suis vraiment bloqué. Merci

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Fait voir ton vrai code si possible car avec l'écriture que tu nous présentes, il n'y a rien de plus à faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Résolu
    Citation Envoyé par Malatar
    Fait voir ton vrai code si possible car avec l'écriture que tu nous présentes, il n'y a rien de plus à faire.
    C'est bon, j'ai résolu mon problème, il s'agit des configuration des attributs et options dans les 2 composants ADOQuery et ADOConnection. Merci beaucoup
    Lingli

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/09/2012, 06h13
  2. Création d'une base de données avec les composants " BDE "
    Par Y013S dans le forum Bases de données
    Réponses: 4
    Dernier message: 22/12/2010, 23h43
  3. Problème de Base de données avec Mysql
    Par Peter K. dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/01/2008, 11h30
  4. Problème avec les composants ADO
    Par elikplim dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/10/2007, 11h39
  5. Problème de base de données avec Zend exception PDO
    Par websurfeur dans le forum Zend Framework
    Réponses: 8
    Dernier message: 20/04/2007, 16h49

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