Hola,
Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino que
para saber que no existe usarás if !File(), el problema está en que esa
operación consume tiempo innecesario en un 99% de las veces, porque por
defecto debe existir, si luego abres en un proceso unas 50 dbf´s y estás en
un entorno de red o a través de internet algo más se nota.
Entonces si esto es así, me gustaría comentarte lo que había pensado:
un BEGIN SEQUENCE o un TRY CACH
open(dbf)
FALLA:
Si el código de error es "NO EXISTE"
Si bSinoExiste<>NIL // Si el
programador quiere hacer algo cuando no exista, crearla, copiarla, etc
eval( bSinoExiste )
open( dbf )
Finsi
Sino
Sigue con el tratamiento de error estandar de la clase en
estos momentos
Finsi
A ver que te parece, o si no, a ver si me puedes decir como implementarlo yo
derivando del metodo que abre la dbf.
Un Saludo,
Joaquín
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Sobre open Dataset
- ignacio
- Site Admin
- Mensajes: 9443
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Sobre open Dataset
Joaquin,
Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
cantidad de recursos.
De hecho con ADS no se hace la comprobación ya que puede ser que el usuario
no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
forma doy una mejor información del error. ¿No te parece?
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
> que
> para saber que no existe usarás if !File(), el problema está en que esa
> operación consume tiempo innecesario en un 99% de las veces, porque por
> defecto debe existir, si luego abres en un proceso unas 50 dbf´s y estás
> en
> un entorno de red o a través de internet algo más se nota.
>
> Entonces si esto es así, me gustaría comentarte lo que había pensado:
>
> un BEGIN SEQUENCE o un TRY CACH
>
> open(dbf)
>
> FALLA:
> Si el código de error es "NO EXISTE"
> Si bSinoExiste<>NIL // Si el
> programador quiere hacer algo cuando no exista, crearla, copiarla, etc
> eval( bSinoExiste )
> open( dbf )
> Finsi
> Sino
> Sigue con el tratamiento de error estandar de la clase
> en
> estos momentos
> Finsi
>
>
> A ver que te parece, o si no, a ver si me puedes decir como implementarlo
> yo
> derivando del metodo que abre la dbf.
>
>
> Un Saludo,
> Joaquín
>
>
Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
cantidad de recursos.
De hecho con ADS no se hace la comprobación ya que puede ser que el usuario
no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
forma doy una mejor información del error. ¿No te parece?
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
> que
> para saber que no existe usarás if !File(), el problema está en que esa
> operación consume tiempo innecesario en un 99% de las veces, porque por
> defecto debe existir, si luego abres en un proceso unas 50 dbf´s y estás
> en
> un entorno de red o a través de internet algo más se nota.
>
> Entonces si esto es así, me gustaría comentarte lo que había pensado:
>
> un BEGIN SEQUENCE o un TRY CACH
>
> open(dbf)
>
> FALLA:
> Si el código de error es "NO EXISTE"
> Si bSinoExiste<>NIL // Si el
> programador quiere hacer algo cuando no exista, crearla, copiarla, etc
> eval( bSinoExiste )
> open( dbf )
> Finsi
> Sino
> Sigue con el tratamiento de error estandar de la clase
> en
> estos momentos
> Finsi
>
>
> A ver que te parece, o si no, a ver si me puedes decir como implementarlo
> yo
> derivando del metodo que abre la dbf.
>
>
> Un Saludo,
> Joaquín
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Sobre open Dataset
Ignacio,
¿Has leído la forma que te planteo??
Das la información del error, el error sólo se produce en un 1% de ocasiones
y además dejas que sea el programador el que informe o no del error y que
actúe en consecuencia ejecucanto su codeblock.
Si no me he explicado bien en algun trozo del mensaje anterior, por favor,
dimeló.
Un Saludo y gracias,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
> cantidad de recursos.
>
> De hecho con ADS no se hace la comprobación ya que puede ser que el
usuario
> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
> forma doy una mejor información del error. ¿No te parece?
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> > Hola,
> >
> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
> > que
> > para saber que no existe usarás if !File(), el problema está en que esa
> > operación consume tiempo innecesario en un 99% de las veces, porque por
> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y estás
> > en
> > un entorno de red o a través de internet algo más se nota.
> >
> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
> >
> > un BEGIN SEQUENCE o un TRY CACH
> >
> > open(dbf)
> >
> > FALLA:
> > Si el código de error es "NO EXISTE"
> > Si bSinoExiste<>NIL // Si el
> > programador quiere hacer algo cuando no exista, crearla, copiarla, etc
> > eval( bSinoExiste )
> > open( dbf )
> > Finsi
> > Sino
> > Sigue con el tratamiento de error estandar de la clase
> > en
> > estos momentos
> > Finsi
> >
> >
> > A ver que te parece, o si no, a ver si me puedes decir como
implementarlo
> > yo
> > derivando del metodo que abre la dbf.
> >
> >
> > Un Saludo,
> > Joaquín
> >
> >
>
>
¿Has leído la forma que te planteo??
Das la información del error, el error sólo se produce en un 1% de ocasiones
y además dejas que sea el programador el que informe o no del error y que
actúe en consecuencia ejecucanto su codeblock.
Si no me he explicado bien en algun trozo del mensaje anterior, por favor,
dimeló.
Un Saludo y gracias,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
> cantidad de recursos.
>
> De hecho con ADS no se hace la comprobación ya que puede ser que el
usuario
> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
> forma doy una mejor información del error. ¿No te parece?
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> > Hola,
> >
> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
> > que
> > para saber que no existe usarás if !File(), el problema está en que esa
> > operación consume tiempo innecesario en un 99% de las veces, porque por
> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y estás
> > en
> > un entorno de red o a través de internet algo más se nota.
> >
> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
> >
> > un BEGIN SEQUENCE o un TRY CACH
> >
> > open(dbf)
> >
> > FALLA:
> > Si el código de error es "NO EXISTE"
> > Si bSinoExiste<>NIL // Si el
> > programador quiere hacer algo cuando no exista, crearla, copiarla, etc
> > eval( bSinoExiste )
> > open( dbf )
> > Finsi
> > Sino
> > Sigue con el tratamiento de error estandar de la clase
> > en
> > estos momentos
> > Finsi
> >
> >
> > A ver que te parece, o si no, a ver si me puedes decir como
implementarlo
> > yo
> > derivando del metodo que abre la dbf.
> >
> >
> > Un Saludo,
> > Joaquín
> >
> >
>
>
- ignacio
- Site Admin
- Mensajes: 9443
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Sobre open Dataset
Joaquin,
Mis motivos:
1) No creo que file() suponga mucha perdida de velocidad
2) El error es más preciso:
Error cuando el fichero no existe, para muestra este botón:
TDBFDATASET:_LOPEN(0)
Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
Argumentos: ()
(DOS Error 2)
Error cuando el fichero no se puede abrir en exclusivo:
TDBFDATASET:_LOPEN(0)
Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
Argumentos: ()
(DOS Error 32)
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>
> ¿Has leído la forma que te planteo??
>
> Das la información del error, el error sólo se produce en un 1% de
> ocasiones
> y además dejas que sea el programador el que informe o no del error y que
> actúe en consecuencia ejecucanto su codeblock.
>
> Si no me he explicado bien en algun trozo del mensaje anterior, por favor,
> dimeló.
>
> Un Saludo y gracias,
> Joaquín
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
>> cantidad de recursos.
>>
>> De hecho con ADS no se hace la comprobación ya que puede ser que el
> usuario
>> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
>> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
>> forma doy una mejor información del error. ¿No te parece?
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
>> > que
>> > para saber que no existe usarás if !File(), el problema está en que esa
>> > operación consume tiempo innecesario en un 99% de las veces, porque por
>> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
>> > estás
>> > en
>> > un entorno de red o a través de internet algo más se nota.
>> >
>> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
>> >
>> > un BEGIN SEQUENCE o un TRY CACH
>> >
>> > open(dbf)
>> >
>> > FALLA:
>> > Si el código de error es "NO EXISTE"
>> > Si bSinoExiste<>NIL // Si el
>> > programador quiere hacer algo cuando no exista, crearla, copiarla, etc
>> > eval( bSinoExiste )
>> > open( dbf )
>> > Finsi
>> > Sino
>> > Sigue con el tratamiento de error estandar de la
>> > clase
>> > en
>> > estos momentos
>> > Finsi
>> >
>> >
>> > A ver que te parece, o si no, a ver si me puedes decir como
> implementarlo
>> > yo
>> > derivando del metodo que abre la dbf.
>> >
>> >
>> > Un Saludo,
>> > Joaquín
>> >
>> >
>>
>>
>
>
Mis motivos:
1) No creo que file() suponga mucha perdida de velocidad
2) El error es más preciso:
Error cuando el fichero no existe, para muestra este botón:
TDBFDATASET:_LOPEN(0)
Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
Argumentos: ()
(DOS Error 2)
Error cuando el fichero no se puede abrir en exclusivo:
TDBFDATASET:_LOPEN(0)
Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
Argumentos: ()
(DOS Error 32)
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>
> ¿Has leído la forma que te planteo??
>
> Das la información del error, el error sólo se produce en un 1% de
> ocasiones
> y además dejas que sea el programador el que informe o no del error y que
> actúe en consecuencia ejecucanto su codeblock.
>
> Si no me he explicado bien en algun trozo del mensaje anterior, por favor,
> dimeló.
>
> Un Saludo y gracias,
> Joaquín
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> Nunca he hecho pruebas, pero me extraña que un simple File() consuma tal
>> cantidad de recursos.
>>
>> De hecho con ADS no se hace la comprobación ya que puede ser que el
> usuario
>> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
>> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
>> forma doy una mejor información del error. ¿No te parece?
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
>> > Hola,
>> >
>> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me imagino
>> > que
>> > para saber que no existe usarás if !File(), el problema está en que esa
>> > operación consume tiempo innecesario en un 99% de las veces, porque por
>> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
>> > estás
>> > en
>> > un entorno de red o a través de internet algo más se nota.
>> >
>> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
>> >
>> > un BEGIN SEQUENCE o un TRY CACH
>> >
>> > open(dbf)
>> >
>> > FALLA:
>> > Si el código de error es "NO EXISTE"
>> > Si bSinoExiste<>NIL // Si el
>> > programador quiere hacer algo cuando no exista, crearla, copiarla, etc
>> > eval( bSinoExiste )
>> > open( dbf )
>> > Finsi
>> > Sino
>> > Sigue con el tratamiento de error estandar de la
>> > clase
>> > en
>> > estos momentos
>> > Finsi
>> >
>> >
>> > A ver que te parece, o si no, a ver si me puedes decir como
> implementarlo
>> > yo
>> > derivando del metodo que abre la dbf.
>> >
>> >
>> > Un Saludo,
>> > Joaquín
>> >
>> >
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Sobre open Dataset
Ignacio,
1) Si planteas hacer cosas a través de internet si supone pérdida de tiempo
para un 1% de veces en que ocurrirá.
2) Lo que propongo es que después de cualquier error como el que me
muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
case con los tipos de errores que controlas ahora mismo, pero sólo cuando se
produzca un error, con BEGIN SEQUENCE por ejemplo.
Y por último, si para nada vez bien este razonamiento, permitemé como
programador al menos que si se produce un error ejecutes un codeblock de
usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de error
y la descripción, abortar el open() y si yo como programador veo que soy
capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
funciona como tú quieres pero dejas la puerta abierta a que cada cual pueda
enfocar el problema desde distintos puntos de vista.
Un Saludo y gracias,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Mis motivos:
>
> 1) No creo que file() suponga mucha perdida de velocidad
> 2) El error es más preciso:
>
> Error cuando el fichero no existe, para muestra este botón:
>
> TDBFDATASET:_LOPEN(0)
> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
> Argumentos: ()
> (DOS Error 2)
>
> Error cuando el fichero no se puede abrir en exclusivo:
>
> TDBFDATASET:_LOPEN(0)
> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
> Argumentos: ()
> (DOS Error 32)
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > ¿Has leído la forma que te planteo??
> >
> > Das la información del error, el error sólo se produce en un 1% de
> > ocasiones
> > y además dejas que sea el programador el que informe o no del error y
que
> > actúe en consecuencia ejecucanto su codeblock.
> >
> > Si no me he explicado bien en algun trozo del mensaje anterior, por
favor,
> > dimeló.
> >
> > Un Saludo y gracias,
> > Joaquín
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
tal
> >> cantidad de recursos.
> >>
> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
> > usuario
> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
> >> forma doy una mejor información del error. ¿No te parece?
> >>
> >> Un saludo,
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> >> > Hola,
> >> >
> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
imagino
> >> > que
> >> > para saber que no existe usarás if !File(), el problema está en que
esa
> >> > operación consume tiempo innecesario en un 99% de las veces, porque
por
> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
> >> > estás
> >> > en
> >> > un entorno de red o a través de internet algo más se nota.
> >> >
> >> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
> >> >
> >> > un BEGIN SEQUENCE o un TRY CACH
> >> >
> >> > open(dbf)
> >> >
> >> > FALLA:
> >> > Si el código de error es "NO EXISTE"
> >> > Si bSinoExiste<>NIL // Si
el
> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
etc
> >> > eval( bSinoExiste )
> >> > open( dbf )
> >> > Finsi
> >> > Sino
> >> > Sigue con el tratamiento de error estandar de la
> >> > clase
> >> > en
> >> > estos momentos
> >> > Finsi
> >> >
> >> >
> >> > A ver que te parece, o si no, a ver si me puedes decir como
> > implementarlo
> >> > yo
> >> > derivando del metodo que abre la dbf.
> >> >
> >> >
> >> > Un Saludo,
> >> > Joaquín
> >> >
> >> >
> >>
> >>
> >
> >
>
>
1) Si planteas hacer cosas a través de internet si supone pérdida de tiempo
para un 1% de veces en que ocurrirá.
2) Lo que propongo es que después de cualquier error como el que me
muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
case con los tipos de errores que controlas ahora mismo, pero sólo cuando se
produzca un error, con BEGIN SEQUENCE por ejemplo.
Y por último, si para nada vez bien este razonamiento, permitemé como
programador al menos que si se produce un error ejecutes un codeblock de
usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de error
y la descripción, abortar el open() y si yo como programador veo que soy
capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
funciona como tú quieres pero dejas la puerta abierta a que cada cual pueda
enfocar el problema desde distintos puntos de vista.
Un Saludo y gracias,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> Mis motivos:
>
> 1) No creo que file() suponga mucha perdida de velocidad
> 2) El error es más preciso:
>
> Error cuando el fichero no existe, para muestra este botón:
>
> TDBFDATASET:_LOPEN(0)
> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
> Argumentos: ()
> (DOS Error 2)
>
> Error cuando el fichero no se puede abrir en exclusivo:
>
> TDBFDATASET:_LOPEN(0)
> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
> Argumentos: ()
> (DOS Error 32)
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > ¿Has leído la forma que te planteo??
> >
> > Das la información del error, el error sólo se produce en un 1% de
> > ocasiones
> > y además dejas que sea el programador el que informe o no del error y
que
> > actúe en consecuencia ejecucanto su codeblock.
> >
> > Si no me he explicado bien en algun trozo del mensaje anterior, por
favor,
> > dimeló.
> >
> > Un Saludo y gracias,
> > Joaquín
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
tal
> >> cantidad de recursos.
> >>
> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
> > usuario
> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de esta
> >> forma doy una mejor información del error. ¿No te parece?
> >>
> >> Un saludo,
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> >> > Hola,
> >> >
> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
imagino
> >> > que
> >> > para saber que no existe usarás if !File(), el problema está en que
esa
> >> > operación consume tiempo innecesario en un 99% de las veces, porque
por
> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
> >> > estás
> >> > en
> >> > un entorno de red o a través de internet algo más se nota.
> >> >
> >> > Entonces si esto es así, me gustaría comentarte lo que había pensado:
> >> >
> >> > un BEGIN SEQUENCE o un TRY CACH
> >> >
> >> > open(dbf)
> >> >
> >> > FALLA:
> >> > Si el código de error es "NO EXISTE"
> >> > Si bSinoExiste<>NIL // Si
el
> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
etc
> >> > eval( bSinoExiste )
> >> > open( dbf )
> >> > Finsi
> >> > Sino
> >> > Sigue con el tratamiento de error estandar de la
> >> > clase
> >> > en
> >> > estos momentos
> >> > Finsi
> >> >
> >> >
> >> > A ver que te parece, o si no, a ver si me puedes decir como
> > implementarlo
> >> > yo
> >> > derivando del metodo que abre la dbf.
> >> >
> >> >
> >> > Un Saludo,
> >> > Joaquín
> >> >
> >> >
> >>
> >>
> >
> >
>
>
- ignacio
- Site Admin
- Mensajes: 9443
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Sobre open Dataset
Joaquin,
> 1) Si planteas hacer cosas a través de internet si supone pérdida de
> tiempo
> para un 1% de veces en que ocurrirá.
No creo que mucha gente se le ocurra abrir una DBF a través de una VPN, pero
es posible.
> 2) Lo que propongo es que después de cualquier error como el que me
> muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
> case con los tipos de errores que controlas ahora mismo, pero sólo cuando
> se
> produzca un error, con BEGIN SEQUENCE por ejemplo.
No estoy de acuerdo, Creo que no debo atrapar errores de ejecución, es
responsabilidad del usuario hacerlo.
> Y por último, si para nada vez bien este razonamiento, permitemé como
> programador al menos que si se produce un error ejecutes un codeblock de
> usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> error
> y la descripción, abortar el open() y si yo como programador veo que soy
> capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> funciona como tú quieres pero dejas la puerta abierta a que cada cual
> pueda
> enfocar el problema desde distintos puntos de vista.
Soy enemigo declarado de los codeblocks
Ya te habrás dado cuenta de que
en Xailer practicamente no se usan.
Ahora mismo según esta la clase si pones lDisplayErrors a FALSO y
lAbortOnErrors a TRUE, con este sencillo código tu controlas todo:
TRY
oDataSet:Open()
CATCH oError
FINALLY
END
Muchos de los errores que se producen en los DataControls son generados
adrede y creo que puede ser interesante un evento OnError( oError ) que si
retorna FALSO paralizase el disparo del error. Logicamnente SOLO funcionaria
con los errores generados por la clase TDataSource y TDataSet lo cual puede
liar a más de uno y por lo tanto no lo veo claro. A lo mejor con otro nombre
como OnDataError pudierá tener más sentido.
Por otra parte, no tengo ningún interés en dejar lo del File() en el metodo
Open, si nadie tiene inconveniente en que se haga lo quitaré. Me gustaría
oir opiniones al respecto.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42b1babc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>
> 1) Si planteas hacer cosas a través de internet si supone pérdida de
> tiempo
> para un 1% de veces en que ocurrirá.
>
> 2) Lo que propongo es que después de cualquier error como el que me
> muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
> case con los tipos de errores que controlas ahora mismo, pero sólo cuando
> se
> produzca un error, con BEGIN SEQUENCE por ejemplo.
>
> Y por último, si para nada vez bien este razonamiento, permitemé como
> programador al menos que si se produce un error ejecutes un codeblock de
> usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> error
> y la descripción, abortar el open() y si yo como programador veo que soy
> capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> funciona como tú quieres pero dejas la puerta abierta a que cada cual
> pueda
> enfocar el problema desde distintos puntos de vista.
>
>
> Un Saludo y gracias,
> Joaquín
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> Mis motivos:
>>
>> 1) No creo que file() suponga mucha perdida de velocidad
>> 2) El error es más preciso:
>>
>> Error cuando el fichero no existe, para muestra este botón:
>>
>> TDBFDATASET:_LOPEN(0)
>> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
>> Argumentos: ()
>> (DOS Error 2)
>>
>> Error cuando el fichero no se puede abrir en exclusivo:
>>
>> TDBFDATASET:_LOPEN(0)
>> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
>> Argumentos: ()
>> (DOS Error 32)
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Ignacio,
>> >
>> > ¿Has leído la forma que te planteo??
>> >
>> > Das la información del error, el error sólo se produce en un 1% de
>> > ocasiones
>> > y además dejas que sea el programador el que informe o no del error y
> que
>> > actúe en consecuencia ejecucanto su codeblock.
>> >
>> > Si no me he explicado bien en algun trozo del mensaje anterior, por
> favor,
>> > dimeló.
>> >
>> > Un Saludo y gracias,
>> > Joaquín
>> >
>> >
>> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
> mensaje
>> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> >> Joaquin,
>> >>
>> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
> tal
>> >> cantidad de recursos.
>> >>
>> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
>> > usuario
>> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
>> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de
>> >> esta
>> >> forma doy una mejor información del error. ¿No te parece?
>> >>
>> >> Un saludo,
>> >>
>> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
>> >> > Hola,
>> >> >
>> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
> imagino
>> >> > que
>> >> > para saber que no existe usarás if !File(), el problema está en que
> esa
>> >> > operación consume tiempo innecesario en un 99% de las veces, porque
> por
>> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
>> >> > estás
>> >> > en
>> >> > un entorno de red o a través de internet algo más se nota.
>> >> >
>> >> > Entonces si esto es así, me gustaría comentarte lo que había
>> >> > pensado:
>> >> >
>> >> > un BEGIN SEQUENCE o un TRY CACH
>> >> >
>> >> > open(dbf)
>> >> >
>> >> > FALLA:
>> >> > Si el código de error es "NO EXISTE"
>> >> > Si bSinoExiste<>NIL // Si
> el
>> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
> etc
>> >> > eval( bSinoExiste )
>> >> > open( dbf )
>> >> > Finsi
>> >> > Sino
>> >> > Sigue con el tratamiento de error estandar de la
>> >> > clase
>> >> > en
>> >> > estos momentos
>> >> > Finsi
>> >> >
>> >> >
>> >> > A ver que te parece, o si no, a ver si me puedes decir como
>> > implementarlo
>> >> > yo
>> >> > derivando del metodo que abre la dbf.
>> >> >
>> >> >
>> >> > Un Saludo,
>> >> > Joaquín
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>
> 1) Si planteas hacer cosas a través de internet si supone pérdida de
> tiempo
> para un 1% de veces en que ocurrirá.
No creo que mucha gente se le ocurra abrir una DBF a través de una VPN, pero
es posible.
> 2) Lo que propongo es que después de cualquier error como el que me
> muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
> case con los tipos de errores que controlas ahora mismo, pero sólo cuando
> se
> produzca un error, con BEGIN SEQUENCE por ejemplo.
No estoy de acuerdo, Creo que no debo atrapar errores de ejecución, es
responsabilidad del usuario hacerlo.
> Y por último, si para nada vez bien este razonamiento, permitemé como
> programador al menos que si se produce un error ejecutes un codeblock de
> usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> error
> y la descripción, abortar el open() y si yo como programador veo que soy
> capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> funciona como tú quieres pero dejas la puerta abierta a que cada cual
> pueda
> enfocar el problema desde distintos puntos de vista.
Soy enemigo declarado de los codeblocks

