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 :

Recherche dans un ensemble de données avec "Locate"


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Points : 64
    Points
    64
    Par défaut Recherche dans un ensemble de données avec "Locate"
    Salut!
    J'aimerais savoir quels sont les évènement qui sont déclenchés lorsqu'on fait un "Locate" sur un ensemble de données.
    Le but est de rafraichir chaque table de mon module au moment ou on accède à celle-ci : pour une insertion, une mise à jour, une suppression, une recherche ...
    Le lien d'une FAQ à ce sujet serait aussi bon à prendre.
    Merci!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu aurais probablement un BeforePost et AfterPost au moment où il trouve l'enregistrement !
    Tu auras la même chose avec First, Next, Prior, Last...

    Si je ne vois pas trop ce que tu veux faire !
    Si tu veux rendre implicite le relancement de SQL (Refresh ou Close\Open) lorsque l'on fait un Locate, c'est très maladroit !
    Tu devrais plutôt au besoin, faire un objet Business ou un Contrôleur qui fourni une méthode Locate qui fait ce travail particulier, donc ton code, cela reste explicite, on sait que lorsque l'on utilise CE locate ce implique un Refresh des données, si on utilise un Locate du TDataSet, on sait que cela implique un simple déplacement !
    Le code implicite presque masqué comme tu le prévois est source de bug !
    Toujours avoir la maîtrise de ce que l'on appel !


    Quel SGBD ? Oracle, SQL Server, MySQL ... Paradox
    Quel Provider ? DOA, ODA, MyDAC ... BDE
    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 du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Points : 64
    Points
    64
    Par défaut
    En fait, mon but est d'avoir des données actuelles sur chaque poste dans une application multi-poste. Le souci c'est que les données sont chargées dans les DataSource à l'initialisation du module (c'est du moins ce que je crois).
    Or les données peuvent changer en cours d'exécution sur un poste.
    La méthode à laquelle j'ai pensé pour rafraichir les données sur les autres poste est de rafraichir l'ensemble de données à chaque accès à celui-ci, en d'autre terme dans une insertion, une mise à jour, une suppression, une recherche ...

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Premièrement un Locate ne déclenche qu'un Scroll event (sauf si en changeant d'enregistrement, il y a validation de l'enregistrement précédent bien sur )

    puis qu'il s'agit utilisation de SGBD , mais laquelle ?

    La plupart permettent de poster des Events
    pare exemple pour Firebird/Interbase
    Qu'il suffit de rajouter a un TRIGGER AFTER INSERT/UPDATE/DELETE
    dans le programme , rajouter un IBEventAlerter ou équivalent (par exemple UIBEvent) et il y a 'auto surveillance de la BDD'
    ce dernier contient un événement onEventAlert (OnEvent pour UIB) ensuite ce n'est plus que du codage :
    sauvegarde d'un bookmark
    Rechargement de l'ensemble des données (Active False puis True) de la table si elle n'est pas en Edit
    repositionnement du user , avec test d'existence du Bookmark (en cas de delete)
    Bon , tout cela n'est que de la théorie , bien que testé une fois dans un environnement multi-user avec succès, je ne l'ai jamais vu en exploitation
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Points : 64
    Points
    64
    Par défaut
    J'utilise Microsoft Access et ma BD est au format accdb.
    Il me semble que Access est plutôt lent en terme de rafraichissement.

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Fandyz Voir le message
    J'utilise Microsoft Access et ma BD est au format accdb.
    Il me semble que Access est plutôt lent en terme de rafraichissement.
    Salut.

    Lent, lent cela dépend de tellement de chose...

    Pour ton soucis tu peux aussi gérer un rafraichissement dans un timer un peux rush mais fonctionnel. Au pire tu false ton timer au moment où l'user fait une opération d'ajout/modif/supp, car normalement si tu as bien fais tes liens avec tes fonctions de suppression/ajout/modif à chacune de ces actions ton dataset devrait de lui-même ce mettre a jour et afficher les modifs qui sont faite en réseau.

    En réalité le seul cas que tu as à traiter c'est quand l'utilisateur est inactif devant ton soft, c'est là que le timer joue son rôle.

    bye.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Fandyz Voir le message
    J'utilise Microsoft Access et ma BD est au format accdb.
    Je passe, Access n'étant pas ma tasse de thé.
    Dans une utilisation multi-postes , je ne crois pas que cela soit un bon choix
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Premièrement un Locate ne déclenche qu'un Scroll event (sauf si en changeant d'enregistrement, il y a validation de l'enregistrement précédent bien sur )
    Oups, oui je voulais dire BeforeScroll et AfterScroll, ... les variantes Post peuvent arrivés mais c'est uniquement si le DataSet était en dsEdit ou dsBrowse
    Et encore, on avait évoqué que cela fait un Cancel et non un Post contrairement à ce qui dit l'aide

    @Fandyz, AaaH, ta première explication n'évoquait aucunement l'accès concurrentiel, si en plus il faut deviner le contexte !

    C'est fréquemment évoqué comme sujet Mise à jour en temps réel dbgrid

    Ta DB ni ta couche d'accès de ne fourni d'Events comme IBEvents ou ServiceBroker

    Donc soit tu fais la méthode bourrin avec le TTimer donc sollicitation inutile de la DB
    Soit tu fais ton propre système TCP IP qui notifie un Serveur d'une modif celui-ci la dispatchant aux abonnés
    Soit tu fais ton propre sydtème UDP genre multicast pour notifier les "abonnés"

    Soit tu gère le réconciliation au moment du Post : Environnements multi-utilisateurs : Réconciliation des modifications effectuées par plusieurs utilisateurs
    Ces principes sont applicables aussi à Delphi, ADO et DbExpress fourni des assistants pour la Reconciliation






    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

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Points : 64
    Points
    64
    Par défaut
    Salut!
    J'ai été déconnecté un bout de temps.
    Merci pour vos apports. Je vais essayer tout ça pour voir ce que ça donne.

    J'ai tout de même essayé entre temps de trouver un palliatif plutôt simple mais tout aussi fastidieux : j'ouvre le ADOTable avant chaque accès (Append, Edit, Locate, ...) et je le ferme après.
    Ainsi, il as les données à jour au moment où j'y accède.

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

Discussions similaires

  1. recherche dans un ensemble de données en PHP
    Par belaggoun2000 dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2010, 22h06
  2. [MySQL] Problème avec les accent lors d'une recherche dans ma base de donnée
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2009, 14h08
  3. recherche dans une plage de données avec filtre
    Par depi67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/10/2008, 14h17

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