Error al llamar procedimiento almacenado mysql con parametro INOUT desde vfp9

526 views
Skip to first unread message

raomgluz

unread,
Oct 11, 2011, 5:49:04 PM10/11/11
to Comunidad de Visual Foxpro en Español
Trabajo con MySQL Client version 5.1.11 Windows XP; y VFP9:

-- MySQL
--
DROP TABLE IF EXISTS `dbsfis_dbo`.`secuencia`;
CREATE TABLE `dbsfis_dbo`.`secuencia`
( `sec_idsec` char(15) NOT NULL,
`sec_descri` varchar(45) NOT NULL,
`sec_valor` int(10) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`sec_idsec`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Procedimiento almacenado MySQL: newid
--
DELIMITER $$

DROP PROCEDURE IF EXISTS `dbsfis_dbo`.`newid`$$
CREATE DEFINER=`roncoym`@`%`
PROCEDURE `dbsfis_dbo`.`newid`(IN p_idsec CHAR(15), INOUT p_valor
INT)
BEGIN
INSERT INTO secuencia VALUES (p_idsec, p_idsec, 1)
ON DUPLICATE KEY UPDATE sec_valor = sec_valor + 1;

SELECT sec_valor INTO p_valor FROM secuencia WHERE sec_idsec =
p_idsec;
END $$

DELIMITER ;

*
*
* Visual FoxPro
*
FUNCTION cIDPROCESO(tcPrefijoID)
*
* Genera Identificador de doc. proceso logistico.
*
LOCAL lcPrefijoID, lnsec_valor, llError
********************************************************************************************
** Genera Nº Proceso:
lcPrefijoID = tcPrefijoID && Ejemplo '1106M'
lnsec_valor=0
llError = SQLEXEC(oApp.nHandle01, 'call dbsfis_dbo.newid(?
lcprefijoid, ?@lnsec_valor)') < 0
IF llError
IF AERROR(laError) > 0
*-- Let the form's error handler handle the error
thisform.Error(laError[1])
ENDIF
RETURN '' && Devuelve blanco si hay error
ENDIF
*
RETURN (lcPrefijoID + CHRTRAN(STR(lnSec_valor, 4), SPACE(1), '0') +
'1') && '1106M00011'


EL PROBLEMA ES QUE VFP9, NO RECONOCE COMO INSTRUCCION VALIDA A
llError = SQLEXEC(oApp.nHandle01, 'call dbsfis_dbo.newid(?
lcprefijoid, ?@lnsec_valor)') < 0

POR EL PARAMETRO : ?@lnsec_valor

NO SE SI EL PROBLEMA ES DEL MySQL ODBC 5.1 Driver ó LA VERSION DEL
MySQL Client version 5.1.11. SOLICITO APOYO A LA COMUNIDAD VFP.

raomgluz

Rene Ricardo

unread,
Oct 11, 2011, 6:00:42 PM10/11/11
to publice...@googlegroups.com
Solo cambia esta instrucción:

llError = SQLEXEC(oApp.nHandle01, 'call dbsfis_dbo.newid ?lcprefijoid, ?lnsec_valor')

===============================================================
Reply all
Reply to author
Forward
0 new messages