en Xailer practicamente no se usan.
Ahora mismo según esta la clase si pones lDisplayErrors a FALSO y
lAbortOnErrors a TRUE, con este sencillo código tu controlas todo:
TRY
oDataSet:Open()
CATCH oError
FINALLY
END
Muchos de los errores que se producen en los DataControls son generados
adrede y creo que puede ser interesante un evento OnError( oError ) que si
retorna FALSO paralizase el disparo del error. Logicamnente SOLO funcionaria
con los errores generados por la clase TDataSource y TDataSet lo cual puede
liar a más de uno y por lo tanto no lo veo claro. A lo mejor con otro nombre
como OnDataError pudierá tener más sentido.
Por otra parte, no tengo ningún interés en dejar lo del File() en el metodo
Open, si nadie tiene inconveniente en que se haga lo quitaré. Me gustaría
oir opiniones al respecto.
Un saludo,
"Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
news:42b1babc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Ignacio,
>
> 1) Si planteas hacer cosas a través de internet si supone pérdida de
> tiempo
> para un 1% de veces en que ocurrirá.
>
> 2) Lo que propongo es que después de cualquier error como el que me
> muestras, es cuando yo haría if !file(X) para saber si no existe, o un Do
> case con los tipos de errores que controlas ahora mismo, pero sólo cuando
> se
> produzca un error, con BEGIN SEQUENCE por ejemplo.
>
> Y por último, si para nada vez bien este razonamiento, permitemé como
> programador al menos que si se produce un error ejecutes un codeblock de
> usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> error
> y la descripción, abortar el open() y si yo como programador veo que soy
> capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> funciona como tú quieres pero dejas la puerta abierta a que cada cual
> pueda
> enfocar el problema desde distintos puntos de vista.
>
>
> Un Saludo y gracias,
> Joaquín
>
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Joaquin,
>>
>> Mis motivos:
>>
>> 1) No creo que file() suponga mucha perdida de velocidad
>> 2) El error es más preciso:
>>
>> Error cuando el fichero no existe, para muestra este botón:
>>
>> TDBFDATASET:_LOPEN(0)
>> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
>> Argumentos: ()
>> (DOS Error 2)
>>
>> Error cuando el fichero no se puede abrir en exclusivo:
>>
>> TDBFDATASET:_LOPEN(0)
>> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
>> Argumentos: ()
>> (DOS Error 32)
>>
>> Un saludo,
>>
>> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> > Ignacio,
>> >
>> > ¿Has leído la forma que te planteo??
>> >
>> > Das la información del error, el error sólo se produce en un 1% de
>> > ocasiones
>> > y además dejas que sea el programador el que informe o no del error y
> que
>> > actúe en consecuencia ejecucanto su codeblock.
>> >
>> > Si no me he explicado bien en algun trozo del mensaje anterior, por
> favor,
>> > dimeló.
>> >
>> > Un Saludo y gracias,
>> > Joaquín
>> >
>> >
>> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
> mensaje
>> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> >> Joaquin,
>> >>
>> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
> tal
>> >> cantidad de recursos.
>> >>
>> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
>> > usuario
>> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck a
>> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de
>> >> esta
>> >> forma doy una mejor información del error. ¿No te parece?
>> >>
>> >> Un saludo,
>> >>
>> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
>> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
>> >> > Hola,
>> >> >
>> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
> imagino
>> >> > que
>> >> > para saber que no existe usarás if !File(), el problema está en que
> esa
>> >> > operación consume tiempo innecesario en un 99% de las veces, porque
> por
>> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
>> >> > estás
>> >> > en
>> >> > un entorno de red o a través de internet algo más se nota.
>> >> >
>> >> > Entonces si esto es así, me gustaría comentarte lo que había
>> >> > pensado:
>> >> >
>> >> > un BEGIN SEQUENCE o un TRY CACH
>> >> >
>> >> > open(dbf)
>> >> >
>> >> > FALLA:
>> >> > Si el código de error es "NO EXISTE"
>> >> > Si bSinoExiste<>NIL // Si
> el
>> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
> etc
>> >> > eval( bSinoExiste )
>> >> > open( dbf )
>> >> > Finsi
>> >> > Sino
>> >> > Sigue con el tratamiento de error estandar de la
>> >> > clase
>> >> > en
>> >> > estos momentos
>> >> > Finsi
>> >> >
>> >> >
>> >> > A ver que te parece, o si no, a ver si me puedes decir como
>> > implementarlo
>> >> > yo
>> >> > derivando del metodo que abre la dbf.
>> >> >
>> >> >
>> >> > Un Saludo,
>> >> > Joaquín
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Sobre open Dataset
Ignacio,
> No creo que mucha gente se le ocurra abrir una DBF a través de una VPN,
pero
> es posible.
¿Por qué? Las Dbf´s no pueden usarse a través de internet con ADS por
ejemplo? No veo muy acertado ese razonamiento, es posible, y además cada uno
puede usar los dataset´s como se le ocurra, esa es la idea ¿no?
Respecto al resto, Sí, veo muy bien en el momento del open() que me permitas
hacer un TRY CATCH, y que por supuesto se quite lo del !file(), así queda
como responsabilidad del programador y según para lo que le interese usarlo
o no, pero como ya tiene el control de errores en sus manos, la dataset
queda mucho más flexible, gracias!
Y por último, tendrías inconveniente en enviarme el código fuente del método
open() del la TDbfdataset ??? y así, aparte de estar seguro que hace
exactamente en la apertura, a unas malas puedo derivar el método, hacer lo
que yo quiera y luego llamar a Super:Open
Perdona por las molestias, pero es que soy muy "miedica" con las bases de
datos en las aplicaciones, ya que creo son una parte muy fundamental de un
programa para que las cosas vayan bien.
Un Saludo,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b29616$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> > 1) Si planteas hacer cosas a través de internet si supone pérdida de
> > tiempo
> > para un 1% de veces en que ocurrirá.
>
> No creo que mucha gente se le ocurra abrir una DBF a través de una VPN,
pero
> es posible.
>
> > 2) Lo que propongo es que después de cualquier error como el que me
> > muestras, es cuando yo haría if !file(X) para saber si no existe, o un
Do
> > case con los tipos de errores que controlas ahora mismo, pero sólo
cuando
> > se
> > produzca un error, con BEGIN SEQUENCE por ejemplo.
>
> No estoy de acuerdo, Creo que no debo atrapar errores de ejecución, es
> responsabilidad del usuario hacerlo.
>
> > Y por último, si para nada vez bien este razonamiento, permitemé como
> > programador al menos que si se produce un error ejecutes un codeblock de
> > usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> > error
> > y la descripción, abortar el open() y si yo como programador veo que soy
> > capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> > vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> > funciona como tú quieres pero dejas la puerta abierta a que cada cual
> > pueda
> > enfocar el problema desde distintos puntos de vista.
>
> Soy enemigo declarado de los codeblocks
Ya te habrás dado cuenta de
que
> en Xailer practicamente no se usan.
>
> Ahora mismo según esta la clase si pones lDisplayErrors a FALSO y
> lAbortOnErrors a TRUE, con este sencillo código tu controlas todo:
>
> TRY
> oDataSet:Open()
> CATCH oError
>
> FINALLY
>
> END
>
> Muchos de los errores que se producen en los DataControls son generados
> adrede y creo que puede ser interesante un evento OnError( oError ) que si
> retorna FALSO paralizase el disparo del error. Logicamnente SOLO
funcionaria
> con los errores generados por la clase TDataSource y TDataSet lo cual
puede
> liar a más de uno y por lo tanto no lo veo claro. A lo mejor con otro
nombre
> como OnDataError pudierá tener más sentido.
>
> Por otra parte, no tengo ningún interés en dejar lo del File() en el
metodo
> Open, si nadie tiene inconveniente en que se haga lo quitaré. Me gustaría
> oir opiniones al respecto.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42b1babc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > 1) Si planteas hacer cosas a través de internet si supone pérdida de
> > tiempo
> > para un 1% de veces en que ocurrirá.
> >
> > 2) Lo que propongo es que después de cualquier error como el que me
> > muestras, es cuando yo haría if !file(X) para saber si no existe, o un
Do
> > case con los tipos de errores que controlas ahora mismo, pero sólo
cuando
> > se
> > produzca un error, con BEGIN SEQUENCE por ejemplo.
> >
> > Y por último, si para nada vez bien este razonamiento, permitemé como
> > programador al menos que si se produce un error ejecutes un codeblock de
> > usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> > error
> > y la descripción, abortar el open() y si yo como programador veo que soy
> > capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> > vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> > funciona como tú quieres pero dejas la puerta abierta a que cada cual
> > pueda
> > enfocar el problema desde distintos puntos de vista.
> >
> >
> > Un Saludo y gracias,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> Mis motivos:
> >>
> >> 1) No creo que file() suponga mucha perdida de velocidad
> >> 2) El error es más preciso:
> >>
> >> Error cuando el fichero no existe, para muestra este botón:
> >>
> >> TDBFDATASET:_LOPEN(0)
> >> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
> >> Argumentos: ()
> >> (DOS Error 2)
> >>
> >> Error cuando el fichero no se puede abrir en exclusivo:
> >>
> >> TDBFDATASET:_LOPEN(0)
> >> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
> >> Argumentos: ()
> >> (DOS Error 32)
> >>
> >> Un saludo,
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> > Ignacio,
> >> >
> >> > ¿Has leído la forma que te planteo??
> >> >
> >> > Das la información del error, el error sólo se produce en un 1% de
> >> > ocasiones
> >> > y además dejas que sea el programador el que informe o no del error y
> > que
> >> > actúe en consecuencia ejecucanto su codeblock.
> >> >
> >> > Si no me he explicado bien en algun trozo del mensaje anterior, por
> > favor,
> >> > dimeló.
> >> >
> >> > Un Saludo y gracias,
> >> > Joaquín
> >> >
> >> >
> >> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
> > mensaje
> >> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> >> Joaquin,
> >> >>
> >> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
> > tal
> >> >> cantidad de recursos.
> >> >>
> >> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
> >> > usuario
> >> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck
a
> >> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de
> >> >> esta
> >> >> forma doy una mejor información del error. ¿No te parece?
> >> >>
> >> >> Un saludo,
> >> >>
> >> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> >> >> > Hola,
> >> >> >
> >> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
> > imagino
> >> >> > que
> >> >> > para saber que no existe usarás if !File(), el problema está en
que
> > esa
> >> >> > operación consume tiempo innecesario en un 99% de las veces,
porque
> > por
> >> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
> >> >> > estás
> >> >> > en
> >> >> > un entorno de red o a través de internet algo más se nota.
> >> >> >
> >> >> > Entonces si esto es así, me gustaría comentarte lo que había
> >> >> > pensado:
> >> >> >
> >> >> > un BEGIN SEQUENCE o un TRY CACH
> >> >> >
> >> >> > open(dbf)
> >> >> >
> >> >> > FALLA:
> >> >> > Si el código de error es "NO EXISTE"
> >> >> > Si bSinoExiste<>NIL //
Si
> > el
> >> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
> > etc
> >> >> > eval( bSinoExiste )
> >> >> > open( dbf )
> >> >> > Finsi
> >> >> > Sino
> >> >> > Sigue con el tratamiento de error estandar de la
> >> >> > clase
> >> >> > en
> >> >> > estos momentos
> >> >> > Finsi
> >> >> >
> >> >> >
> >> >> > A ver que te parece, o si no, a ver si me puedes decir como
> >> > implementarlo
> >> >> > yo
> >> >> > derivando del metodo que abre la dbf.
> >> >> >
> >> >> >
> >> >> > Un Saludo,
> >> >> > Joaquín
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>
> No creo que mucha gente se le ocurra abrir una DBF a través de una VPN,
pero
> es posible.
¿Por qué? Las Dbf´s no pueden usarse a través de internet con ADS por
ejemplo? No veo muy acertado ese razonamiento, es posible, y además cada uno
puede usar los dataset´s como se le ocurra, esa es la idea ¿no?

