Bonjour
Voila quelques temps que je suis en train de reconstruire ma base de développement et d'outils en fmx.
Coté BD, j'ai choisi Firedac puisque c'est visiblement ce qui est préconisé à l'heure actuelle.
Je viens de D2007/BDE/Paradox/TTable/DBGrid, qui bien qu'obsolète fonctionne encore à merveille même sur des volumes conséquents à mon échelle (45 users / tables avec > 5 Millions de lignes), avec des désavantages bien sur mais c'est pas le sujet, et je suis en mode TSE ce qui arrange aussi les choses vu que la base n'est pas client/Serveur.
Très bonne idée d'automatiser le mappage TControl <-> DB avec LiveBinding - même si un peu lourd - afin d'éviter de dédoubler les TControls orientés données ou pas. (TEdit/TDBEdit, TCheckBox/TDBCheckbox etc...).
MAIS car bien sur il y a un mais... ce mappage est très bien lorsque les données à mapper sont légères (comme les TControl pour un enregistrement unique style TEdit par exemple).
Etant donné que j'ai choisi FMX, je suis bien obligé d'abandonner la TDBGrid pour la TStringGrid.
Cela m'a vraiment intrigué. Bizarre ce changement car ce sont 2 composants très différents l'un de l'autre dans la philosophie.
Un contient des données, l'autre non. Et cela est confirmé, c'est un peu la catastrophe à moins que vous m'éclairiez (et j'en ai besoin) !
D'un coté, avec mon vieux D2007/BDE/TDBGrid, j'affiche instantanément 10000 lignes dans une TDBGrid, et je me positionne ou je veux instantanément, (bien que je suis conscient que seuls les datas réellement affichées sont stockées et chargées dans cette zone tampons pour affichage au fur et à mesure par une mécanique de 'paging')
De l'autre... Le LiveBinding sur la TStringGrid... très lente (forcément car chargement des 10000 lignes dans la grille!), ca pompe de la mémoire, ca pompe sur le CPU. (bien qu'objectivement assez rapide pour le boulot que ca fait mais c'est pas le bon boulot!).
Pas de paging prévu ? c'est pourtant plus qu'à la mode avec les mobiles et les défilements d'informations (java/android est blindé de callback dans ce but)!
Et je ne parle pas du fetching par bloc, ce n'est pas la même chose. Car l'accès aux données d'une requête en FetchAll est rapide elle, donc ça ne résoudra rien, j'ai essayé.
De plus j'ai bien remarqué qu'il faut abandonner le TFDTable pour un TFDQuery sinon les perfs sont en chutes libres, ca m'arrange pas car il était très pratique de créer les Fields manuellement dans le composant Table afin d'optimiser l'accès plutôt que par un FieldByName qui effectue une recherche dans les champs (enfin ca, c'est peut être optimisé j'ai pas vérifié).
A moins d'avoir loupé une étape, et je l'espère car je suis un peu désespéré, est-ce qu'une solution existe pour afficher une grille de 10000 lignes venant d'une table de manière instantanée (car seule une 50 lignes maxi sont en général visibles en même temps sur l'écran) dans une grille sous FMX ???
Quelle régression si ce n'est pas le cas... ou alors il faut qu'il y ait une vraie raison technique pour ne pas l'avoir fait, laquelle ?
J'ai pas mal cherché, j'avais un petit espoir avec TMS, mais non, leur Grid repose sur le même système.
Merci pour vos commentaires
Partager