Bonjour,
j'ai quelques "incompréhensions" avec les connecteurs sur une base PostgreSQL. Mon serveur est hébergé (Debian Squeeze amd64 + PostgreSQL 9.1.5) et j'ai son double à domicile.
Avec Lazarus 1.1-37902 fpc-2.6.1-20120709, j'ai constaté ceci :
Zeos 7 SVN d'hier :
- parcours d'une table de 10000 lignes presqu'une fois plus lent qu'avec les connecteurs natifs.
- le libraryLocation est une plaisanterie douteuse : signalée comme bug -et j'en suis sûr- et retoquée dans le forum officiel par des "chez moi cela marche". Cela ressemble à un autre forum tout aussi officiel . Evidemment si sur Windows on installe un pgSQL qui modifie le path d'environnement de la station ou si le client pgSQL est installé sur le poste Linux, cela fonctionne ... mais pas grâce à la libraryLocation. Enfin bref, le bug subsiste et reste facilement contournable pour ceux qui ont travaillé avec la Zeos 6.6 qui ne disposait pas de cette option ou ceux qui utilisent les connecteurs natifs. Mais ce n'est pas très "sérieux" d'où ma qualification de plaisanterie.
- le FetchRow des ZQuery a un comportement incompréhensible... comme s'il ne servait à rien.
En natif :
Beaucoup de bonnes surprises. Linux, Windows : RAS
- Donc une fois plus rapide même à l'ouverture de la connexion.
- L'équivalent de ZQuery.FetchRow semble être SQLquery.PacketRecords... Je n'arrive pas à les utiliser. Et le doute s'installe : je ne suis pas sûr que cela serve à cela. En tous cas, je n'ai pas réussi à les mettre en oeuvre pour obtenir le résultat escompté.
Donc, peut-être le FetchRow ne sert-il pas à ce que je crois ? Il me semblait qu'il fonctionnait ainsi : supposons-le réglé à 100 sur un total de 1000 lignes à charger. Le DataSet charge les 100 premières lignes en tenant compte des conditions (order by, ...), charge le DataSource et continue (par paquets de 100) ce qui fait que le DBgrid est actualisé la première fois au bout des 100 premières lignes et non à la fin du chargement des 1000 lignes. Est-ce cela ?
J'ai l'habitude de libmySQL.dll... qui justement ne permet pas cette opération de FetchRow . J'ai donc développé pour mySQL, une méthode threadée sans DataSource : j'utilise une chaîne Connection -> Dataset (2 lectures dont une threadée) -> dbStringGrid perso dont j'aimerais me débarrasser avec pgSQL car à priori, libpq le permet... La méthode que j'ai développée pour mySQL (que je quitte) fonctionne avec pgSQL mais si le code "natif" le permet, j'aimerais tout autant l'utiliser... et me rapprocher d'une programmation plus classique.
Donc... je cherche de la doc et une méthode aussi bien pour PQconnection que ZConnection... sachant que je n'estime pas exactement où est le problème, s'il y a problème. Peut-être vient-il du DataSource et dans ce cas, le couple Connecteur-DataSet fait il correctement son travail... si le travail est prévu comme je l'ai décrit. Mais avant d'explorer plus avant, est-ce le cas ?
Cordialement. Gilles
Partager