POWER BUILDER
FERSYSTEM
USO DE CURSORES Los cursores nos permiten extraer información 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 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;
[email protected] – For: Juan Manuel Fernández Novoa
www.fersystem.tk
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
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 poción estoy indicar que retroceda restando un registro mediante un bucle debido que se no se puede retroceder de forma automática
int a // para iniciar el bucle if avan>1 then avan=avan+(-1) //poción 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 poción sea 9 e iniciar un bucle que corra desde el 1 hasta 9 y con esto simularíamos que se retrocedió de poción 10 a 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)
[email protected] – For: Juan Manuel Fernández Novoa
www.fersystem.tk