FoxPro/Visual FoxPro - Execute Procedure (Utilizando SQLEXEC)

 
Vista:

Execute Procedure (Utilizando SQLEXEC)

Publicado por Nancy (2 intervenciones) el 16/01/2012 17:37:10
Hola amigos que tal.

Tengo un problema, estoy ejecutando una función (a través de ODBC) que se encuentra en una base de datos de Firebird, el código es el siguiente:


* Ejecuta el procedimiento para obtener los cargos de los clientes
* Nota: Pn_conexion ya ejecutó la conexión previamente

sqlselect = "Execute Procedure Get_Cargos_CC (?Lf_Fecha_Corte,'P',1,'N','N','N')"
Pn_resultado = SQLEXEC(Pn_conexion,sqlselect,'ctcargos_clientes')
IF Pn_resultado <1
SQLDISCONNECT(Pn_conexion)
MESSAGEBOX('Ocurrió un error. Favor de verificar.',0+16,Gc_NomAplicacion)
RETURN .F.
ENDIF


El problema es que al momento de que me regresa los registros, los cuales son cerca de 100, solo me devuelve el primero ¿Me falta agregarle algo al código?

Nota: La función está probada y funciona correctamente en el Firebird, el problema parece ser el código en Visual Fox 9.

Les agradecería si alguien conoce la solución, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Execute Procedure (Utilizando SQLEXEC)

Publicado por xx (378 intervenciones) el 17/01/2012 03:58:39
A simple vista el problema aparenta estar en el procedimiento, lastimosamente no lo haz pegado, pero te comento que tengo procedimientos similares a este pero en mysql y funcionan sin problemas es decir me traen varios registros sin ningun problema, te recomendaria pegar el procedimiento o por lo menos revisar la clausula where o limit que deberia tener tu procedimiento.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Execute Procedure (Utilizando SQLEXEC)

Publicado por Nancy (2 intervenciones) el 17/01/2012 17:56:21
Hola que tal, muchas gracias por contestar.

El código no lo he puesto porque no lo vi necesario, es parte de un software administrativo donde funciona perfectamente al momento de crear algunos reportes, también lo he probado directamente en el manejador Firebird y me despliega de manera correcta los registros, el problema es cuando lo mando llamar en Visual Fox que solo me arroja 1 registro de 100.

Por más que busco en Internet y leo manuales no encuentro la solución.

Cuando ejecuto alguna sentencia "select" me devuelve sin problema los registros solicitados, cuando agrego ó elimino registros todo funciona bien, el problema es al momento de ejecutar un procedimiento (el mencionado anteriormente) que no obtengo la información.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Execute Procedure (Utilizando SQLEXEC)

Publicado por xx (378 intervenciones) el 18/01/2012 16:50:46
Suponiendo que el procedimiento este correcto, quizas debas evaluar los parametros, porque me supongo no deben ser los mismos que le pasas desde VFP que cuando lo ejecutas desde el shell de firebird!!!.

Como te dije utilizando mysql y vfp hago lo mismo y sin problemas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Execute Procedure (Utilizando SQLEXEC)

Publicado por xx (378 intervenciones) el 18/01/2012 16:59:32
*//
*// IMPRESION DE COMPROBANTES
*//
_fec1 =DTOS(THISFORM.txtFECHA1.Value) &&fecha a string
_fec2 =DTOS(THISFORM.txtFECHA2.Value)
_nch1 =ALLTRIM(ThisForm.txtCHAPA1.Value)
_nch2 =ALLTRIM(ThisForm.txtCHAPA2.Value)
_sec1 =ALLTRIM(STR(ThisForm.txtSECCION1.Value,11,0))
_sec2 =ALLTRIM(STR(ThisForm.txtSECCION2.Value,11,0))
_cli1 =ALLTRIM(STR(ThisForm.txtCLIENTE1.Value,11,0))
_cli2 =ALLTRIM(STR(ThisForm.txtCLIENTE2.Value,11,0))
_est1 =ALLTRIM(STR(ThisForm.txtESTACION1.Value,4,0))
_est2 =ALLTRIM(STR(ThisForm.txtESTACION2.Value,4,0))
_prd1 =ALLTRIM(STR(ThisForm.txtPRODUCTO1.Value,11,0))
_prd2 =ALLTRIM(STR(ThisForm.txtPRODUCTO2.Value,11,0))
_salida =STR(THISFORM.cboSALIDA.LISTINDEX,1,0)


*SQLSETPROP( _HCSQL,"DispWarnings", .T.) &&decomentar esto para depurar
IF THISFORM.xmode=="1"
_title =[DETALLE DE VENTAS]
_cSQL =[CALL gventa01(?_prd1,?_prd2,?_fec1,?_fec2,?_nch1,?_nch2,?_sec1,?_sec2,?_cli1,?_cli2,?_est1,?_est2);]
ELSE
_title =[DETALLE DE ORDENES/VALES]
_cSQL =[CALL gventa02(?_prd1,?_prd2,?_fec1,?_fec2,?_nch1,?_nch2,?_sec1,?_sec2,?_cli1,?_cli2,?_est1,?_est2);]
ENDIF
IF SQLEXEC( _HCSQL, _cSQL, [AUXIL1] )!=1
MESSAGEBOX( [FAIL]+_cSQL, 16, [ERROR] )
THISFORM.Release()
RETURN
ENDIF


Esto funciona en mysql desde vfp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Execute Procedure (Utilizando SQLEXEC)

Publicado por Luis (1 intervención) el 21/10/2017 05:43:40
Bueno soy nuevo programando con visual fox pro y mysql,, quisiera referencias en donde puedo encontrar ejemplos para programar con mysql
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

procedure para grabar un registro en la basa de datos sqlserver 2008

Publicado por PENNELOPPE (3 intervenciones) el 27/01/2012 20:16:17
hola amigo necesito una orientacion sobre el manejo de base de datos en sqlserver 2008 en visual foxpro 9 yo ya realize la base de datos en sql server 2008 y en visual fox pro 9 realizo el formulario en donde me muestra la b}ase de datos y me lo ealiza bien pero tengo problema cuando estoy insertando un registro que cuando entro en sql server en la base datos no me refleja el registro insertado pero cuando modifico y elimino si
no se si puedes pasrme una instruccion complenta para grabar registro y ver cual es la falla pues compararla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Execute Procedure (Utilizando SQLEXEC)

Publicado por Antonio Z. (1 intervención) el 17/11/2022 18:53:05
Aunque la consulta es de hace muchos años. Voy a poner la que creo que es la respuesta.

Los valores a pasar a la base de datos tienen que ir todos con un signo ? delante, con lo cual sería así:
sqlselect = "Execute Procedure Get_Cargos_CC (?Lf_Fecha_Corte,?'P',?1,?'N',?'N',?'N')"

En el procedimiento almacenado en las entradas debes de tener todas las variables creadas y asignarlas con : delante de la variable algo como:

insert into tabla (campo1,campo2) values (:variable1,:variable2);

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar