Page 1 of 2

Ayuda con apertura de ficheros POR FAVOR

Posted: Mon Dec 18, 2006 1:20 pm
by mjcc
Tengo una rutina que abre todos los ficheros del sistema, ahora le he ampliado tres ficheros mas, y me da u error, de
** error de apertura **
y no me deja abrir mas de un determinado numero de ficheros, alguno de vosotros conoce una solucion por favor

GRACIAS

Posted: Mon Dec 18, 2006 1:59 pm
by Carles
Hola,

Primero de todo tenemos de averiguar q fichero es. Tambien se puede mirar la rutina q abre los fichero y ver como lo haces. Mirar si hay campos memo, indices asociados, ....

Necesitamos datos :wink:

Tranki q todo tiene solucion

Ahi va todo el codigo.

Posted: Mon Dec 18, 2006 2:51 pm
by mjcc
#include "FWCE.ch"
function Main()
local oWnd, obmp
DbCloseAll()
Config()
abrir_dbfs_cdx()
indexa_ficheros()
abrir_dbfs_tmp()
menu_principal()
DbCloseAll()
oBmp:End()
return 0
********************************************************
* Configurardor de opciones de menu
********************************************************
FUNCTION iniciar_menu

local oMenu
DEFINE MENU oMenu RESOURCE 102
REDEFINE MENUITEM ID 320 OF oMenu ACTION MsgInfo("MJCC" +;
CHR(13) +;
"Manuel Jose Castro Casas,S.L." +;
CHR(13) +;
"Arcay 124 bajo"+;
CHR(13) +;
"15873 - Bembibre"+;
CHR(13)+;
"La Coruña"+;
CHR(13)+;
"902 234568",;
"Gestion POKECT")

