Problema en apertura de ficheros desde el Emulador.

tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Problema en apertura de ficheros desde el Emulador.

Post by tsales »

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
Toni Sales
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

Ya hemos visto en _, que la Storage card falla para determinadas operaciones (apertura de ficheros, índices, etc.)

Tal vez el Windows Mobile 2006 haya mejorado esto. Aún no lo hemos probado en él.
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio
Las pruebas que he realizado han sido sobre WM6.

Lo curioso es que con FOPEN() funciona correctamente la apertura de los 80 Ficheros.

¿No será un problema propio de la funcion dbusearea?.

En el ejemplo no estoy utilizando indices.

Saludos
Toni Sales
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

El problema sucede solo con el emulador o tambien con la PDA?


Gracias
Pedro Gonzalez
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

> ¿No será un problema propio de la funcion dbusearea?

La única explicación que se nos ocurre es que esa función haga algo que en la tarjeta de memoria no está permitido.

Habría que preguntarle a Przemek y como última solución tracear la función a bajo nivel.
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio
Ojalá encontráramos la solución.

¿Podrias hacerle tu a Przemek la pregunta?. Te estaría agradecido.
No tengo acceso al SVS de Harbour.

Saludos.
Toni Sales
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Pedro
El problema sucede solo en el Emulador, pero en mi caso desistí en utilizar las tarjetas de almacenamiento por problemas con los índices. Esto hace algun tiempo.
Saludos
Toni Sales
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

El problema es solo en el emulador ? No ocurre en la tarjeta de memoria de la PDA real ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio
He realizado pruebas con una PDA con WM5, SD Card y Storage Card y en ambas tarjetas funciona correctamente.

No tengo una PDA con WM6 pero me imagino que funcionará correctamente.

Saludos
Toni Sales
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

Has probado a abrir las 80 bases de datos en el emulador (tarjeta memoria), sin que usen índices ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio
Estoy utilizando el mismo ejemplo para todo. En el ejemplo no utilizo indices.
Saludos
Toni Sales
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

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. :shock:
En todos los otros que he probado da error.

Saludos.
Pedro Gonzalez
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

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
Tal vez los ficheros esten creados en caché de memoria y no volcados aún a la tarjeta
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio
No salta el Alert. De todas formas he probado a realizar solo la apertura de ficheros (si el DBCREATE) y sucede lo mismo. Y te recalco lo mismo, si realizo un FOPEN funciona no produce error.
Saludos
Toni Sales
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Pedro
El tema del stand-by nunca me ha pasado. Aunque el 99% de _ guardo el ejecutable en Memoria.
Utilizo Ipaq de varios modelos y funciona correctamente sin generar error en los Browses.

Utilizas el modo de apertura Shared??. Si es así prueba a quitarlo.
Saludos.
Toni Sales
Post Reply