Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
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.
Indices !Deleted()
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Indices !Deleted()
Xevi,
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
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
Indices !Deleted()
Ignacio,
Si, veo que funciona correctamente, el caso es que estoy repasando que hago distinto, y no veo donde puedo tener el error, aunque estoy utilizando NTX.
Seguiré probando...
Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:43441cbc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
Si, veo que funciona correctamente, el caso es que estoy repasando que hago distinto, y no veo donde puedo tener el error, aunque estoy utilizando NTX.
Seguiré probando...
Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:43441cbc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Indices !Deleted()
Xevi,
>>Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
>>Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Lo hace el solito, es así de listo
No hace falta que bloquees utilizando los métodos AddNew, Edit y Update.
Un saludo
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=43443235@ozsrvnegro.ozlan.local...]43443235@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Si, veo que funciona correctamente, el caso es que estoy repasando que hago distinto, y no veo donde puedo tener el error, aunque estoy utilizando NTX.
Seguiré probando...
Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:43441cbc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
>>Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
>>Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Lo hace el solito, es así de listo

Un saludo
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:[email=43443235@ozsrvnegro.ozlan.local...]43443235@ozsrvnegro.ozlan.local...[/email]
Ignacio,
Si, veo que funciona correctamente, el caso es que estoy repasando que hago distinto, y no veo donde puedo tener el error, aunque estoy utilizando NTX.
Seguiré probando...
Por cierto... el el test DBFDATA2, no veo que se haga el bloqueo de registro al borrar ni al editar... ¿y eso???
Yo, cuando utilizo DataSets, debo bloquear el registro anteriormente, si abro el lShared a .T.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje news:43441cbc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Xevi,
Necesariamente cuando se borra un registro el DataSet se hace un simple Skip en la tabla, pues sino se mostraría el registro borrado en un DBBrowse, por ejemplo. En ningún momento nos vamos al final del fichero.
Acabo de modificar el ejemplo DBFDATA2 incluyendo en DbTest.prg:
Procedure Main()
SET DELETED ON
Application:cTitle := "DbfTest"
TForm1():New( Application ):Show()
Application:Run()
Return
Y además he simplificado el método Delete de TForm1 de la siguiente forma: (ya no hace falta posicionarse)
METHOD Delete() CLASS TForm1
if MsgYesNo( "Delete actual Record?" )
::oDataSet:Delete()
endif
RETURN NIL
Y funciona perfectamente, al menos aquí, tanto con recuperación de registros borrados como sin ella (lReUseDel).
Te importaría, utilizando como base este ejemplo, mostrar como se produce el error.
Gracias de antemano,
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje news:43441549$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
Desde que utilizo los índices con la cláusula !Deleted() para un buen comportamiento de los Browses, cuando elimino un registro se va al final del fichero, y claro no se me posiciona bien la parrilla del Browse, sinó que se va al final del fichero.
¿Hay alguna función/método en el DataSet/Browse que evite este comportamiento???
Yo de momento lo hago de la siguiente manera, pero por preguntar no me voy a quedar...
If !(::cAlias2)->( DbSeek( "A" + ::oDbfDataSet1:NUMERO ) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip() )
If (::oDbfDataSet1:Alias)->( !Eof() )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
Else
(::oDbfDataSet1:Alias)->( DbGoBottom() )
(::oDbfDataSet1:Alias)->( DbSkip(-1) )
nLloc := (::oDbfDataSet1:Alias)->( Recno() )
(::oDbfDataSet1:Alias)->( DbGoBottom() )
EndIf
(::oDbfDataSet1:Alias)->( DbDelete() )
(::oDbfDataSet1:Alias)->( If( nLloc<=0, DbGoTop(), DbGoto(nLloc) ) )
::oBrowse1:Refresh()
::Browse1Change()
EndIf
O sea, primero me guardo el Recno, salto al siguiente, elimino y vuelvo al registro guardado...
Gracias por las sugerencias que me podais reportar...
Un Saludo,
Xevi.
--
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