Page 2 of 2

Re: Borrar gran cantidad de registro

Posted: Thu Nov 10, 2011 5:47 pm
by ACC69
ermatica wrote:Hola Manuel,

No se si ya lo tienes solucionado, de todas formas te comento.
Lo del indice en el caso que te expongo si sería obligatorio, pero usaria scope.

He montado una tabla con un indice (.NTX) con 300.000 registros, filtro entre los registros a borrar y en un ordenador en local los tiempos que me muestra
con un msgalert (Time() ) son de 14:57:35 y final 14:57:49. No se si es mucho. El código que usé es:

Code: Select all | Expand

 cAlias2:=OpenDbf(mPath_Fich+"FHCARCK1.DBF",5,.T.,.F.,.F.,{mPath_Fich+"FHCARCK1.NTX"},"DBFNTX")
  If cAlias2=""
     return nil
  endif
  Select (cAlias2)
  OrdsetFocus(1)
  dbgotop()

  ordscope(0,)  // quitar scope, filtro o rango
  ordscope(1,)
  dbgotop()

  nReg0 :=   1000
  nReg1 := 300000
 
  ordscope(0,nReg0)  // poner scope, filtro o rango
  ordscope(1,nReg1)
  dbgotop()

msgalert ( time() )
  Do While !Eof()
     Do While !Rlock()
      msgalert ("Registro en uso")
      Return
     Enddo
     (cAlias2)->(dbdelete())
     skip
  Enddo

msgalert ( time() )
 


Un cordial saludo,
Ernesto



Hola a todos, otra alternativa, es crear un browse, donde el usuario pueda seleccionar todos los registros a eliminar, o seleccionar algunos algunos registros a eliminar, yo tengo uno implementado en la clase de Hernan Cecarelli, pero a nivel de while, y no como yo el que se muestra la imagen, que he querido yo implementar,espero que alguien tenga implementado el browse parecido a la imagen, que subire al foro y lo puedan ver el ejemplo.

Image

http://imageshack.us/g/851/seleccion1.jpg/


Image

http://imageshack.us/photo/my-images/703/seleccion4.png/

Saludos

Atte: Adrian C. C.

acc69@hotmail.com