browse del resultado de un stored procedure
-
- Novato
- Mensajes: 31
- Registrado: Lun Feb 14, 2011 1:43 pm
- Contactar:
browse del resultado de un stored procedure
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
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
- 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
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.
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
www.tdcsoftware.com y www.clarioneros.com/blog
-
- Novato
- Mensajes: 31
- Registrado: Lun Feb 14, 2011 1:43 pm
- Contactar:
Re: browse del resultado de un stored procedure
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
- 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
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
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 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.
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 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 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
www.tdcsoftware.com y www.clarioneros.com/blog
-
- Novato
- Mensajes: 31
- Registrado: Lun Feb 14, 2011 1:43 pm
- Contactar:
Re: browse del resultado de un stored procedure
sos un capo mauricio! ningun problema, excelente la explicacion! muchas gracias
-
- Mensajes: 7
- Registrado: Lun Feb 07, 2011 8:32 pm
- Contactar:
Re: browse del resultado de un stored procedure
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??
Una pregunta mas para cerrar el tema,
En que Embebed se colocaria este codigo, en el Open del window, en el init del browse??
-
- Novato
- Mensajes: 31
- Registrado: Lun Feb 14, 2011 1:43 pm
- Contactar:
Re: browse del resultado de un stored procedure
en mi caso lo puse en un boton, y lo que relacionas con el browse en la queue..
-
- Novato
- Mensajes: 31
- Registrado: Lun Feb 14, 2011 1:43 pm
- Contactar:
Re: browse del resultado de un stored procedure
es la queue quise decir
- 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
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.
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
Daniel Ruzo
www.amazingGUI.com
Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados