Página 1 de 1
Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Jue Jul 02, 2015 10:13 am
por jasm
Hola
¿Funcionan los procedimientos almacenados de MySQL con TMySQLDataSource? Solo consigo un desesperante mensaje.
Gracias.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Jue Jul 02, 2015 5:20 pm
por Rich
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.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Dom Jul 05, 2015 10:39 am
por jasm
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:
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Dom Jul 05, 2015 5:23 pm
por Rich
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
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Lun Jul 06, 2015 9:31 am
por jasm
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 ;
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Lun Jul 06, 2015 9:56 am
por ignacio
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
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Lun Jul 06, 2015 11:06 am
por jfgimenez
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.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Lun Jul 06, 2015 11:32 am
por jasm
Gracias por las respuestas.
Esperaré a la versión siguiente.
Saludos.
Re: Procedimientos almacenados con MySQL y TMySQLDataSource
Publicado: Lun Jul 06, 2015 5:37 pm
por Rich
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.