Sunteți pe pagina 1din 2

POWER

BUILDER
FERSYSTEM

USO DE CURSORES
Los cursores nos permiten extraer información de servidor de base de datos

// 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;
ROGRAMACION
AMACION

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
PROGR

para poder mostrar información 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 – www.fersystem.tk
For: Juan Manuel Fernández Novoa
POWER
BUILDER
FERSYSTEM
Por ejemplo nos podemos desplazar avanzado con un bucle nos lleve a la poción 5
Para ello tengo cerrar el cursor y abrir para que inicie desde el inicio se desplace de forma
exacta
AVANZAR
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 poción estoy indicar que retroceda restando un
registro mediante un bucle debido que se no se puede retroceder de forma automática
ROGRAMACION
AMACION

int a // para iniciar el bucle


if avan>1 then Avan guarda la posion por
avan=avan+(-1) //poción de registro ejemplo si se quedo en la
end if posion 10 tendriamos que
close mipreguntas; // cerrar el cursor para restar 1 , para que la poción sea
open mipreguntas; // iniciar desde el principio 9 e iniciar un bucle que corra
//messagebox("",avan) desde el 1 hasta 9
// bucle que retrocede por que Avan se le descontó 1 y con esto simularíamos que se
PROGR

for a=1 to avan retrocedió de


FETCH NEXT mipreguntas poción 10
INTO :pre.text,:p1.text,:p2.text,:p3.text,:p4.text,:p5.text; a
next poción 9

AL INICIO

Si solo quiero ir al inicio es mas fácil 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 – www.fersystem.tk
For: Juan Manuel Fernández Novoa

S-ar putea să vă placă și