Respecto al resto, Sí, veo muy bien en el momento del open() que me permitas
hacer un TRY CATCH, y que por supuesto se quite lo del !file(), así queda
como responsabilidad del programador y según para lo que le interese usarlo
o no, pero como ya tiene el control de errores en sus manos, la dataset
queda mucho más flexible, gracias!
Y por último, tendrías inconveniente en enviarme el código fuente del método
open() del la TDbfdataset ??? y así, aparte de estar seguro que hace
exactamente en la apertura, a unas malas puedo derivar el método, hacer lo
que yo quiera y luego llamar a Super:Open
Perdona por las molestias, pero es que soy muy "miedica" con las bases de
datos en las aplicaciones, ya que creo son una parte muy fundamental de un
programa para que las cosas vayan bien.
Un Saludo,
Joaquín
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:42b29616$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Joaquin,
>
> > 1) Si planteas hacer cosas a través de internet si supone pérdida de
> > tiempo
> > para un 1% de veces en que ocurrirá.
>
> No creo que mucha gente se le ocurra abrir una DBF a través de una VPN,
pero
> es posible.
>
> > 2) Lo que propongo es que después de cualquier error como el que me
> > muestras, es cuando yo haría if !file(X) para saber si no existe, o un
Do
> > case con los tipos de errores que controlas ahora mismo, pero sólo
cuando
> > se
> > produzca un error, con BEGIN SEQUENCE por ejemplo.
>
> No estoy de acuerdo, Creo que no debo atrapar errores de ejecución, es
> responsabilidad del usuario hacerlo.
>
> > Y por último, si para nada vez bien este razonamiento, permitemé como
> > programador al menos que si se produce un error ejecutes un codeblock de
> > usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> > error
> > y la descripción, abortar el open() y si yo como programador veo que soy
> > capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> > vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> > funciona como tú quieres pero dejas la puerta abierta a que cada cual
> > pueda
> > enfocar el problema desde distintos puntos de vista.
>
> Soy enemigo declarado de los codeblocks

