In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Procedimientos almacenados con MySQL y TMySQLDataSource
Procedimientos almacenados con MySQL y TMySQLDataSource
Hola
¿Funcionan los procedimientos almacenados de MySQL con TMySQLDataSource? Solo consigo un desesperante mensaje.
Gracias.
¿Funcionan los procedimientos almacenados de MySQL con TMySQLDataSource? Solo consigo un desesperante mensaje.
Gracias.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
jasm, los procedimientos y funciones almacenados funcionan perfectamente tanto en MySQL como en MariaDB, hay dos modos principales para generarlos, el más adecuado es crearlos desde el cliente nativo de ambos RDBMS, el otro es desde Xailer con las clases TMySQLDataSource o TMariaDBDataSource (pueden ser generados desde algun administrador visual tambien), sin embargo para que obtengas el resultado deseado en cualquier caso, debes utilizar la sintaxis correcta.
Espero haberte ayudado.
Espero haberte ayudado.
Saludos amigos.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
En Xailer 3.0.1
LOCAL aResult := {}
LOCAL cSelect
cSelect := "CALL p_registroCompleto( " + ;
Chr(34) + desde + Chr(34) + ", " + ;
Chr(34) + hasta + Chr(34) + ")"
::conexionMysql:Execute( cSelect, "PA consulta de registro",, @aResult )
Al ejecutar me muestra el siguiente mensaje:
LOCAL aResult := {}
LOCAL cSelect
cSelect := "CALL p_registroCompleto( " + ;
Chr(34) + desde + Chr(34) + ", " + ;
Chr(34) + hasta + Chr(34) + ")"
::conexionMysql:Execute( cSelect, "PA consulta de registro",, @aResult )
Al ejecutar me muestra el siguiente mensaje:
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
jasm, para poderte ayudar con más exactitud, necesitaría saber el contenido de tu procedimiento almacenado, ya que el mensaje de error que obtienes se refiere que MySQL no puede darte un resultado en las condiciones en que haces la llamada, sin embargo, asumo que desde y hasta son variables de memoria y quizás el problema esté en la forma en que estás enviando estos dos valores. Te invito a que visites nuestra pagina http://www.informaticaoverlisa.mx
Saludos amigos.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Este es el procedimiento almacenado. Funciona correctamente desde el shell de MySQL y desde SQLYog.
Código: Seleccionar todo
DELIMITER $$
USE `cerberos`$$
CREATE PROCEDURE `p_registroPresencia`( fechadesde DATETIME, fechahasta DATETIME)
BEGIN
SELECT a.id AS id_registro,
a.fecha AS Fecha,
DATE_FORMAT(Fecha,'%d.%m.%Y %H:%i:%s') AS fechac,
a.num_tarjeta AS Tarjeta,
CONCAT(b.apellidos,', ',b.nombre) AS Empleado,
c.nombre AS Zona,
d.id AS id_incidencia,
d.nombre AS Incidencia,
b.id_foto AS id_foto,
e.id_empleado AS id_empleado,
a.id_zona AS id_zona,
e.baja AS tarjeta_baja,
a.sello AS sello,
a.lector AS lector,
a.baja AS baja,
a.id_turno AS id_turno,
f.nombre AS turno,
a.id_codigo AS id_codigo,
g.nombre AS codigo,
g.inicioturno AS inicioturno,
g.finturno AS finturno,
g.no_computar AS no_computar
FROM cerberos_registro a
JOIN cerberos_emptarjeta e ON e.num_tarjeta = a.num_tarjeta
JOIN cerberos_empleado b ON b.id = e.id_empleado
JOIN cerberos_zona c ON c.id = a.id_zona
JOIN cerberos_incidencia d ON d.id = a.incidencia
JOIN cerberos_turno f ON f.id = a.id_turno
JOIN cerberos_codigo g ON g.id = a.id_codigo
WHERE e.baja=0 AND sello BETWEEN fechadesde AND fechahasta AND a.id_codigo != 0
ORDER BY tarjeta,fecha;
END$$
DELIMITER ;
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Buenos días,
La futura actualización de Xailer soportará para TMySql y TMariaDB operaciones que devuelvan más de un 'result set'. En cualquier caso no sé si esto resolvería tu problema.
Un saludo
La futura actualización de Xailer soportará para TMySql y TMariaDB operaciones que devuelvan más de un 'result set'. En cualquier caso no sé si esto resolvería tu problema.
Un saludo
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
José Alfonso,
el problema es que los procedimientos almacenados de MySQL pueden devolver múltiples 'recordsets', y eso provoca que cuando lo ejecutas, la conexión se queda 'pillada' hasta que se fuerce la lectura de todos los recordsets y se asegure que no queda nada por leer.
Si te fijas bien, verás que la primera llamada que haces al PA devuelve correctamente el resultado. Pero a partir de ahí, cualquier cosa que hagas con la BD te dará un error. Precísamente porque hay que cerrar la llamada anterior, y eso es lo que no se está haciendo.
En la próxima versión estará solucionado, ya que hay un método para hacer esas lecturas adicionales dando por finalizado el PA.
el problema es que los procedimientos almacenados de MySQL pueden devolver múltiples 'recordsets', y eso provoca que cuando lo ejecutas, la conexión se queda 'pillada' hasta que se fuerce la lectura de todos los recordsets y se asegure que no queda nada por leer.
Si te fijas bien, verás que la primera llamada que haces al PA devuelve correctamente el resultado. Pero a partir de ahí, cualquier cosa que hagas con la BD te dará un error. Precísamente porque hay que cerrar la llamada anterior, y eso es lo que no se está haciendo.
En la próxima versión estará solucionado, ya que hay un método para hacer esas lecturas adicionales dando por finalizado el PA.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Gracias por las respuestas.
Esperaré a la versión siguiente.
Saludos.
Esperaré a la versión siguiente.
Saludos.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
jasm, en forma provisional y en tanto nuestros amigos de xailer efectúan esta modificación, te sugiero que resuelvas tu necesidad creando una vista que incluya la información que necesites, pero hazlo en el cliente nativo de MySQL, llamando dicha vista desde TMySQLDataSource ya en tu aplicación.
Espero haberte ayudado.
Espero haberte ayudado.
Saludos amigos.