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