REDEFINE MENUITEM ID 1310 OF oMenu ACTION vehiculo("","","","")
RETURN omenu
********************************************************
* Configuracion del sistema por defecto para arrancar *
********************************************************
STATIC FUNCTION Config()
HB_LANGSELECT("ESWIN")
SET DELETED ON
SET DATE TO ITALIAN
SET SOFTSEEK ON
SET CENTURY ON
SET EPOCH TO 2000
SET CONFIR ON
*Hb_LangSelect ('PL')
*Hb_SetCodePage ('PLWIN')
REQUEST HB_LANG_ES // Para establecer español para Mensajes, fechas, etc..
REQUEST HB_CODEPAGE_ESWIN // Para establecer código de página a Español (Ordenación, etc..)
HB_LangSelect('ES')
HB_SetCodePage("ESWIN") // Para ordenación (arrays, cadenas, etc..)
RETURN 0
********************************************************************
* Abre los ficheros temporales del sistema *
********************************************************************
FUNCTION abrir_dbfs_tmp()
USE ( CurDir() + "\tmp\rescli.dbf") NEW
USE ( CurDir() + "\tmp\resart.dbf") NEW
USE ( CurDir() + "\tmp\resage.dbf") NEW
USE ( CurDir() + "\tmp\resavc.dbf") NEW
USE ( CurDir() + "\tmp\lineas.dbf") NEW
USE ( CurDir() + "\tmp\resvehi.dbf") NEW
RETURN 0
***********************************************************************************
* APERTURA DE FICHEROS CON LOS INDICES GENERADOS
***********************************************************************************
FUNCTION abrir_dbfs_cdx()
USE ( CurDir() + "\dat\planning.dbf") NEW
USE ( CurDir() + "\dat\plandet.dbf") NEW
USE ( CurDir() + "\dat\cliente.dbf") NEW
USE ( CurDir() + "\dat\articulo.dbf") NEW
USE ( CurDir() + "\dat\agenda.dbf") NEW
USE ( CurDir() + "\dat\tareas.dbf") NEW
USE ( CurDir() + "\dat\recuento.dbf") NEW
USE ( CurDir() + "\dat\avc.dbf") NEW
USE ( CurDir() + "\dat\avl.dbf") NEW
USE ( CurDir() + "\dat\fpago.dbf") NEW
USE ( CurDir() + "\dat\barras.dbf") NEW
USE ( CurDir() + "\dat\vehiculo.dbf") NEW
USE ( CurDir() + "\dat\grupo.dbf") NEW
USE ( CurDir() + "\dat\subgrupo.dbf") NEW
USE ( CurDir() + "\dat\familias.dbf") NEW
USE ( CurDir() + "\dat\seccion.dbf") NEW
USE ( CurDir() + "\dat\labo.dbf") NEW
RETURN 0
*************************************************************************
* Indexa los ficheros de la aplicacion por _ que a mi me interesan
**************************************************************************
Function indexa_ficheros ()
Request DbfCdx
Request DbfFpt
RddSetDefault ('DbfCdx')
Request Hb_Lang_PLWIN
Request Hb_CodePage_PLWIN
* Clientes
SELECT cliente
Index On nombrec Tag inombrec TO ( CurDir() + "\dat\cliente.cdx" ) FOR borrado <> 1
Index On codigo Tag icodigo TO ( CurDir() + "\dat\cliente.cdx" ) FOR borrado <> 1
* Artículos
SELECT articulo
Index On nombrea Tag inombrec TO ( CurDir() + "\dat\articulo.cdx" ) FOR borrado <> 1
Index On codigo Tag icodigo TO ( CurDir() + "\dat\articulo.cdx" ) FOR borrado <> 1
Index On autosel Tag iautosel TO ( CurDir() + "\dat\articulo.cdx" ) FOR borrado <> 1
* Indexa los ficheros de la agenda
SELECT agenda
Index On nombrec Tag inombrec TO ( CurDir() + "\dat\agenda.cdx" ) FOR borrado <> 1
Index On codigo Tag icodigo TO ( CurDir() + "\dat\agenda.cdx" ) FOR borrado <> 1
* Indexa fichero de planning
SELECT tareas
Index On subs(dtoc(tfecha),1,5) + alltrim(thora) Tag inombrec TO ( CurDir() + "\dat\tareas.cdx" ) FOR borrado <> 1
* Indexa fichero de recuento de stocks
SELECT recuento
Index ON codigo Tag irecuen TO ( CurDir() + "\dat\recuento.cdx" )
* Indexa el fichero de cabeceras de albaranes de ventas
SELECT avc
Index ON nombrec Tag inombre TO ( CurDir() + "\dat\avc.cdx" ) FOR borrado <> 1
Index ON puntero Tag icodigo TO ( CurDir() + "\dat\avc.cdx" ) FOR borrado <> 1
* Indexa el fichero de albaranes
SELECT avl
Index ON documento Tag icodigo TO ( CurDir() + "\dat\avl.cdx" ) FOR borrado <> 1
Index ON puntero Tag ilineas TO ( CurDir() + "\dat\avl.cdx" ) FOR borrado <> 1
* Indexa el fichero de formas de pago
SELECT fpago
Index ON pagocod Tag icodpag TO ( CurDir() + "\dat\fpago.cdx" )
* Indexa el fichero de codigos de barras
SELECT barras
Index ON bartean13 Tag barras1 TO ( CurDir() + "\dat\barras.cdx" )
Index ON bartean13d Tag barras2 TO ( CurDir() + "\dat\barras.cdx" )
* Fichero de planning
SELECT planning
Index ON fechadoc Tag icodigo TO ( CurDir() + "\dat\planning.cdx" )
* Detalle de plannig
SELECT plandet
Index ON fechadoc Tag icodf TO ( CurDir() + "\dat\plandet.cdx" )
* Vehiculos empresa
SELECT vehiculo
Index On nombrec Tag nombrev TO ( CurDir() + "\dat\vehiculo.cdx" ) FOR borrado <> 1
Index On codigo Tag matricu TO ( CurDir() + "\dat\vehiculo.cdx" ) FOR borrado <> 1
* Grupos
SELECT grupo
Index On percod Tag ipercod TO ( CurDir() + "\dat\grupo.cdx" )
* Subrupos
SELECT subgrupo
Index On percod Tag ipercod TO ( CurDir() + "\dat\subgrupo.cdx" )
* Familias
SELECT familias
Index On famcodigo Tag ifamcod TO ( CurDir() + "\dat\familias.cdx" )
* Secciones
SELECT seccion
Index On sec_codigo Tag iseccod TO ( CurDir() + "\dat\seccion.cdx" )
* Laboratorios
SELECT labo
Index On percod Tag ilabo TO ( CurDir() + "\dat\labo.cdx" )
Return 0

