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 :

Refresh de DBGRID


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Refresh de DBGRID
    Comment faire un refresh sur un dbgrid dans un programme Delphi-Interbase
    lors de changement de données au niveau d'un poste client quelconque.
    Actullement j'utilise les TRIGGER avce POST_EVENT de Interbase et fermeture
    puis ouverture de la table dans le programme(le refresh ne fonctionne pas)

    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Attention, il y a DEUX Refresh
    Celui de la TDBGrid, effectivement, aucun effet
    Celui du TDataSet, un Query ... cela fonctionne en général, souvent cela ferme le cursor et le ré-ouvre, cela ré-execute le SQL, par contre il y a repositionnement automatique sur l'enregistrement en cours !

    Interbase en mode client-server, réduit au maximum le volume des données en transit, pour un listing par exemple, n'affiche pas une table entière mais juste les 20 premiers enregistrements

    Selon, le Provider que tu utilises, il y a plus ou moins une gestion intégrée d'une "pagination" et d'un lazy-loading comme PacketRecords
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Attention, il y a DEUX Refresh
    Celui de la TDBGrid, effectivement, aucun effet
    Celui du TDataSet, un Query ... cela fonctionne en général, souvent cela ferme le cursor et le ré-ouvre, cela ré-execute le SQL, par contre il y a repositionnement automatique sur l'enregistrement en cours !

    Interbase en mode client-server, réduit au maximum le volume des données en transit, pour un listing par exemple, n'affiche pas une table entière mais juste les 20 premiers enregistrements

    Selon, le Provider que tu utilises, il y a plus ou moins une gestion intégrée d'une "pagination" et d'un lazy-loading comme PacketRecords

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 24
    Points
    24
    Par défaut TDataSet REFRESH
    En effet j'utilise un TIBDataSet.refresh mais ça donne rien, ceci sous Delphi7 et Delphi2010 avec Interbase2009.

    Quand je fait TIBDataSet.close puis TIBDataSet.open ça rafraîchit bien le Dbgrid.

    Comment faire pour ne pas utiliser ce Close-Open.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Teste si le Refresh fonctionne sur le TIBQuery ou le TIBTable, il peut y avoir des différences d'implémentations !
    Si le TIBQuery supporte mieux le Refresh, tu devrais le coupler avec un TIBUpdateSQL pour les mises à jour !

    As-tu du SQL dans la propriété RefreshSQL ? C'est indispensable !
    Pas de transaction en cours : voir Application reseaux utilisant le SGBD Interbase

    En BDE, je faisais aussi Close\Open, que ce soit avec Paradox (indispensable si accès concurrentiel) ou IB6 !
    J'ai des souvenirs que les Refresh ce n'était pas terrible ! Mais cela date de 2002, je n'ai plus fait de IB depuis !
    Et même avec d'autres DB et d'autres FrameWork comme dans le sujet
    Rafraichir un DBGrid sans perdre la séléction de la ligne
    , j'ai toujours privilégié un Close\Open, et j'ai vu cela pratiqué par beaucoup de collègues qui m'ont précédés !


    PS : Supprime la citation en doublon avec le bouton editer
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Refresh de données
    Avec un TIBTable , Refresh fonctionne très bien.

    Avec un TIBQuery j'ai le message :

    Impossible de rafraichir la ligne(pas de requette refresh),
    Pas de problème puisqu'il n'y a pas de propriété Refresh dans un TIBQuery.

    Avec TIBDataset j'ai bien du SQL dans la propriété RefreshSQL comme suit :
    select * from table where champ1=:champ1 and champ2=:champ2 and ...
    ou (champ1,champ2,...) est la clé primaire, mais le Refresh no fonctionne pas.
    Je cherche d'avantage.
    Merci pour tout aide.

Discussions similaires

  1. Probleme Refresh Firebird et DBGRID
    Par mina24 dans le forum Bases de données
    Réponses: 20
    Dernier message: 27/02/2012, 16h35
  2. problème refresh DBGrid?
    Par indexname dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/03/2009, 16h17
  3. Refresh DbGrid trop lent ?
    Par vincent magnin dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/06/2006, 15h41
  4. problème de refresh sur une DBGrid
    Par lidouka dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/12/2005, 17h12
  5. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20

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