Page 1 of 1

STRZERO

Posted: Tue Oct 23, 2007 7:02 am
by Andrés González
Que puede estar ocurriendo para que me falle, precisamente la funcion STRZERO, parece como si no la tubiera FWH25.

Code: Select all

FUNC CTRComunicados()
LOCAL nSelect  := Select(),  nOrden   := IndexOrd()

Select(60)
USE S:COMUNICA SHARED
SET INDEX TO S:COFECHAO, S:CONUMOR, S:COFECHOR

  APPEND BLANK
  IF !NETERR()
	REPLACE CNUMOR   WITH SUBSTR(STRZERO(RECNO()),-6) <<<<<<Aqui es donde falla.
	REPLACE CFECHA   WITH CTR->FECHA
	REPLACE CCODINT  WITH "SC004"
     	REPLACE CDESC    WITH alltrim(PAP->ACTIVIDAD) + " OS. Nº "+ CTR->EXPED+ ", DIST.: " +alltrim(CTR->DISTINTIVO)+", DURACION: "+(CTR->HORAS)+". DENUNCIAS: TRAF.: " +STR(CTR->DENTRAF)+ ", OOMM.: "+ STR(CTR->DENCOR)+", INDENTIF.:"+ STR(CTR->IDENTIF)+ ", VEHICULOS: " + STR(CTR->VEHICULOS)
    	REPLACE CHORA    WITH VAL(SUBSTR(CTR->HINI,1,2))
    	REPLACE CMINU    WITH VAL(SUBSTR(CTR->HINI,4,2))
     	REPLACE CZONA    WITH VAL(PAP->ZONA)
    	REPLACE CSECT    WITH PAP->SECTOR
    	REPLACE CCALLE   WITH VAL(PAP->CALLE)
	REPLACE CNUMER   WITH ""
    	REPLACE CTEXTO   WITH ""
    	REPLACE CLISTA   WITH 0
    	REPLACE CUSUARIO WITH x_user

		dBCommit()
  ENDIF

dBClosearea()
dBselectar(nSelect)
dBsetorder(nOrden)

RETURN  .T.
Si en vez de strzero pongo solo str no me da error, pero claro el indice queda feo.
Si pongo ? STRZERO(Recno()) Falla, pero si pongo ? STR(RECNO()) no falla.

Debo de enlazar algun módulo especifico para que me cargue esa función.

Posted: Tue Oct 23, 2007 7:20 am
by Antonio Linares
Andrés,

La función StrZero() no es de FWH, sino de Harbour/xHarbour.

Prueba a hacer: MsgInfo( StrZero( 123 ) )

Posted: Tue Oct 23, 2007 7:41 am
by Andrés González
Antonio se puede variar las condiciones de STRZERO desde el compilador, te lo digo pues ahora esto no me funciona (antes sí):

SUBSTR(STRZERO(RECNO()),-6)

Pero encambio si incluyo un segundo parametro en el strzero si funciona:

STRZERO(RECNO(), 6)

Todo el programa me falla por esta funcion, a raiz de una rotura del disco duro, en el que he tenido que volver a montarlo todo de nuevo. La primera instruccion es logica que funcione bien, primero añado ceros a la izquierda del numero hasta completar la longitud total del campo y luego hago el substr de lo que a mi me interesa.

Como el STRZERO no esta documentada ni en clipper, yo no sabia que se podia incluir el segundo parametro.

NOTA: Aunque pensandolo bien mas vale hacer la segunda instruccion que no la primera.

Posted: Tue Oct 23, 2007 8:00 am
by Antonio Linares
Andrés,

Has actualizado la versión que usas de xHarbour ?

De ser así podrías reemplazar en RTL.LIB strzero.obj por el antiguo que usabas

Posted: Tue Oct 23, 2007 8:08 am
by Andrés González
Utilizo FWH25 + Harbour25, y no he recompilado nada. Solo he vuelto ha montar el link de compilacion con AJMAKE. Ahora funciona bien pero solo incluyendo el segundo parametro, por eso era la pregunta si se podia cambiar la actuacion de esa funcion desde compilación.

De todas formas ahora variando la funcion y poniendo en segundo parametro funciona bien y como seguro que no encuentro la razon porque me ha pasado esto, lo voy a dejar de momento.

Gracias.

Posted: Tue Oct 23, 2007 8:28 am
by Antonio Linares
Andrés,

Bueno, lo importante es que te esté funcionando :-)

Las funciones de la RTL (run time library) de Harbour no se pueden cambiar en tiempo de ejecución (bueno, existen algunas "maneras"), solo en tiempo de enlazado, habiendo modificado la librería previamente.

Posted: Tue Oct 23, 2007 11:57 am
by Andrés González
Gacias Antonio. De esta manera funciona igual y hace menos procesos de maquina.

Posted: Tue Oct 23, 2007 12:29 pm
by ADBLANCO
prueba con STRZERO(PAB->(RECNO()))

Posted: Tue Oct 23, 2007 12:33 pm
by ADBLANCO
PERDON: PRUEBAB CON STRZERO(COMUNICA->(RECNO()))

Posted: Tue Oct 23, 2007 12:53 pm
by ronaldo
voicê precisa informar o tamanho para a strzero(nro, tamanho), ou então use simplesmente o str()

Posted: Wed Oct 24, 2007 6:51 am
by joseluisysturiz
Uso es funcion pero de la siguiente manera: strzero(var,n), donde n es el tamaño de la variables que normalmente contiene solo numeros, ya sea de tipo numerico o de tipo char... o deberias de invertir las funciones...