Tengo una funcion en C que básicamente recibe un parametro por referencia y lo guarda en una estructura.
Luego con un GET acepto el valor desde un PRG pero, he aquí el problema, cuando la variable la declaro en el PRG como LOCAL el valor no es visible en C, en cambio cuando lo hago como STATIC sí.
He averiguado que si antes del GET pongo esto _GET_( niVar, "niVar" ) si funciona bien aunque sea local. Por lo que deduzco que el GET hace algo por que hacer perder la referencia a la variable.
- Code: Select all Expand view
#include "hdo.ch"
#include "InKey.ch"
//------------------------------------------------------------------------------
procedure main()
static nSocIni, nSocFin // Con local no funciona, static si... porque? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
local oDb, oStmt, oCur, e
local cDb := "agenda.db"
local cTabla := "socios"
local cSql := "SELECT * FROM " + cTabla + " WHERE clavesocio BETWEEN ? AND ? ;"
local getlist := {}
nSocIni := nSocFin := 0
cls
oDb := THDO():new( "sqlite" )
oDb:setAttribute( ATTR_ERRMODE, .t. )
if oDb:connect( cDb )
TRY
oStmt := oDb:prepare( cSql ) // Prepara la sentencia y crea el objeto oStmt
oStmt:bindParam( 1, @nSocIni ) // <<<<<<<<<<<<<<<<<<<<<<<<<<< AQUI LAS METO EN LA ESTRUCTURA EN C
oStmt:bindParam( 2, @nSocFin ) // <<<<<<<<<<<<<<<<<<<<<<<<<<< AQUI LAS METO EN LA ESTRUCTURA EN C
@ maxrow(), 00 say "Presiona <INTRO> para selecionar rangos o <ESC> para salir..."
while inkey( 0 ) != K_ESC
cls
@ 02, 02 say "Entrada de datos:"
@ 04, 02 say "Entre rango inicial:" get nSocIni picture "@K9"
@ 05, 02 say "Entre rango final..:" get nSocFin picture "@K9" valid validaRango( nSocIni, nSocFin )
read
if lastkey() != K_ESC .and. updated()
oStmt:execute() // Ejecuta la sentencia <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< AQUI USO LAS VARIABLES PERO EN C PERO SOLO PASA EL VALOR SI SON STATIC O LAS ASIGNO SIN EL GETSYSTEM
// Creamos un cursor local (navigator) como un hash table
oCur := THashCursor():new( oStmt:fetchAll( FETCH_HASH ) )
cls
@ 00, 00 say "Resultado de la consulta -> " + hb_ntos( oStmt:rowCount() ) + " registros:" color "W+/R"
@ maxrow(), 00 say "<ESC> para volver al menu..." color "W+/R"
if oCur:reccount() > 0
miBrwCursor( oCur, 1, 0, maxrow() - 1, maxcol() )
else
msg( "No hay registros en ese rango" )
endif
oCur:free()
else
msg( "Nada que hacer..." )
endif
cls
@ maxrow(), 00 say "Presiona <INTRO> para selecionar rangos o <ESC> para salir..."
end
CATCH e
eval( errorblock(), e )
FINALLY
if oStmt:className() == "THDOSTATEMENT"
oStmt:free()
endif
msg( "Se acabo" )
end
endif
oDb:disconnect()
return
//------------------------------------------------------------------------------
Qué puede ser?