Procedimientos Almacenados

158 views
Skip to first unread message

Luis Salazar

unread,
Aug 15, 2025, 5:25:20 PMAug 15
to publice...@googlegroups.com
He definido un procedimiento Almacenado en MySql 
y lo ejecuto desde VisualFoxpro con el Siguiente codigo :
LOCAL loConn, lcSQL, lnPeriodo
lnPeriodo = ALLTRIM(STR(pPeriodo_Cont,4))  && ejemplo de periodo
*--
lHandler = pconexion_rem
    lcSQL = "CALL totalizar_auxiliares_st(" + lnPeriodo + ")"
    SQLEXEC(lHandler, lcSQL)
    ** SQLDISCONNECT(pconexion_rem)
*--\\
RETURN

 Ademas utilizo la Libreria FoxyDb 
\Entonces al RETORNAR y al ejecutar un select  de  me da Error 
al parecer pierde el Handler    ( EL SELECT funcionaba normalmente )

Alguna idea o alguien ha resuelto el problema ,,  Gracias de antemano 

Zarlu

unread,
Aug 15, 2025, 6:52:38 PMAug 15
to Comunidad de Visual Foxpro en Español
Buenas tardes Luis!

Observa que lo mandes entre comillas
lcDato="fun%"
lcSQL = [CALL pruebaproc("]+lcDato+[")]
? lcSQL

SQL=SQLEXEC(CcontrolConect, lcSQL,"almacenado")
? SQL
Browse

Suerte
zarlu
Chetumal, Quintana Roo, México

Victor Espina

unread,
Aug 16, 2025, 10:30:26 PMAug 16
to Comunidad de Visual Foxpro en Español
Concatenar valores en un query se considera una muy mala practica, especialmente si esos valores vienen de un input de usuario. En lugar de hacer:


lcSQL = "CALL totalizar_auxiliares_st(" + lnPeriodo + ")"

haz esto:

lcSQL = "CALL totalizar_auxiliares_st(?lnPeriodo)"



Saludos

Victor Espina

Elides Paredes

unread,
Aug 17, 2025, 1:02:49 PMAug 17
to Comunidad de Visual Foxpro en Español
Amigos estoy usando cada vez mas la inteligencia artificial y es como si le consultara a Luis Maria, VIctor, zarlu, etc. todos esos genios de este foro. Y las respuestas no siempre son perfectas, pero de verdad se siente como hablar con esos genios juntos, antes de consultar aqui, que no dejo de hacerlo, les recomiendo usar GEMINI porque las respuestas son inmediatas y muy acertadas.

saludos a mis asistentes virtuales de inteligencia NATURAL.. JAJAJA. Pero, igualmente efectiva.

Elides Paredes
Barquisimeto Venezuela.

Elides Paredes

unread,
Aug 17, 2025, 1:04:21 PMAug 17
to Comunidad de Visual Foxpro en Español
Miren la respuesta a la pregunta.

El problema que estás enfrentando es que desconoces una tabla o un archivo de base de datos desde donde debes obtener la información. El error Alias '...' not found es el clásico error que Visual FoxPro (VFP) lanza cuando intentas acceder a un campo de una tabla que no está abierta o no es accesible en el área de trabajo actual.

La Causa del Error

El mensaje de error "Alias 'PTransacciones' not found" significa que cuando tu código intenta ejecutar una operación (como SQLINSERT o SQLEXEC), no puede encontrar una tabla o alias llamado PTransacciones en el entorno de trabajo de VFP.

Aunque tu código de SQLEXEC inserta datos en MySQL, VFP necesita tener la tabla PTransacciones abierta localmente para poder leer los datos que va a enviar.

La Solución

Para solucionar esto, debes asegurarte de que la tabla PTransacciones esté abierta y sea la tabla activa antes de ejecutar el SQLINSERT.

Aquí te muestro cómo debes estructurar tu código para asegurarte de que VFP pueda encontrar la tabla:

Fragmento de código
*-- Asegúrate de que la tabla 'PTransacciones' esté abierta en una de tus áreas de trabajo USE PTransacciones IN 0 ALIAS PTransacciones *-- Mueve el puntero a un registro válido si es necesario * GOTO TOP *-- Ahora ejecuta tu comando SQLINSERT SQLEXEC(lnHandler, "INSERT INTO tabla_mysql (campo1, campo2) VALUES (?, ?)", "PTransacciones.campo1", "PTransacciones.campo2") *-- * Cierra la tabla cuando hayas terminado USE IN PTransacciones *--\\

Explicación del Código

  1. USE PTransacciones IN 0 ALIAS PTransacciones: Esta es la línea más importante. Le dice a VFP que abra la tabla PTransacciones en la primera área de trabajo libre (IN 0) y le asigne el alias PTransacciones.

  2. SQLEXEC(..., "PTransacciones.campo1", ...): Al especificar el nombre completo del campo con el alias (PTransacciones.campo1), le indicas explícitamente a VFP de dónde debe tomar el valor para la inserción.

  3. USE IN PTransacciones: Una vez que la operación ha terminado, es una buena práctica cerrar la tabla para liberar los recursos.

Si ya tenías la tabla abierta, es posible que el error se deba a que no es el área de trabajo activa. En ese caso, puedes usar SELECT PTransacciones antes del SQLINSERT para asegurarte de que sea la tabla activa.

Espero que esto solucione tu problema. ¡Estaré aquí si necesitas algo más!


Luis Salazar

unread,
Aug 17, 2025, 11:53:07 PMAug 17
to publice...@googlegroups.com
NO Nada  he probado de todas de las formas posibles
no funciona 


--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/877d70bb-043a-4068-94e5-21987c108c36n%40googlegroups.com.

Zarlu

unread,
Aug 18, 2025, 9:02:59 AMAug 18
to Comunidad de Visual Foxpro en Español
Buenos días Luis!

Y una consulta simple si funciona?

lcSQL =  "Select * From latabla"
lcRespon=SQLEXEC(lHandler, lcSQL,"micursor")
?  lcRespon
Browse

Podrías mostrar el procedimiento almacenado?

Suerte
zarlu
Chetumal, Quintana Roo
Reply all
Reply to author
Forward
0 new messages