Problema en apertura de ficheros desde el Emulador.
Problema en apertura de ficheros desde el Emulador.
Amigos
He preparado un ejemplo para probar el error que se produce en la apertura de ficheros utilizando el Emulador.
El ejemplo realiza 2 pruebas:
- El primero crea y abre ficheros en una carpeta "Pruebas" que crea en la "Storage Card" del emulador.
- El segundo hace lo mismo pero esta vez creando la carpeta "pruebas" y todo los ficheros en memoria.
Si os pasa lo que a mí, en memoria se crearan y aperturaran 80 ficheros correctamente y en el Storage card, el resultado es dispar. Se producen errores de apertura con un número NO siempre igual.
A ver si entre todos damos con la solucion.
Saludos
EL EJEMPLO:
----------------------------------------------------------------------------------
#include "Fwce.ch"
#xcommand TRY => bError := errorBlock( {|oErr| break( oErr ) } ) ;;
BEGIN SEQUENCE
#xcommand CATCH [<!oErr!>] => errorBlock( bError ) ;;
RECOVER [USING <oErr>] <-oErr-> ;;
errorBlock( bError )
STATIC bError
REQUEST DBFCDX
FUNCTION MAIN()
LOCAL oWnd
SET AUTOPEN ON
REQUEST HB_LANG_ES // Para establecer español para Mensajes, fechas, etc..
REQUEST HB_CODEPAGE_ESMWIN // Para establecer código de página a Español (Ordenación, etc..)
HB_LangSelect('ES')
HB_SetCodePage("ESMWIN") // Para ordenación (arrays, cadenas, etc..)
**-------- > Proceso de Entrada del Programa ------**
SET CONFIRM ON
SET DECIMAL TO 3
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd ON INIT Pruebas() ON CLICK oWnd:End()
RETURN NIL
function pruebas
LOCAL cFile := SPACE( 20 )
LOCAL cAlias:= SPACE( 20 )
LOCAL x
//LOCAL cDir := "\" + CurDir() + "\Prueba\"
LOCAL cDir := "\Storage Card\Prueba\"
FOR Y=1 TO 2
IF Y=2
dbcloseall()
cDir := "\Prueba\"
ENDIF
msginfo("Comenzamos en "+ cDir)
/*
if Left(cDir,2) = "\\"
cDir := Substr(cDir,2)
endif*/
IF !FILE( cDir )
lMkDir( cDir )
ENDIF
cFile := cDir + "1" + ".dbf"
FOR X := 1 TO 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
if !file ( cFile)
FERASE( cFile )
endif
NEXT X
TRY
FOR X := 1 TO 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
DBCREATE( cFile, {{"Uno","C",10,0}} )
NEXT X
MSGINFO("Creados correctamente " + alltrim(str(x-1)))
CATCH
MSGSTOP("Error creando ficheros. Creados = " + alltrim(str(x)) + " de 80","Error en creacion de ficheros")
END
msginfo("DbCreate finalizado")
TRY
for x := 1 to 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
cAlias:= "A"+STRZERO(X,2)
Dbusearea( .T. ,"DBFCDX" , cFile, cAlias, .f. ,.f. )
if !NetErr()
(cAlias)->(dbappend())
Replace (cAlias)->Uno WITH cAlias
endif
next x
MSGINFO("Abiertos correctamente " + alltrim(str(x-1)))
CATCH
MSGSTOP("Error aperturando ficheros. Abiertos = " + alltrim(str(x)) + " de 80","Error en apertura de ficheros")
END
msginfo("Final")
NEXT Y
return nil
He preparado un ejemplo para probar el error que se produce en la apertura de ficheros utilizando el Emulador.
El ejemplo realiza 2 pruebas:
- El primero crea y abre ficheros en una carpeta "Pruebas" que crea en la "Storage Card" del emulador.
- El segundo hace lo mismo pero esta vez creando la carpeta "pruebas" y todo los ficheros en memoria.
Si os pasa lo que a mí, en memoria se crearan y aperturaran 80 ficheros correctamente y en el Storage card, el resultado es dispar. Se producen errores de apertura con un número NO siempre igual.
A ver si entre todos damos con la solucion.
Saludos
EL EJEMPLO:
----------------------------------------------------------------------------------
#include "Fwce.ch"
#xcommand TRY => bError := errorBlock( {|oErr| break( oErr ) } ) ;;
BEGIN SEQUENCE
#xcommand CATCH [<!oErr!>] => errorBlock( bError ) ;;
RECOVER [USING <oErr>] <-oErr-> ;;
errorBlock( bError )
STATIC bError
REQUEST DBFCDX
FUNCTION MAIN()
LOCAL oWnd
SET AUTOPEN ON
REQUEST HB_LANG_ES // Para establecer español para Mensajes, fechas, etc..
REQUEST HB_CODEPAGE_ESMWIN // Para establecer código de página a Español (Ordenación, etc..)
HB_LangSelect('ES')
HB_SetCodePage("ESMWIN") // Para ordenación (arrays, cadenas, etc..)
**-------- > Proceso de Entrada del Programa ------**
SET CONFIRM ON
SET DECIMAL TO 3
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd ON INIT Pruebas() ON CLICK oWnd:End()
RETURN NIL
function pruebas
LOCAL cFile := SPACE( 20 )
LOCAL cAlias:= SPACE( 20 )
LOCAL x
//LOCAL cDir := "\" + CurDir() + "\Prueba\"
LOCAL cDir := "\Storage Card\Prueba\"
FOR Y=1 TO 2
IF Y=2
dbcloseall()
cDir := "\Prueba\"
ENDIF
msginfo("Comenzamos en "+ cDir)
/*
if Left(cDir,2) = "\\"
cDir := Substr(cDir,2)
endif*/
IF !FILE( cDir )
lMkDir( cDir )
ENDIF
cFile := cDir + "1" + ".dbf"
FOR X := 1 TO 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
if !file ( cFile)
FERASE( cFile )
endif
NEXT X
TRY
FOR X := 1 TO 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
DBCREATE( cFile, {{"Uno","C",10,0}} )
NEXT X
MSGINFO("Creados correctamente " + alltrim(str(x-1)))
CATCH
MSGSTOP("Error creando ficheros. Creados = " + alltrim(str(x)) + " de 80","Error en creacion de ficheros")
END
msginfo("DbCreate finalizado")
TRY
for x := 1 to 80
cFile := cDir + ALLTRIM(STR(X)) + ".dbf"
cAlias:= "A"+STRZERO(X,2)
Dbusearea( .T. ,"DBFCDX" , cFile, cAlias, .f. ,.f. )
if !NetErr()
(cAlias)->(dbappend())
Replace (cAlias)->Uno WITH cAlias
endif
next x
MSGINFO("Abiertos correctamente " + alltrim(str(x-1)))
CATCH
MSGSTOP("Error aperturando ficheros. Abiertos = " + alltrim(str(x)) + " de 80","Error en apertura de ficheros")
END
msginfo("Final")
NEXT Y
return nil
Toni Sales
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Toni,
el unico problema que he encontrado con las SD es cuando la PDA va en stand-by (quisiera que no fuera en stand-by mientras yo lo desee, como hace TomTom Navigator). Sucede que cuando enciendes la PDA y tienes un browse abierto mostrando una base de datos da error... pero.. siempre hay un pero... en el celular-pda HTC TyTN no se por cual motivo no sucede, aunque vaya en stand-by cuando lo enciendes no da error.
En todos los otros que he probado da error.
Saludos.
el unico problema que he encontrado con las SD es cuando la PDA va en stand-by (quisiera que no fuera en stand-by mientras yo lo desee, como hace TomTom Navigator). Sucede que cuando enciendes la PDA y tienes un browse abierto mostrando una base de datos da error... pero.. siempre hay un pero... en el celular-pda HTC TyTN no se por cual motivo no sucede, aunque vaya en stand-by cuando lo enciendes no da error.
En todos los otros que he probado da error.
Saludos.
Pedro Gonzalez
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Toni,
Prueba con este cambio:
Tal vez los ficheros esten creados en caché de memoria y no volcados aún a la tarjeta
Prueba con este cambio:
Code: Select all
if ! File( cFile )
MsgAlert( "el fichero no está aún disponible" )
else
Dbusearea( .T. ,"DBFCDX" , cFile, cAlias, .f. ,.f. )
endif