Bonjour,
j'ai encore quelques difficultés avec les Datamodules.
Sur mon DataModule (uSQLmodule), j'ai placé initialement 2 chaînes TFDConnection - TFDQuery (sans oublier TFDransaction et TFDGUIxWaitCursor), une pour une connexion SQLite:memory: et l'autre pour une mySQL classique.
Premier problème rencontré avec la chaîne SQLite : je veux pouvoir ouvrir 2 instances "simultanées" de la fenêtre fELV contenant un dbGrid qui fait appel au même connecteur SQLite. J'aurais dû y penser plus tôt mais un seul TFDQuery est insuffisant ou plus exactement est mal placé. En ShowModal, il n'y aurait pas de problème. Mais en Show cela coince net. Comme ma base SQLite est définie :memory:, je ne dois disposer que d'un seul connecteur pour toutes les Forms.
Alors compte tenu de la configuration, où faut-il placer les autres composants nécessaires, le TFDTransaction et le TFDGUIxWaitCursor ? Dans le DataModule ? Le DataSet et le DataSource vont dans fELV. Pour l'instant, je n'ai pas réussi à faire fonctionner simultanément et indépendamment les 2 instances de la Form fELV... mais j'ai remarqué que les copier/coller dans les DataModules sont euh... sensibles. Si je connaissais la bonne approche, cela m'éviterait de tester toutes les combinaisons... Aussi je sollicite vos avis.
Deuxième problème rencontré : j'ai pratiqué plus classiquement avec ma deuxième connexion. "Tout" est dans le DataModule sauf le dataSource et le dbGrid qui sont dans fELV, ... Seulement dans fELV, jamais l'IO de DataSouce ne me propose le SQLQuery placé dans uSQLmodule même après reconstruction. Evidemment le uSQLmodule figure dans les uses de fELV.
Troisième problème : Avec les connecteurs natifs de Lazarus, je réalise des requêtes d'Update ou d'Insert sur mes bases mySQL distantes dans des threads. La création des éléments nécessaires est intégrée dans le thread. Cela a l'avantage de fluidifier l'application. J'ai essayé de la même façon -donc sans poser un seul composant sur la Form et en les créant de manière dynamique- et systématiquement j'ai un plantage de l'application. Là, je suis très mal. En Lazarus seule une chaîne Connect->Trans->Query est threadable. Le DataSouce plante tout. Cela peut se comprendre. Mais ici je n'utilise pas non plus de DataSource. Reste la gestion de ce curieux TFDGUIxWaitCursor... Je crains que les composants FireDac ne soient trop sophistiqués pour permettre cette gymnastique étrange je l'entends bien...
Ce n'est peut-être pas très clair ?
Merci.
Partager