FoxPro/Visual FoxPro - repla en consecutivo

   
Vista:

repla en consecutivo

Publicado por Jack jacktor100@hotmail.com (1 intervención) el 12/07/2017 22:06:47
Buen dia expertos, alguien me puede ayudar con lo siguiente:, tengo una tabla con un id que deberia ser un numero consecutivo, pero tengo en ese id duplicados, como hago un repla asginandole un numero consecutivo pero sin duplicados, la tabla tiene 1000 registros quiero hacer el repla y colocarle el consecutivo sin duplicarlo.

muchas gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

repla en consecutivo

Publicado por Fidel José (556 intervenciones) el 12/07/2017 23:03:57
Problemas a resolver, antes que inventar otra cosa:
1) Si hay que respetar los consecutivos que ya existen (sería obvio si el sistema está en producción y se han generado operaciones que consideran esos consecutivos)
2) Saber con qué se relacionan esos ID que están duplicados, y en su caso, identficar a qué ID corresponden realmente. (evaluación de impacto)
También puede ocurrir que los registros con ID duplicados sean meramente registros duplicados. No aclaras ese tema.

Nota:
En un ambiente multiusuario, los consecutivos deben estar una tabla de consecutivos, que tenga, cuando menos, un código de identificación de que se trata, una descripción del tema y el últmo número generado. El id que quedará grabado se asigna en el momento en que se guarda la operación, bloqueando la tabla, avanzando el numerador y desbloqueando.
Con un poco más de complejidad, puedes incluir en la tabla de consecutivos cual es la tabla maestra correspondiente y su índice. De esta forma tienes con qué comprobar fácilmente que los consecutivos sean correctos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abel

repla en consecutivo

Publicado por Abel (112 intervenciones) el 13/07/2017 15:01:51
Hola Jack; es muy acertado lo que dice Fidel José a tener en cuenta; sin embargo el código es el siguiente para renumerar automáticamente el ID (numérico), reemplazando los valores repetidos por el último número de ID hallado (+1) .
Puedes probarlo con tranquilidad ya que no reemplaza directamente tus datos de la tabla sino que crea una tabla cursor con los datos de la misma y hace todo el trabajo sobre ésta última; si te queda como lo deseas puedes importar todo o bien cambiar el método para que el cálculo lo aplique directamente sobre la tabla.

NOTA: <Tabla> reemplaza por el nombre de la tabla e <ID> reemplaza por el nombre del campo ID.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* --- Código. ---
Use <Tabla> In 0                 && Abrir la tabla a reordenar.
Select Select(1)                   && Crear una tabla tipo cursor de nombre "csrRenum".
Select * From <Tabla> Order By <Id> Into Cursor csrRenum Readwrite
Calculate Max(<Id>) To nUltimo     && Obtiene el último número de ID.
nCompara = 0
Scan
    nLeeid = <Id>
    If nCompara=nLeeid
        nUltimo = nUltimo + 1
        Replace <Id> With nUltimo
    Else
         nCompara=nLeeid
    Endif
Endscan
Select csrRenum
Browse
Return
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.

repla en consecutivo

Publicado por Leonardo Daniel A. (205 intervenciones) el 15/07/2017 06:21:50
si ese id no afecta en nada, es decir, no esta relacionado con otra tabla.... pues seria lo mas facil del mundo


1
2
3
use TuTabla
 
replace all concecutivo with recno()



eso te pondra en el campo consecutivo el numero de cada registro.... y ya posteriormente para generar nuevos ID's o consecutivos, puedes usar algo muy sencillo

function SigConsecutivo
parameter tabla

1
2
3
4
5
6
7
8
9
if used( tabla )
  select (tabla)
else
   use &tabla
endif
 
calculate max( consecutivo )  to _ultimo
_ultimo = _ultimo + 1
return _ultimo

y cuando vayas a agregar a la tabla

1
2
3
4
use tutabla
_consecutivo = sigConsecutivo("tuTabla")
appe blank
replace consecutivo with _consecutivo, nombre with  _nombre, etc, etc.

y listo... sin tanto show
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad