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

C++Builder Discussion :

Erreur : Ecrire dans une BD


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut Erreur : Ecrire dans une BD
    Bonjour,

    Je commance tout de suite par le code :
    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
    Tvvt->Active=true;
    Tvvt->First();
    p=Tvvt->Fields->Fields[2]->Value;
    for (i=1;i<(Tvvt->FieldCount);i++)
    {
     Tvvt->Next();
     s=Tvvt->Fields->Fields[2]->Value;
     ac=0;
     if ((p<s) && (s>2048))
      ac=1;
     if ((p<s) && (s<2048))
      ac=1;
     if ((p>2048) && (s>2048))
      ac=1;
     Tvvt->Edit();
     Tvvt->Fields->Fields[4]->Value=ac;
     p=s;
    }
    Tvvt et une TTable de maniére à acéder à une table MySql via BDE.

    Losque j'exécute se code j'ai comme erreur sur le Tvvt->Edit(); :
    Editin imposible, car un autre utilisateur a modifié l'enregistrement.
    Me conaisant, j'ai oublier une suptilité, mais je n'arrive à trouvé quoid.

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Essai en modifiant la propriété Updatemode de ton composant TTable et en le mettant à upwherechanged

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Citation Envoyé par sat83 Voir le message
    Essai en modifiant la propriété Updatemode de ton composant TTable et en le mettant à upwherechanged

    Sa change rien. méme erreur.

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Il te manque un:
    après avoir modifié les valeurs du ou des enregistrements.

    Edit / Post: couple inséparable ...

    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Bonjour,

    Il te manque un:
    après avoir modifié les valeurs du ou des enregistrements.

    Edit / Post: couple inséparable ...

    @+
    J'ai rajouter le post(), mais l'erreur et toujours la. :-(

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Il y a un truc qui me semble "bizarre", vu de loin, dans ta manière de passer en revu les champs de la table:
    . du fait un "First()" avant ta boucle for
    . ta boucle for va de 1 a FieldCount, mais je ne vois nulle par en quoi sert la variable "i" (qui est bien incrémentée, elle, dans la boucle)
    . a chaque itération, tu fais un "Next()", tu "descends" donc d'une ligne dans la table

    J'ai l'impression, mais je peut me tromper et je m'en excuse d'avance, que tu voudrais utiliser qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tvvt->First();
    while (! Tvvt->Eof)
    {
         // ton code ici
         Tvvt->Edit();
              Tvvt->Fields->Fields[4]->Value = //... etc
         Tvvt->Post();
    Tvvt->Next();
    }
    @+

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Il y a un truc qui me semble "bizarre", vu de loin, dans ta manière de passer en revu les champs de la table:
    . du fait un "First()" avant ta boucle for
    . ta boucle for va de 1 a FieldCount, mais je ne vois nulle par en quoi sert la variable "i" (qui est bien incrémentée, elle, dans la boucle)
    . a chaque itération, tu fais un "Next()", tu "descends" donc d'une ligne dans la table

    J'ai l'impression, mais je peut me tromper et je m'en excuse d'avance, que tu voudrais utiliser qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tvvt->First();
    while (! Tvvt->Eof)
    {
         // ton code ici
         Tvvt->Edit();
              Tvvt->Fields->Fields[4]->Value = //... etc
         Tvvt->Post();
    Tvvt->Next();
    }
    @+
    le for et la, car j'ai changer d'idée en cour de route, et j'ai pas changer ma boucle. S'est vrais que sa serait peut étre plus "propre" avec un while.

    j'attire ton attention sur le next au début de la boucle, car je lit une foit avans de rentré dans la boucle. Vue que le but de ce bout de code et de conparait une variable avec sa valleur présédante, dout le faite que mon i comance à 1 au lieu de 0. Je traite tous les enregistrement, sauf le 1er.

    Mais sa ne change rien au faite que l'edit provoque une erreur.

  8. #8
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Oui, mais ce que je ne comprends pas (mais je me fais vieux et sénile), c'est que FieldCount te renvoie le nombre de champs dans la table, et non pas le nombre d'enregistrements (je ne sais comment l'appeler: de lignes, de tuples, que sais je) dans la table.
    A moins que je me plante sur FieldCount ...

    Donc si tu as 10 champs, et 7 enregistrements, ca va pas aller; pas plus que si tu as 10 champs et 10 000 enregistrements, va y avoir un paquet d'oublié.

    Après, avec le BDE, as tu utilisés un objet TDataBase, sur lequel tu ferais un StartTransaction() - une fois - avant la section contient les appels a Edit(), puis un Commit() a la fin ? Je ne dis pas que ca peut absolument venir de la, d'ailleurs.

    ++

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    oups, je devais avoire la téte ailleur quand j'ai fait ma boucle.
    S'est corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i=1;i<(Tvvt->RecordCount);i++)
    Je reste avec le for, car j'airai besoin du i apres.
    Merci, je demande de résoudre une erreur, et on m'en résou une en prime que je n'avais pas encore vue.

    Pour le BDE. Je suis pas sur de comprendre se que tu demande. j'ai bien un Tdatabase, mais je ne fait rien direct dessus. Avans se bout de code, la seul chose que je fait avec ma BD et l'envoy d'un requéte sql via un TQuery. J'ai esseyer de comanté tous se qu'y se passe avans ma boucle avec l'edit dans le programme, et le probléme persiste.

  10. #10
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Salut,
    Désolé, j'avoue que je ne vois pas.
    Entre ce qui avait été proposé par sat83, un Post() qui suit bien le Edit(), si toutes les propriétés de l'objet TTable sont correctement renseignées et qu'il pointe vers une table valide, etc ... ben, je sais po.
    D'ici, je vois pas, ca serais peut être plus facile d'avoir le nez dessus.

    Je te conseille tout de même de jeter un oeil dans l'aide au sujet de StartTransaction() et Commit() de TDataBase, ca me semblais utile dans le cas ou on utilisais les objets du BDE; mais ca n'a rien a voir avec ton problème, je sais.

    Au fait:
    et l'envoy d'un requéte sql via un TQuery
    Elle concerne la table en question, ta requête ? Si oui, elle fait quoi dessus ?

    @+

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Ma requéte fait un update sur la table. Mais le probléme ne vien pas de la : j'ai suprimer le Tquery et commanté tous le reste du programe, et le probléme persiste.

    J'ai tester avec un TDBnavigator, et il n'arrive pas non plus à faire rentré la table en mode édition.

  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    j'ai réduit mon programme à sa plus sinple expresion, il reste comme code actif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Database1->Connected=true;
    Database1->StartTransaction();
    Tvvt->Active=true;
    Tvvt->Edit();
    Tvvt->Post();
    Database1->Commit();
    Le programme s'arréte au edit et ne vas pas plus loingt. :-(

  13. #13
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    On est bien d'accord que des propriétés telles que CanModify ou ReadOnly ne bloquent pas ?

    Au fait, je ne connais pas mySQL donc je me pose la question: est ce que les composants "classique" du BDE tels que TTable et cie sont bien adaptés ?
    N'est ce pas vers les composants DBExpress qu'il fallait se tourner ?

    ++

  14. #14
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    - Est ce que tu as les droit suffisant pour modifier ta table?
    - Est ce que ta table n'est pas en lecture seule ou un truc du genre?

  15. #15
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Voila, vus que je ne trouvé pas de solution malgré toute vos "piste", j'ai désider de contourné le probléme. :

    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
    Tvvt->Active=true;
    Tvvt->First();
    p=Tvvt->Fields->Fields[2]->Value;
    for (i=1;i<(Tvvt->RecordCount);i++)
    {
     Tvvt->Next();
     s=Tvvt->Fields->Fields[2]->Value;
     ac=0;
     if ((p<s) && (s>2048))
      ac=1;
     if ((p<s) && (s<2048))
      ac=1;
     if ((p>2048) && (s>2048))
      ac=1;
     Query1->SQL->Add("UPDATE VVT SET  `ac`=' "+IntToStr(ac)+"' ");
     Query1->SQL->Add("WHERE `date` = '"+Tvvt->Fields->Fields[0]->Value+"' AND `time` = '"+Tvvt->Fields->Fields[1]->Value+"'");
     Query1->ExecSQL();
     Query1->SQL->Clear();
     p=s;
    }
    S'est peut étre pas tres jolis, Mais au moin sa marche.
    Merci de votre aide

  16. #16
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par fpascal Voir le message
    S'est peut étre pas tres jolis, Mais au moin sa marche.
    Pour ma part je trouve l'utilisation de TQuery beaucoup plus propre et beaucoup plus "jolie" que l'utilisation de TTable.

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

Discussions similaires

  1. ecrire dans une listbox
    Par amigauss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/01/2006, 17h48
  2. [VB] Ecrire dans une ComboBox -> Combo = TexBox
    Par zejo63 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/01/2006, 11h25
  3. [MySQL] Comment ecrire dans une BDD à partir d'un tableau ?
    Par weed dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/09/2005, 15h53
  4. Réponses: 4
    Dernier message: 15/04/2005, 15h25
  5. [C#] Message d'erreur vide dans une replication et rda
    Par Roach- dans le forum Windows Forms
    Réponses: 25
    Dernier message: 05/04/2005, 15h19

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