que
> en Xailer practicamente no se usan.
>
> Ahora mismo según esta la clase si pones lDisplayErrors a FALSO y
> lAbortOnErrors a TRUE, con este sencillo código tu controlas todo:
>
> TRY
> oDataSet:Open()
> CATCH oError
>
> FINALLY
>
> END
>
> Muchos de los errores que se producen en los DataControls son generados
> adrede y creo que puede ser interesante un evento OnError( oError ) que si
> retorna FALSO paralizase el disparo del error. Logicamnente SOLO
funcionaria
> con los errores generados por la clase TDataSource y TDataSet lo cual
puede
> liar a más de uno y por lo tanto no lo veo claro. A lo mejor con otro
nombre
> como OnDataError pudierá tener más sentido.
>
> Por otra parte, no tengo ningún interés en dejar lo del File() en el
metodo
> Open, si nadie tiene inconveniente en que se haga lo quitaré. Me gustaría
> oir opiniones al respecto.
>
> Un saludo,
>
> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> news:42b1babc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> > Ignacio,
> >
> > 1) Si planteas hacer cosas a través de internet si supone pérdida de
> > tiempo
> > para un 1% de veces en que ocurrirá.
> >
> > 2) Lo que propongo es que después de cualquier error como el que me
> > muestras, es cuando yo haría if !file(X) para saber si no existe, o un
Do
> > case con los tipos de errores que controlas ahora mismo, pero sólo
cuando
> > se
> > produzca un error, con BEGIN SEQUENCE por ejemplo.
> >
> > Y por último, si para nada vez bien este razonamiento, permitemé como
> > programador al menos que si se produce un error ejecutes un codeblock de
> > usuario, con el cual, yo haga lo que quiera, podrías pasar el tipo de
> > error
> > y la descripción, abortar el open() y si yo como programador veo que soy
> > capaz de subsanar el problema (por ejemplo, creo el dbf que no existe)
> > vuelvo a llamar al open(), bajo mi responsabilidad, con ello, la clase
> > funciona como tú quieres pero dejas la puerta abierta a que cada cual
> > pueda
> > enfocar el problema desde distintos puntos de vista.
> >
> >
> > Un Saludo y gracias,
> > Joaquín
> >
> >
> >
> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
mensaje
> > news:42b16b72$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> Joaquin,
> >>
> >> Mis motivos:
> >>
> >> 1) No creo que file() suponga mucha perdida de velocidad
> >> 2) El error es más preciso:
> >>
> >> Error cuando el fichero no existe, para muestra este botón:
> >>
> >> TDBFDATASET:_LOPEN(0)
> >> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..dd.Dbf
> >> Argumentos: ()
> >> (DOS Error 2)
> >>
> >> Error cuando el fichero no se puede abrir en exclusivo:
> >>
> >> TDBFDATASET:_LOPEN(0)
> >> Error DBFCDX/1001 Open error: C:Xailer2pruebasTest..customer.Dbf
> >> Argumentos: ()
> >> (DOS Error 32)
> >>
> >> Un saludo,
> >>
> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> news:42b15744$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> > Ignacio,
> >> >
> >> > ¿Has leído la forma que te planteo??
> >> >
> >> > Das la información del error, el error sólo se produce en un 1% de
> >> > ocasiones
> >> > y además dejas que sea el programador el que informe o no del error y
> > que
> >> > actúe en consecuencia ejecucanto su codeblock.
> >> >
> >> > Si no me he explicado bien en algun trozo del mensaje anterior, por
> > favor,
> >> > dimeló.
> >> >
> >> > Un Saludo y gracias,
> >> > Joaquín
> >> >
> >> >
> >> > "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
> > mensaje
> >> > news:42b146e0$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> >> >> Joaquin,
> >> >>
> >> >> Nunca he hecho pruebas, pero me extraña que un simple File() consuma
> > tal
> >> >> cantidad de recursos.
> >> >>
> >> >> De hecho con ADS no se hace la comprobación ya que puede ser que el
> >> > usuario
> >> >> no tenga derechos en ese directorio y se utilice ADS con lRightCheck
a
> >> >> falso. Por lo tanto no me costaría mucho quitarlo, sin embargo, de
> >> >> esta
> >> >> forma doy una mejor información del error. ¿No te parece?
> >> >>
> >> >> Un saludo,
> >> >>
> >> >> "Joaquín Martínez" <jmartial@interbook.net> escribió en el mensaje
> >> >> news:[email=42b13ca7@ozsrvnegro.ozlan.local...]42b13ca7@ozsrvnegro.ozlan.local...[/email]
> >> >> > Hola,
> >> >> >
> >> >> > Ignacio aunque no tengo los fuentes de cuando se abre un DBF me
> > imagino
> >> >> > que
> >> >> > para saber que no existe usarás if !File(), el problema está en
que
> > esa
> >> >> > operación consume tiempo innecesario en un 99% de las veces,
porque
> > por
> >> >> > defecto debe existir, si luego abres en un proceso unas 50 dbf´s y
> >> >> > estás
> >> >> > en
> >> >> > un entorno de red o a través de internet algo más se nota.
> >> >> >
> >> >> > Entonces si esto es así, me gustaría comentarte lo que había
> >> >> > pensado:
> >> >> >
> >> >> > un BEGIN SEQUENCE o un TRY CACH
> >> >> >
> >> >> > open(dbf)
> >> >> >
> >> >> > FALLA:
> >> >> > Si el código de error es "NO EXISTE"
> >> >> > Si bSinoExiste<>NIL //
Si
> > el
> >> >> > programador quiere hacer algo cuando no exista, crearla, copiarla,
> > etc
> >> >> > eval( bSinoExiste )
> >> >> > open( dbf )
> >> >> > Finsi
> >> >> > Sino
> >> >> > Sigue con el tratamiento de error estandar de la
> >> >> > clase
> >> >> > en
> >> >> > estos momentos
> >> >> > Finsi
> >> >> >
> >> >> >
> >> >> > A ver que te parece, o si no, a ver si me puedes decir como
> >> > implementarlo
> >> >> > yo
> >> >> > derivando del metodo que abre la dbf.
> >> >> >
> >> >> >
> >> >> > Un Saludo,
> >> >> > Joaquín
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>