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 :

Pb Update AdoTable


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Pb Update AdoTable
    Hello

    J'ai trois fiches : la premi�re permettant d'ajouter un client, la seconde permettant d'ajouter une conso � un client, la troisi�me �tant le menu pour passer d'une fiche � l'autre. Sur chacune des deux fiches (ormis le menu) j'ai un composant TADOTable connect� sur ma table Client (Access), et un autre composant TADOTable connect� sur la m�me table Client.

    Le pb est le suivant, lorsque j'ajoute un client depuis la fiche Client puis l'utilisateur veut ajouter une conso pour ce client, le nouveau client n'apparait pas, je dois fermer l'application pour que le nouveau client soit bien enregistr�.

    J'enregistre mon client "convenablement" par des ->Insert(), ->Post(). J'ai m�me essay� de faire � chaque fois qu'un �v�nement FormShow() se produit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    ClientConso->Active = false;
    ClientConso->Active = true;
    J'ai essay� la m�thode Update() aussi, mais j'ai des plantages lors du FormShow. Bref, pas moyen de faire une mise � jour entre deux tables ADO pointant sur la m�me table Access.

    En esp�rant que qq'un pourra m'aider, a bient�t.

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    essaye avec 1 Requery() au niveau de l'evenement AfterPost de chacune de tes tables sur la table jumelle.

    ex pour la table1 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TForm1::ADOTable1AfterPost(TDataSet *DataSet)
    {
            ADOTable2->Requery();
    }
    Par curiosit� : Question annexe si j'ai bien compris tu as 2 composants AdoTable pointant sur la table reelle, quelle contrainte t'oblige � avoir ce doublon ?

  3. #3
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Pourquoi doublon ?
    Ok je vais essayer le Requery je dirai ca plus tard (chez moi il est d�j� 22h avec le d�callage).

    Voil� pourquoi j'ai un doublon, voir des doublons car j'ai plusieurs fiches avec plusieurs table. Le pb est que j'ai commenc� � programmer les bd seulement depuis cette application.

    Donc j'aurai prefer� avoir une seule table mais je ne sais pas comment faire apparaitre une table d'une fiche sur une autre fiche. Je viens de lire que Dieu � invent� les Modules de Donn�es, ce serait une solution je pense, mais l� c'est trop tard.

    Par contre; s'il existe une solution pour �viter d'avoir plusieurs doublons (et comme il s'agit de g�rer des abonnements, des inscriptions, des consos, des statistiques) j'ai bcp bcp de tables en doublons, malheur!

    Si tu peux m'aider, ce serait super pour rattraper mon erreur, sans modifier trop de code.

  4. #4
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    oui pour les datamodule c'est pas trop tard....
    fais une copie de ton projet d'abord...puis

    fichier nouveau DataModule, nomme le DM, enregistre l'unit� sous par uDm.cpp

    fait :

    - un #include "uDM.h" dans les unit�s de toutes les fiches qui utilisent les tables

    - un couper coller de tes tables et datasource qui sont sur les fiches vers ce DM
    de sorte � ne pas avoir de doublons....

    dans Project1.cpp ( ton ficher principal) arrange toi pour que DM soit cr�e en premier, apr�s initialize:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
        Application->Initialize();
        Application->CreateForm(__classid(TDM), &DM);
    - enleve les r�f�rences de table et datasource en double rest�e sur les fiches

    - Corrige ensuite les Datasource de tes DbGrid et autres Datacontrols ( DM->Datasource1 ) t'est propos� si tu as bien fais l' include cit� avant.

    -Corrige ensuite ton code :

    devient
    ou bien redefini simplement Table1 avant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
      TADOTable* Table1 =DM->Table1;
     
      //si Table1 est defini avant , le reste ne bouge pas
      Table1->Requery();
    et voil� c fini

  5. #5
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Oulala
    Je vais tenter de mettre mon code � jour, de toute fa�on si j'ai bien compris je n'ai pas trop le choix puisque les requery ne mettent pas � jour mes tables doublons. En tout cas merci pour ton aide, je vais tenter de voir... Par contre, je ne sais pas si c'est normal ou c'est du aux tables, mais �a rame �norm�ment lorsque j'effectue une requ�te... On dirait que mon appli tourne au ralenti, peut-�tre du au fait que je charge 30 tables au d�marrage...

    En attendant, je me pose la question, pourquoi la m�thode Update() ne met pas � jour les tables ? Elle est faite pour �a non ? Sinon � quoi elle sert, puisqu'apr�s une op�ration telle que Insert(), Delete(), Edit() les tables sont mises � jour automatiquement.

    Merci encore...

  6. #6
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    d�cidement j'ai de plus en plus l'impression de travailler avec des composants differents de tout le monde ces temps ci...

    je n'ai trouv� trouv� aucune methode Update() pour TADOTable.....


    NB : En plus pour le Requery cela fonctionne chez moi avec aussi une base access... (bien sur que dans le cas d'un nouveau enregistrement car le Requery n'avait �t� mis que dans l'�venement AfterPost et pas AfterDelete, Afteredit...etc ).

    Test� simplement avec 1 ADOConnection 2 ADOTable (pointant sur une meme table ) sur une meme fiche, 2 datasources 2 DBGrids et 2 Db Navigator...

    Le cas ou �a ne marche pas :

    ... C'est quand on ne configure pas les ADoTable sur une seule et m�me SQLConnection ...

    si on s'amuse par exemple � mettre directement une connection String dans chaque TADOTable, ou alors on met plusieurs TADOConnection dans le programme.. mais bon je suppose que personne n'aurait l'id�e de faire un truc aussi ... bizarre.
    ...surtout que �a ralentirait sacrement les performances ....

  7. #7
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Dur dur
    Non non, comme tu dis, j'ai pas eu la bonne id�e de mettre plusieurs connection. En fait, apr�s reflexion suite � ton mail, c'est �trange que les donn�es n'apparaissent pas sur diff�rentes tables (contrairement � toi, j'ai plusieurs fiches, �a change peut-�tre qq chose) vu que j'ai la m�me connection.

    J'utilise beaucoup les champs calcul�s, c'est vraiment domage que je n'ai pas su utilis� les DM avant, j'aurai �vit� les copier coller.

    Donc une derni�re question : si je ne change pas du tout mon code, c'est � dire que je n'efface pas mes composants TTable mais au constructeur je fais cette op�ration :
    sachant que Table1 � �t� d�fini pas BCB en variable private, � priori j'aurai une seule table ? En fait, je me demande s'il n'est pas mieux de proc�der ainsi plutot que de changer toutes les occurences de Table1 apparaissant dans le prog (je vois d�j� venir les buggs).

    Par contre je ne sais pas quelle version de BCB tu utilises pour ne pas avoir les Update() mais tu vois, �a ne me sert pas � grand chose

    A plus tard, et je ne l'aurai jamais assez dit sur ce forum, encore merci.

  8. #8
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    J'utilise BCB6 Entreprise +Update Pack 4: aucun update meme pas dans l'aide ( j'ai bien UpdateRecord...)

    sachant que Table1 � �t� d�fini pas BCB en variable private
    ...c'est vrai qu'on a pas la m�me version chez moi tout ce qui est mis automatiquement est dans __published:

    si je ne change pas du tout mon code, c'est � dire que je n'efface pas mes composants TTable mais au constructeur je fais cette op�ration :
    ... je pense qu'il faudrait quand meme les supprimer de la fiche, en revanche l'id�e (pour ne pas corriger tout le code ta fiche)c'est de d�clarer en variable private ou public un pointeur sur TADOTable ....
    ...� initialiser dans le contructeur pour qu'il pointe sur l'unique Composant TADOTable de ton application ,situ�e dans le DM:

    En R�sum� :

    Utiliser le DM , c'est juste organisationnel (pour pas surcharger visuellement la fiche principale Form1), mais tu pourrais juste mettre tous les composants ado sur la fiche principale �a reviendrait au m�me..

    Ensuite, quand tu as, sur une autre fiche (Form2) une DBGrid,
    dans la propri�t� DataSource du DBGrid , on te donne le choix entre plusieurs DataSource...
    l� , au lieu de choisir par ex DataSource2 (le doublon pos� actuellement sur ta Form2) , tu choisis Form1->DataSource1,
    un peu comme tu as �t� oblig� de faire pour Configurer la propri�t� Connection de ton doublon DataSource2 afin qu'il aille chercher Form1->ADOConnection...

  9. #9
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Merchiche kebbab
    Merci Djob, je vais suivre tes conseils. Je viens de faire un tour sur le forum, je n'ai vu que ton pseudo. En tout cas, merci beaucoup d'�tre autant pr�sent pour nous. De mon c�t�, je vais mettre un petit r�solu, car je pense avoir toutes les infos pour d�bloquer mon programme, se sera long et d�licat d'ailleurs.

    The End.

    PS: j'ai fait une erreur, il est clair que BCB met les composants en published

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Requ�te update � partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    R�ponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    R�ponses: 11
    Dernier message: 27/05/2003, 14h11
  3. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    R�ponses: 4
    Dernier message: 12/12/2002, 11h59
  4. R�ponses: 3
    Dernier message: 10/11/2002, 11h03
  5. update et virgule
    Par Delph dans le forum Bases de donn�es
    R�ponses: 8
    Dernier message: 27/08/2002, 14h40

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