FoxPro/Visual FoxPro - Campos

   
Vista:

Campos

Publicado por JHONNATTI-K (22 intervenciones) el 30/05/2008 17:56:24
Hola que tal tengo una pequeña pregunta de logica la verdad me siento flojo en esto, tengo una tabla con unos registros que deberian ser consecutivos,pero algunas veces quedan uno rotos por que en algunas estaciones gastan otro consecutivo diferentes,como pedo saber los consecutivos que no han utilizado para poder utilizarlos.

Muchas gracias.

este seri un ejemplo

1
2
3
*
5
*
7
*
9
10
11
13

los asteriscos son los huecos que necesito conocer para utilizar esos documentos.
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

RE:Campos

Publicado por jose camilo (688 intervenciones) el 30/05/2008 22:21:34
una rutinita con un do while no eof()
tienes un contador
algo asi
use tutabla
contador = 0
do while !eof()
Contado = contador + 1
If Contador <> Recno()
Haces lo k quiras (imprime o guarda un campo)
EndIf
Skip
EndDo

espero te sirva
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

RE:Campos

Publicado por Jhonnatti-k (22 intervenciones) el 31/05/2008 05:13:24
Pues la verdad eso sirve hasta que encuentra el primer valor que falta en la secuencia,pero de ahi en adelante todos los valores se descuadran y empiesan a salirme todos como si faltaran en la secuencia.
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

RE:Campos

Publicado por ANTONIO MARTIN (55 intervenciones) el 31/05/2008 07:43:37
Podrias explicar como para que quieres conecer el consecutivo faltante, ya que si lo que quieres es evitar que se repitan los consecutivos te propongo lo siguiente, al iniciar tu formulario dale a tu tabla un GO RECCOUNT(), si por ejemplo tu campo se llama CONSECUTIVO asignas a un textbox el valor de CONSECUTIVO+1, de ahi que capturen los demas datos y en el boton donde guardas la información, pones algo como esto:

SELECT TUTABLA
DO WHILE !RLOCK()
IF MESSAGEBOX("Estan registrando información en otra terminal,"+CHR(13)+;
"¿Desea reintentar?",36)=7
THISFORM.TEXTBOX2.SETFOCUS
RETURN
ENDIF
ENDDO
GO RECCOUNT()
IF CONSECUTIVO+1<>THISFORM.TEXTBOX1.VALUE
IF MESSAGEBOX("El consecutivo ya fue asignado en otra terminall,"+CHR(13)+;
"¿Desea utilizar el nuevo consecutivo "+;
ALLTRIM(TRANSFORM(CONSECUTIVO+1,"999,999"))+"?",36)=7
UNLOCK
THISFORM.TEXTBOX2.SETFOCUS
RETURN
ENDIF
ENDIF
XNUECON=COSECUTIVO+1
APPEND BLANK
REPLACE CONSECUTIVO WITH XNUECON
UNLOCK
RETURN

Espero te sirva. Suerte....
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

RE:Campos

Publicado por kong (681 intervenciones) el 31/05/2008 08:13:22
si grabas el consecutivo justo antes de grabar los datos es mucho mejor.
select tablacontador
flock("tablacontador")
go bottom
ultimonumero=contador
append blank
replace contador with ultimonumero+1
unlock in tablacontador
.......................................
ahora, si es preciso dejarlo como esta, y luego buscar los huecos, entonces tienes que hacer una rutina como la de jose camilo, u otra idea como esta.
....
si la tabla esta indexada(cdx) es mucho mejor.
....
select tablacontador
encontrehueco=.f.
go top
do while not encontrehueco and not eof()
numeroantes=contador
skip
numerodespues=contador
if (numerodespues-numeroantes)>1
encontrehueco=.t.
numerohueco=numeroantes+1
endif
enddo
....
y cuando te salistes de esta instruccion, VFP te indexa automaticamente la tabla, y ya la puedes realizar otra busqueda parecida. De no ser asi, la tienes que reindexar luego de cada busqueda.
.......................................
En caso de que no tienes indexada la tabla y no quieres hacerlo, se te va a complicar un poco mas.
....
La rutina anterior + un Select SQL o un locate de los numeros del contador que agregaste luego.
.......................................
El rendimiento a tu aplicacion se vuelve mas y mas lento a medida que vayas aumentando la cantidad de numeros de la tablacontador
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