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.

Procedimientos almacenados con MySQL y TMySQLDataSource

Foro público de Xailer en español
Responder
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje por jasm »

Hola

¿Funcionan los procedimientos almacenados de MySQL con TMySQLDataSource? Solo consigo un desesperante mensaje.

Gracias.
Rich
Mensajes: 75
Registrado: Mar Mar 12, 2013 1:50 am
Contactar:

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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.
Saludos amigos.
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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:
Imagen
Rich
Mensajes: 75
Registrado: Mar Mar 12, 2013 1:50 am
Contactar:

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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
Saludos amigos.
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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 ;
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9252
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jasm
Mensajes: 447
Registrado: Mar Jul 08, 2008 8:12 pm

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje por jasm »

Gracias por las respuestas.

Esperaré a la versión siguiente.

Saludos.
Rich
Mensajes: 75
Registrado: Mar Mar 12, 2013 1:50 am
Contactar:

Re: Procedimientos almacenados con MySQL y TMySQLDataSource

Mensaje 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.
Saludos amigos.
Responder