Posted: Tue Dec 19, 2006 6:12 am
by Antonio Linares
Manolo,

Pudiese tratarse de una limitación de Windows Mobile. Vamos a construir un ejemplo ya a probarlo, y en caso de existir esa limitación, vamos a ver si existe forma de ampliar esa cantidad.

Por favor, no pongas el mismo mensaje tantas veces. Te hemos leido y vamos a ayudarte. Quédate tranquilo.

Posted: Tue Dec 19, 2006 8:09 am
by Carles
Hola,

La aplicacion q mas ficheros abria era 15 y me iba correctamente. He ampliado la apertura (ya por curiosidad), y me abre hasta 19 (con indices asociados) - >Curiosa la limitacion.

Tranquilo Mjcc q Antonio encontrará la solucion (recouerdo los viejos tiempos con el sethandlecount(), o algo asi).

OK

Posted: Tue Dec 19, 2006 10:27 am
by mjcc
Tengo que hacer la presentacion la semana que viene y me da una rabia estos errores chorra que no te puedes imaginar.

GRACIAS, CONFIO EN VOSOTROS

Posted: Tue Dec 19, 2006 10:47 am
by Carles
Pues este problema creo q solo te lo podra solucionar una persona. De todas maneras para salir del paso en la presentacion y tenerlos 'engañados' puedes mirar de abrir y cerrar las tablas cuando las necesites. Supongo q no tendras un proceso q necesites todas abiertas.

Vamos a ver q cuentas AL

ok

Posted: Tue Dec 19, 2006 10:55 am
by mjcc
De todas formas no os olvideis de mi a ver si podemos solucionarlo

Gracias.

Posted: Tue Dec 19, 2006 10:56 am
by tsales
¿Estas utilizando el Emulador o una PDA?. ¿Que version de SO?

Saludos
PD: Agradecería te identificaras con tu nombre.

Posted: Tue Dec 19, 2006 11:10 am
by Carles
Mjcc,

Toni tiene razon. Da error en el emulador, pero no en la Pocket. Acabo de instalar el program,a en una pocket y me va fenomenal (como siempre :wink: ), pero en cambio me da error en el emulador.

Solucionado ! -> No hay problema en Pocket !

Posted: Tue Dec 19, 2006 11:16 am
by tsales
En mi aplicación estoy utilizando hasta 25 ficheros abiertos con sus respectivos CDX y todo funciona correctamente.

Saludos

Posted: Tue Dec 19, 2006 11:19 am
by Antonio Linares
Carles,

Gracias por la información, que bien que funcione correcto en el Pocket PC real :-)

De todas formas estamos buscando a ver si hay una forma de ampliarlo en el emulador.

Ya hemos mirado a ver si está el SetHandleCount() pero no, no está.

Posted: Tue Dec 19, 2006 11:30 am
by Antonio Linares
Buenas noticias :-)

El error sólo se produce al trabajar en la tarjeta de memoria.

Si la aplicación se copia al directorio raiz, por ejemplo, la aplicación funciona perfectamente. Este es un ejemplo:

Code: Select all

request DBFCDX

function Main()

   local n, cDbfName

   for n = 1 to 25
      cDbfName = CurDir() + "\_" + AllTrim( Str( n ) )
      DbCreate( cDbfName, { { "first", "C", 8, 0 } } )
      MsgInfo( cDbfName )
      USE ( cDbfName ) VIA "DBFCDX" NEW
      INDEX ON first to ( CurDir() + "\_" + AllTrim( Str( n ) ) )
   next

   MsgInfo( "ok" )

return nil

ok

Posted: Tue Dec 19, 2006 12:36 pm
by mjcc
A mi de da error en tanto en la pokect como en el emulador, y da igual que sea en la raiz que en el la pokect que en la tarjeta de memoria.

Posted: Tue Dec 19, 2006 2:00 pm
by Carles
Si al final del ejemplo de Antonio pones Msginfo( len(aGetWorkAreas()) ), veras como te da q estan las 25 areas abiertas. Verificado en Pocket.

Siau