browse del resultado de un stored procedure

Consultas, trucos, consejos. Todo sobre Clarion en todas sus versiones
Responder
weezero
Novato
Mensajes: 31
Registrado: Lun Feb 14, 2011 1:43 pm
Contactar:

browse del resultado de un stored procedure

Mensaje por weezero » Mar Feb 15, 2011 12:09 pm

Hola, como estan?
Estoy usando calrion 6.3 con firebird en donde tengo varios Stored Procedures, lo que quiero hacer es un browse de un resultado de uno de estos sp, es decir, tratar los registros que me devulve el sp como una tabla para el browse. El resultado lo guardo en una variable local? la variable local es de tipo queue?
muchas gracias


Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por Mauricio » Mar Feb 15, 2011 12:16 pm

El sp devuelve una tabla? En ese caso te conviene usar la teoría de la tabla estúpida (si no sabés de qué se trata te explico en otra respuesta).
De hecho, siempre te conviene usar la tabla para ejecutar el sp.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

weezero
Novato
Mensajes: 31
Registrado: Lun Feb 14, 2011 1:43 pm
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por weezero » Mar Feb 15, 2011 3:52 pm

tengo entendido mas o menos de que se trata, pero si podes explicame un poco mas por favor, a ver si me queda mas claro. muchas gracias

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por Mauricio » Mar Feb 15, 2011 5:08 pm

Hago un resumen: primero, definís una tabla en tu diccionario, llamémosla SQL_FILE. Esa tabla tendrá 20 o 30 campos, todos cstring(1001). El tamaño depende del tamaño de los campos con los vos trabajás, es decir que si tenés 2000 caracteres para el nombre de un cliente, bueno, al menos ese debería ser el tamaño de los campos de la SQL_FILE ya que de lo contrario te va a truncar el resultado.

Con las versiones anteriores de Clarion la tabla debía existir en el motor pero a partir del 6.1 hay un driver string llamado TurboSQL que hace que no sea necesario. No es algo muy importante en realidad, de cualquier forma funcionará.

Lo que sí es importante es que esta tabla NUNCA tendrá registros. Eso significa que jamás hay que hacer un add(SQL_FILE) o un Access:SQL_File.Insert(). La tabla actúa como un buffer de memoria y nada más. Tampoco es necesario que tenga índices.

Bien, vamos a suponer ahora que la tabla tiene 20 campos, llamados C1, C2, ..., C20. Y queremos saber cuáles son los clientes que viven en la ciudad de Rosario.

Entonces:
1) Abrimos la tabla
2) Le seteamos la consulta
3) Recorremos el resultado.
En otras palabras

Código: Seleccionar todo

OPEN(SQL_FILE)
SQL_FILE{Prop:SQL} = 'SELECT CODIGO, NOMBRE FROM CLIENTES WHERE CIUDAD = ''ROSARIO'''
LOOP
    NEXT(SQL_FILE)
    IF ErrorCode()
       BREAK
    END !IF
    Message('Código: ' & SQF:C1 & ' Nombre: ' & SQF:C2)
END !LOOP
CLOSE(SQL_FILE)
Nota 1: no estoy chequeando por errores en la apertura de la tabla ni en el prop:SQL, sería ideal hacerlo.
Nota 2: SQF:C1 es el primer campo de la tabla y SQF:C2 el segundo.
Nota 3: esto no es por la tabla, es propio de SQL, es conveniente evitar hacer SELECT *.

Sí, en cambio, tenemos un sp que retoma una tabla, hacemos:
SQLFILE{Prop:SQL} = 'call MiProcedimiento()'
y el loop de antes.

Más o menos es así. Hace unos años había posteado un ejemplo de un sencillo editor SQL que podías usar como ejemplo, debe estar dando vueltas por algún lado, si con esta magnífica :D explicación no te sale, lo buscamos y lo posteamos aquí (si no me equivoco, Luiz Marin lo debe tener en algún lado).

Avisá si seguís con problemas.

Saludos.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

weezero
Novato
Mensajes: 31
Registrado: Lun Feb 14, 2011 1:43 pm
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por weezero » Mar Feb 15, 2011 5:21 pm

sos un capo mauricio! ningun problema, excelente la explicacion! muchas gracias

Pedro
Mensajes: 7
Registrado: Lun Feb 07, 2011 8:32 pm
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por Pedro » Mié Feb 16, 2011 6:37 pm

Joya la explicacion.
Una pregunta mas para cerrar el tema,
En que Embebed se colocaria este codigo, en el Open del window, en el init del browse??

weezero
Novato
Mensajes: 31
Registrado: Lun Feb 14, 2011 1:43 pm
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por weezero » Mié Feb 16, 2011 6:56 pm

en mi caso lo puse en un boton, y lo que relacionas con el browse en la queue..

weezero
Novato
Mensajes: 31
Registrado: Lun Feb 14, 2011 1:43 pm
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por weezero » Mié Feb 16, 2011 6:58 pm

es la queue quise decir :?

Avatar de Usuario
DanielRuzo
Al nivel de RZ
Mensajes: 124
Registrado: Dom Feb 06, 2011 7:45 pm
Ubicación: Uruguay
Contactar:

Re: browse del resultado de un stored procedure

Mensaje por DanielRuzo » Mié Feb 16, 2011 9:43 pm

Agrego que para versiones anteriores a 6.3 (donde no existe lo del TurboSQL) tampoco es necesario que la tabla exista realmente en la tabla.

1. Se carga el FullPathName de la tabla con el nombre de una tabla real en el motor
2. Se cargan todas las columnas con el nombre de una columna real en la tabla utilizada en el punto 1.

Esto funciona porque Clarion sólo verifica que la tabla exista en el motor y que las columnas existan en la tabla.

En este caso, no hay problemas con que la tabla real tenga datos: no se van a mezclar con los obtenidos en las consultas.
¡Saludos!

Daniel Ruzo
www.amazingGUI.com

Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados