FoxPro/Visual FoxPro - Consulta sobre tabla

   
Vista:

Consulta sobre tabla

Publicado por Julio (2 intervenciones) el 30/05/2012 03:06:28
Hola a todos
Tengo una tabla dbf con unos registros de la siguiente manera:
050001
050001
050001
050001
050002
050002
050002
050002
050003
050003
050003
050004
050004 ...
etc, así en secuencia hasta un número x
Son varios registros, quisiera saber como hacer para renumerar esto,
es decir que la secuencia sea de la siguiente manera:
050091
050091
050091
050091
050092
050092
050092
050092
050093
050093
050093
050094
050094 ...

Yo tengo lo siguiente en visual foxpro
USE (Mi tabla)
GO TOP
STORE 50091 TO A
STORE 50001 TO B
SCAN
STORE "0"+LTRIM(STR(A)) TO C
STORE "0"+LTRIM(STR(B)) TO D
If (nombre registro de la tabla)=D
REPLACE (nombre registro de la tabla) WITH C
Else
STORE A+1 TO A
STORE B+1 TO B
STORE "0"+LTRIM(STR(A)) TO C
STORE "0"+LTRIM(STR(B)) TO D
Endif
ENDSCAN

Al final obtengo:
050091
050091
050091
050091 (Hasta aquí correcto)
050002 (Este valor debería ser 050092)
050092
050092
050092
050003 (Este valor debería ser 050093)
050093
050093
050004 (Este valor debería ser 050094)
050094 ...

Podrían decirme donde estoy mal.
Gracias
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
Imágen de perfil de Mauricio

Consulta sobre tabla

Publicado por Mauricio (1368 intervenciones) el 30/05/2012 14:52:56
USE (Mi tabla)
GO TOP
REPLACE SUBSTR(mi_campo, 5,1) WITH "9" ALL
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

Consulta sobre tabla

Publicado por Julio (2 intervenciones) el 30/05/2012 16:14:46
Gracias Mauricio por responder,
Lo que me dices estaría bien si mis registros lleguen hasta el 050099, en realidad son varios y podría terminar en 050358 (pero esta numeracion es correlativa en intervalos diferentes de 3, 4 y hasta 5 registros), como en el ejemplo de arriba es solo una muestra, mi objetivo es reemplazar esa numeración por la otra, es decir en vez que empiece en 050001, empiece en 050091 y así hasta por decir el 050385, sin alterar esa correlatividad de intervalos.

Gracias
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 Mauricio

Consulta sobre tabla

Publicado por Mauricio (1368 intervenciones) el 30/05/2012 19:07:10
Realmente no se que quieres hacer, hice unas prubas y lo mas probable es que no haga lo que deseas, pues por ejemplo, si modificas 050001 por 050091 y que posiblemente pase de 050385 por ejemplo, el codigo 050091 te lo cambiaria de nuevo, aca te dejo algo para que lo revises y lo adaptes a lo que quieres hacer:

Julio, debes ordenar por el codigo que has puesto en orden ascendente.
y suponiendo que empieza en 050001
*---
CLOSE TABLE ALL
vcodigo = '050001'
vcorre = '091'
USE julio IN 0 ORDER codigo
SELE julio
GO TOP
SCAN
IF codigo = vcodigo
ocodigo = SUBS(codigo,1,3) + vcorre
REPLACE codigo WITH ocodigo FOR codigo = vcodigo
ELSE
vcodigo = ALLT(STR(VAL(vcodigo) + 1))
vcodigo = PADL(vcodigo,6,'0')
vcorre = ALLT(STR(VAL(vcorre)+ 1))
vcorre = PADL(vcorre,3,'0')
ENDIF
ENDSCAN
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

Consulta sobre tabla

Publicado por MAYROL M (332 intervenciones) el 31/05/2012 23:50:51
Saludo Julio

Lo unico que veo distinto es que cambian en el punueltimo numero por un 9, de ser asi en todos los casos solo tiene que tomar el numero en una variable convertido a strem y cabiar esta posicion por el 9, es decir la posicion 5 que es donde cae el 9.

No recuerdo la funcion pero pero existe un forma facil de ir directamente a un lugar de una cadena.
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