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

Lazarus Pascal Discussion :

[0.9.29] Fetch partiel avec Dbgrid ?


Sujet :

Lazarus Pascal

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.29] Fetch partiel avec Dbgrid ?
    Bonjour,

    Est-il possible de faire une espèce de "Fetch partiel" avec une DbGrid ?

    J'ai une table mySQL (distante) importante aussi bien en nombre d'enregistrements qu'en longueur de chaque enregistrement... Dans 90% des cas, l'utilisateur a besoin de la (des) dernière(s) modification(s) sur les enregistrements... (un peu comme le forum).

    Si j'utilise une chaine Dataset --> DbGrid habituelle, le temps de latence entre l'émission de la requête et l'affichage dans la dbGrid est très important... car je ne peux pas me limiter à une portion de la table (il reste les 10% qui veulent engager des opérations sur plus d'enregistrements). J'ai cherché une méthode pour dispenser les 90% du temps de latence sans évidemment pénaliser les 10% qui ont besoin d'une table complète (et pour qui évidemment il faudra patienter dans tous les cas).

    Pour l'instant, mon meilleur (et seul) résultat est l'utilisation de 2 (z)Query et 2 StringGrids (dont une invisible)... La première affiche quasi-instantanément les 100 premiers enregistrements. La seconde charge le "reste" en tâche de fond (multi-thread). Tant que le travail de la seconde n'est pas terminé, les filtres et tris sont bloqués sur la première StringGrid. "Dès" que la seconde est remplie, elle complète la première et les filtres et tris sont débloqués... C'est lourd au niveau programmation (pas tellement le thread) mais les StringGrids à la place des dbGrids ... mais je n'ai trouvé que cette méthode...

    ...car j'ai essayé initialement la même méthode avec 2 dbGrids (donc 2 datasets) superposables. L'idée était la même : 1ère dbGrid immédiatement active et visible tant que 2nde pas "complètement" remplie... puis 2nde visible et 1ère invisible et désactivée après resynchro des sélections... Mais pour une raison que je crois comprendre maintenant, la 2ème chaine dataset-->Dbgrid (qui elle charge toute la table) bloque l'affichage de la première (ou toute autre activité)... J'obtiens finalement la même "ergonomie" (ie non pseudo-parallèle) que si j'utilise classiquement un seul dataset-->dbgrid. En échec, j'ai donc laissé tomber l'histoire des 2 dbgrids avec chacune son propre dataset.... et testé avec 2 StringGrids pour identifier le problème. En réalité, il n'y a pas de "problème" sauf conceptuel de ma part et je doute maintenant que cela puisse fonctionner ainsi (ie avec les 2 dbGrids) : avec la chaine zQuery-->DbGrid, l'utilisation des threads n'est pas adaptée du fait que le zQuery reste "en prise constante" (et que donc son travail ne se termine "jamais") sur la dbGrid et sur la table... donc il reste en quelque sorte "définitivement parallèle" ... alors que dans le cas zQuery+StringGrid, le zQuery effectue son travail de chargement puis se ferme... comme le thread qui a ainsi fait (parallèlement) son travail de mise à jour... On revient alors à la "séquence principale"...

    Mais je me disais que je passais peut-être quand même à côté de quelque chose. En dehors du multi-threading, serait-il possible d'avoir le même "rendu" avec une seule dbGrid ? Sans trop y croire toutefois : il faut 2 requêtes différenciées pour obtenir 2 résultats du serveur... Un immédiat et l'autre qui nécessitera plus de temps... Et une dbGrid ne peut-être associée à ma connaissance qu'à un seul dataset de manière active...

    Petite précision importante quand même : mes dbGrids sont systématiquement en 'ReadOnly', remplies par un DataSet (zQueryDbGrid) réservé à cet effet; Les Insert, Update, Duplicate, Delete et même SELECT LIMIT1 se font par un autre Dataset (zQuerySUID).

    Merci.
    Cordialement. Gilles
    Dernière modification par Invité ; 04/12/2010 à 12h40. Motif: Ajout de précisions et amélioration de la cogitation

Discussions similaires

  1. Modifier des donnees avec DBGrid ?
    Par msuire dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/12/2006, 00h58
  2. [SQL2K] jointure partielle avec un max
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/10/2006, 10h14
  3. [XSLT]copie partielle avec condition sur les axes
    Par MasterOfChakhaL dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 13/10/2006, 19h15
  4. Gestion clavier dans une form avec dbgrid
    Par albedo dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/04/2006, 15h42
  5. Problème avec Dbgrid
    Par RBIK dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/06/2004, 14h31

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