Página 1 de 1

Indices !Deleted()

Publicado: Mié Oct 05, 2005 8:02 pm
por Xevi
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.
--

Indices !Deleted()

Publicado: Mié Oct 05, 2005 8:34 pm
por ignacio
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.
--

Indices !Deleted()

Publicado: Mié Oct 05, 2005 10:06 pm
por Xevi
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.
--

Indices !Deleted()

Publicado: Jue Oct 06, 2005 9:47 am
por ignacio
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.
--