Bonjour,
Le 9 janv. 07 à 15:55, Michel LO a écrit :
Pour lire le record set :
while not rs.eof
toto=rs.IdxField(1).StringValue // voir suite explications
wend
Evidemment, à la palce de toto, il faut mettre l'endroit où on
rage, ce peut être un listbox, un tableau vetoriel, etc...
le 1 du IdxField est le numéro de rang du champ dans le recordset,
le premier champ est 1 (et pas 0)
A la place de stringvalue, tu peux mettre la propriété que tu
veux : le retour de IdxField est une classe databaseField qui peut
avoir comme attribut beaucoup de choses comme BooleanValue,
Datevalue, double value, value, stringvalue etc...
Sur postgresql, je ne sais pas, mais sur RealSQLDatabase, le moteur
de la db se fout totalement ce qui est défini dans le champ (on
parle en fait de liteSQL), et c'est la propriété qui défini
l'interprétation du champ de ce qui est rangé dans la db
Un petit ajout par rapport au code de Michel :
while not rs.eof
toto=rs.IdxField(1).StringValue
rs.moveNext()
wend
il faut utiliser rs.moveNext(), pour déplacer le curseur dans le
recordSet.
Pour quelqu'un qui vient du monde 4D, un recordSet correspond a une
sélection courante et le curseur correspond a l'enregistrement courant.
C'est bien sur une vue simplifiée car tu n'as pas de verrouillage
d'enregistrement comme dans 4D et tu as accès a la puissance des
requêtes SQL.
Pour faire propre on peut a la suite de la boucle appeler rs.close()
pour libérer la mémoire.
Pour résumer, pour lire des données dans une base de donnée, on a une
structure de code suivant :
query = "" // On renseigne la requête.
rectSet = base.SQLSelect(query) // On exécute la requête.
if rectSet <> Nil then
While Not rectSet.eof // tant que l'on est pas a la fin du
recordSet
// Ici on récupère les données de l'enregistrement sur lequel
pointe le curseur
rectSet.MoveNext() // On déplace le curseur sur
l'enregistrement suivant
Wend
rectSet.Close() // On ferme le recorSet
end if
Une autre petite chose :
à la place de
toto=rs.IdxField(1).StringValue
il est possible de faire référence a un champ par son nom :
toto = rs.field("NomDuChamp").stringValue
Cela est plus pratique a la lecture mais moins rapide a l'exécution.
Dans le cas de quelques milliers d'enregistrement, cela n'est pas
gênant par contre il peut falloir en tenir compte sur des recordSet
beaucoup plus important.
Cordialement,
Olivier Corouge
---
Olivier Corouge
Support Technique en Français
olivier at realsoftware dot fr - http://www.realsoftware.fr
|