Clipper/FiveWin - Ayuden a claudia con DBseek

 
Vista:
Imágen de perfil de Claudia

Ayuden a claudia con DBseek

Publicado por Claudia (15 intervenciones) el 13/12/2006 16:59:21
Hola chicos:

Tengo un problema que me imagino para ustedes es un pianito, resulta que necesito checar en una tabla de productos una clave 2 veces; es decir la busco con DBseek y si la encuentro necesito volverla a buscar en la misma tabla para ver si existe más de una vez. Porfas 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

RE:Ayuden a claudia con DBseek

Publicado por Marcelo (218 intervenciones) el 13/12/2006 17:17:47
Si esta ordenado por ese campo, entonces lo que tenes que haces es iterar sobre la tabla mientras el campo valga igual que el valor de busqueda. no hace falta que vuelvas a hacer seek.

DBseek(cValor)

While campo_clave == cValor
nContador ++
DBskip()
Enddo
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:Ayuden a claudia con DBseek

Publicado por El Duro (19 intervenciones) el 13/12/2006 17:18:38
Claudia:

Como dijo Jack "El destripador", vamos por partes:

Partimos de la base de que ya tienes abierta la DBF y que el índice activo es por el que quieres revisar la duplicidad de llaves.

Despues haces lo siguiente:
LOCAL nVeces := 0

(cTuDbf)->(DBSEEK(cLaLlave))
DO WHILE (cTuDbf)->(! EOF()) .AND. (cTuDbf)->CAMPOLLAVE == cLaLlave
nVeces++
(cTuDbf)->(DBSKIP()
ENDDO

Despues de todo esto, nVeces tiene el número de veces que tienes cLaLlave en tu DBF.

Si te funciona, no me va a molestar que te muestres agradecida, y si no ?, pues también.

El Duro
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:Ayuden a claudia con DBseek

Publicado por Raúl (44 intervenciones) el 14/12/2006 00:04:27
Para mi tu problema se soluciona haciendo lo que llamamos "Corte de Control" y sería mas o menos así:

Local wClave:=SPACE(10) // Para resguardar tu clave leida.. asumo alfanum.
Local wLeidos:=0 // Para contar registros leidos

Asumo que tienes seleccionada tu DBF con el índice correcto.
TUDB->(DBGOTOP()) // Para ir al principio de la base
wClave:=TUDB->TUCLAVE // Resguardar 1ra. clave
DO WHILE TUDB->(!EOF()) // Que haga el proceso hasta FIN DE ARCHIVO
wLeidos++
IF wLeidos > 1 // Para que no entre en el 1er. registro
IF TUDB->TUCLAVE = wClave // Si son iguales
esta clave está repetida.. Imprime o depliégala
ELSE
wClave:=TUDB->TUCLAVE // Resguardar clave leida
ENDIF
ENDIF
TUDB->(DBSKIP()) // Lees el siguiente registro
ENDDO
IF TUDB->TUCLAVE = wClave // Para controlar la clave del último registro
esta clave está repetida.. Imprime o despliégala.
ENDIF

Creo que de ésta manera procesarías todo tu archivo y podrías determinar cuales son todas las claves repetidas.
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