Está en la página 1de 2

POWER

BUILDER

FERSYSTEM

USO DE CURSORES
Los cursores nos permiten extraer informacin de servidor de base de datos

PROGR
ROGRAMACION
AMACION

// conetando servidor
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=encuesta;UID=estacion1;PWD=123456'"
connect;
dw_1.setTransobject(SQLCA)
dw_1.retrieve()
DECLARE mipregunta CURSOR FOR
SELECT pregunta FROM preguntas; //debemos indicar que campos mostrar
open mipregunta;
string pre1
FETCH mipregunta INTO :ccod , :pre1;

pre.text=pre1
cuando se utiliza un cursor hay declararlo y luego abrirlo y finalmente transferirlo a un
contendor como pueden ser cajas de texto ,etiquetas o una variable

para poder mostrar informacin debemos utilizar FETCH NEXT nos permite avanzar
de un registro a otro
DECLARE mipreguntas CURSOR FOR
SELECT pregunta,a1,a2,a3,a4,a5 FROM preguntas;
OPEN mipreguntas;
FETCH NEXT mipreguntas
INTO :pre.text, :p1.text, :p2.text, :p3.text, :p4.text, :p5.text;
Esto lo que hace es que empiece y se vaya al primer registro pero si deseamos el
segundo volver hacer un FETCH NEXT
DECLARE mipreguntas CURSOR FOR
SELECT pregunta,a1,a2,a3,a4,a5 FROM preguntas;
OPEN mipreguntas;
FETCH NEXT mipreguntas
INTO :pre.text, :p1.text, :p2.text, :p3.text, :p4.text, :p5.text;
FETCH NEXT mipreguntas
INTO :pre.text, :p1.text, :p2.text, :p3.text, :p4.text, :p5.text;
Fersystem_soft@hotmail.com

For: Juan Manuel Fernndez Novoa

www.fersystem.tk

POWER
BUILDER

FERSYSTEM

Por ejemplo nos podemos desplazar avanzado con un bucle nos lleve a la pocin 5
Para ello tengo cerrar el cursor y abrir para que inicie desde el inicio se desplace de forma
exacta
AVANZAR

PROGR
ROGRAMACION
AMACION

close mipreguntas;
open mipreguntas;
int a,t,ccon
ccon=5
for a=1 to ccon
FETCH NEXT mipreguntas
INTO :pre.text,:p1.text,:p2.text,:p3.text,:p4.text,:p5.text;
t=a
next
avan=t
RETOCEDER
cuando quiero retroceder debo saber en que pocin estoy indicar que retroceda restando un
registro mediante un bucle debido que se no se puede retroceder de forma automtica

int a // para iniciar el bucle


if avan>1 then
avan=avan+(-1) //pocin de registro
end if
close mipreguntas; // cerrar el cursor para
open mipreguntas; // iniciar desde el principio
//messagebox("",avan)
// bucle que retrocede por que Avan se le descont 1
for a=1 to avan
FETCH NEXT mipreguntas
INTO :pre.text,:p1.text,:p2.text,:p3.text,:p4.text,:p5.text;
next

Avan guarda la posion por


ejemplo si se quedo en la
posion 10 tendriamos que
restar 1 , para que la pocin sea
9 e iniciar un bucle que corra
desde el 1 hasta 9
y con esto simularamos que se
retrocedi de
pocin 10
a
pocin 9

AL INICIO

Si solo quiero ir al inicio es mas fcil tengo cerrar el Curso y volverlo a abrir

close mipreguntas;
open mipreguntas;
FETCH mipreguntas
INTO :pre.text,:p1.text,:p2.text,:p3.text,:p4.text,:p5.text;
Contar una posion usnado un cursor
DECLARE contar CURSOR FOR
SELECT count(pregunta) FROM preguntas; // consultamos cuantos registros hay
open contar;
integer ccon
//variable que recibir el total
fetch contar into :ccon; // transferencia del total de registros
totalp.text=string(ccon)

Fersystem_soft@hotmail.com

For: Juan Manuel Fernndez Novoa

www.fersystem.tk

También podría gustarte