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 Affichage


Sujet :

Bases de données Delphi

  1. #1
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut Mise à Jour Affichage
    Bonjour à tous,

    J'ai une BDD Access attaquée par ADO. Lorsque j'ajoute un enregistrement dans une table (ADO - Query = INSERT), j'aimerais qu'il apparaisse immédiatement dans un DBLookUpComboBox ou dans un DBGrid. Or actuellement, il faut que je ferme puis ré-ouvre l'application ... vous comprenez bien que je ne sois pas satisfait du résultat.

    Je dispose d'un ADOConnexion > ADOQuery > DataSource > DBLookUpComboBox / DBGrid.

    J'ai essayé de fermer/ouvrir la requête, de fermer/ouvrir la ADOConnexion, de rafraichir le DBLookUpComboBox, etc...


    Merci pour vos commentaires éclairés
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  2. #2
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    a la place de adoquery j'utilise un adotable et sur la supression ajout je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ADOTable.Requery();
        (Sender As TDBLookupComboBox).Refresh;
    et ma liste est à jour

    je sais pas si sa peux t'aider
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    forcer le refresh sur l'ensemble de données puisque à la fermeture c'est ce qui se passe en effet si tout s'est bien passé.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Salut à tous !

    Alors j'ai réessayé de mettre du refresh "un peu partout" --> mais rien. J'ai déconnecté la liaison à la base --> toujours rien !!

    Bref.

    Tout d'un coup, j'ai décidé de faire plusieurs ajouts consécutifs ... et là = mystère :
    - 1er requête INSERT : évidemment : rien (sinon je n'aurais pas ouvert cette discussion !), le DBLookUpComboBox ne prend pas la modification ;
    - 2ème (et 3ème, 4ème, etc) requête INSERT : le DBLookUpComboBox affiche les 2 (3, 4, etc) nouvelles lignes .



    à OUIOUIOUI : j'ai bien essayé avec les ADOTable : mêmes résultats !
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    et si tu mettais entre nos mains ce code si mystérieux !!!
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Oui j'ai déjà vu ça, essaye de mettre ta requête de modif. dans une transaction.

  7. #7
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    et si tu mettais entre nos mains ce code si mystérieux !!!
    C'est bien ça le problème : c'est un code simpliste ... et qui remplit correctement la base : aucun message d'erreur

    dans Form2 = une fiche de saisie des données :
    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
     
    procedure TForm2.EnrgAClient;
    var
      strSQL : WideString;
    begin
      strSQL := 'INSERT INTO clients (idservice, nom, prenom, nbre, genre, valide) '  +
                    'values (:Pidservice, :Pnom, :Pprenom, :Pnbre, :Pgenre, :Pvalide)';
      with DM.ADOQry do
      begin
        Close;
        SQL.text := strSQL;
        ParamCheck := true;
        Parameters.ParamByName('Pidservice').Value := IIfVi(DBLUPCBxCli.KeyValue);  // IIfVi() : convertit, s'il existe, un variant en integer
        Parameters.ParamByName('Pnom').Value := AClient.nom;
        Parameters.ParamByName('Pprenom').Value := AClient.prenom;
        Parameters.ParamByName('Pnbre').Value := AClient.nbre;
        Parameters.ParamByName('Pgenre').Value := AClient.genre;
        Parameters.ParamByName('Pvalide').Value := True;
        ExecSQL;
        Close;
      end;
    end;
    dans le DataModuleCreate :
    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
     
    procedure TDM.DataModuleCreate(Sender: TObject);
      ...
      begin
      ...
        ADOQry.ConnectionString := ADOCnxStr;
      ...
      end;
     
    initialization
      ADOCnxStr :=
         'Provider=Microsoft.Jet.OLEDB.4.0;'+
         'User ID=Admin;' +
         'Data Source=' + dbName + ';' +
         'Mode=Share Deny None;' +
         'Jet OLEDB:Engine Type=5;'
         ;
    @ PhilNext : j'essaie demain la transaction, mais je ne sais pas si le moteur JET les accepte ?
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    dans la procedure EnrgAClient le second close sert à quoi ? moi j'aurais mis un open à la place !
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  9. #9
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    ou utilise une TAdoConnection,ADOCommand

  10. #10
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Merci pour toutes vos réponses.

    @ PhilNext : pas eu le temps d'essayer les transactions.

    @JustSoft : effectivement le deuxième close n'a pas d'intérêt. Par contre, pour les requêtes INSERT, j'utilise habituellement un ExecSQL plutôt qu'un Open que je reserve aux clauses SELECT .

    @Montor : j'essaie dès que possible un Active := False;

    Il ne me reste plus qu'à passer à l'oeuvre. Je vous tiens au courant.
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  11. #11
    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
    Si tu veux que ton dblookup se mette à jour il serait bien de rafraichir la requête du composant.
    Un requête n'est qu'une vue de la base de données a un instant T.

    Sinon, mis à part çà, avec ado il vaut mieux utiliser requery que refresh
    Modérateur Delphi

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

  12. #12
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Combien de TADOQuery utilise-tu ?
    si une seule
    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
     
    procedure TForm2.EnrgAClient;
    var
      strSQL,OldSql : WideString;
      St:boolean;
    begin
      strSQL := 'INSERT INTO clients (idservice, nom, prenom, nbre, genre, valide) '  +
                    'values (:Pidservice, :Pnom, :Pprenom, :Pnbre, :Pgenre, :Pvalide)';
      with DM.ADOQry do
      begin
        St:=Active;
        OldSql:= SQL.text;
       try
        Close;
        SQL.text := strSQL;
        ParamCheck := true;
        Parameters.ParamByName('Pidservice').Value := IIfVi(DBLUPCBxCli.KeyValue);  // IIfVi() : convertit, s'il existe, un variant en integer
        Parameters.ParamByName('Pnom').Value := AClient.nom;
        Parameters.ParamByName('Pprenom').Value := AClient.prenom;
        Parameters.ParamByName('Pnbre').Value := AClient.nbre;
        Parameters.ParamByName('Pgenre').Value := AClient.genre;
        Parameters.ParamByName('Pvalide').Value := True;
        ExecSQL;
        Close;
       finally
        SQL.text:= OldSql; 
        Active  :=St;
       end;
     
      end;
    end;
    ou tu fais sur qui ADOQuery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       ADOQuery1.Close;
       ADOQuery1.Open;

  13. #13
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Merci pour toutes vos réponses.

    A force de constater que j'avais plus ou moins déjà essayé les solutions que vous avez proposées, je me suis aperçu d'une faille dans mon programme. En fait, en "empilant" les couches avec l'EDI (je veux dire : sans écrire le code à la main), j'ai laissé un DataSource orphelin de son ADOQuery ....

    Problème résolu !

    Encore à vous.

    Quant à moi (), il ne me reste plus qu'à me faire et pour le temps perdu ...
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

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

Discussions similaires

  1. Mise à jour affichage dans Thread=Effet troboscope non désiré..
    Par frafra49 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 19/02/2014, 10h15
  2. [eCommerce] Mise à jour affichage après paiement en ligne
    Par hellomorld dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 08/06/2012, 13h37
  3. [Lazarus] Mise à jour affichage DbGrid et table Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 1
    Dernier message: 31/03/2010, 08h16
  4. Mise à jour affichage zone de texte
    Par mulanzia2003 dans le forum IHM
    Réponses: 1
    Dernier message: 20/09/2007, 15h20
  5. Mise à jour affichage section détail form
    Par thb74 dans le forum Access
    Réponses: 3
    Dernier message: 27/08/2006, 13h39

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