realbasic-nug.fr
[Top] [All Lists]

Re: postgresql

To: REALbasic NUG French <realbasic-nug dot fr at lists dot realsoftware dot com>
Subject: Re: postgresql
From: olivier corouge <olivier at realsoftware dot fr>
Date: Tue, 9 Jan 2007 17:22:35 +0100
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug dot fr at lists dot realsoftware dot com
References: <FA8559B7-CD58-42A0-9263-354F673206C4 at mac dot com> <5CBC8E68-6629-4BD2-A947-404B869791EE at albireo dot biz>
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






<Prev in Thread] Current Thread [Next in Thread>