La Web del Programador: Comunidad de Programadores
 
    Pregunta:  27242 - CONTROLAR REGISTRO UNICO CON BUFER
Autor:  Anibal Vega Diaz
Saludos a todos y de antemano gracias por su colaboracion:
Estoy tratando de controlar, en un formulario, que el usuario no pueda ingresar registros repetidos, no puedo colocarle al campo un indice unico porque hay registros viejos, digitados antes de realizar la aplicacion que no se pueden eliminar y que estan repetidos, ademas no puedo utilizar un seek como normalmente lo hago porque en el momento de correrlo siempre encuentra el mismo registro que estoy ingresando, no se que hacer.
Valga la aclaracion que soy un programador empirico y que hasta haora estoy comenzando y se muy poco.
me pueden escribir a: [email protected]
gracias.
Anibal Vega.

  Respuesta:  joherick Nuñez
mira yo tenia ese mismo problema pero lo solucione con lo siguiente
LOCAL gnRecno, gcName

*// cargamos variable cuando damos click en guardar
IF this.CardarVar=.T.
gnRecno=recno()
gcName=tabla.campo
this.CardarVar=.F.
ENDIF

*// realizo busqueda
lbuscar=SEEK(ALLTRIM(expresion a buscar))

*// regreso donde comense para no perdenos en la tabla
GO gnRecno

IF lbuscar=.T. && encontrado mostrar msg
messagebox('Existe')
this.CardarVarr=.T.
RETURN .F.

ELSE && no encontrado
que deseas hacer
ENDIF

  Respuesta:  Jaime Galarza
BINGO, acabas de hacer la pregunta del millon, la busqueda, siempre en la busqueda de validación te va a dar positivo,PORQUE?, porque el VFP trabaja sobre buffers directos de la tabla, es decir que al poner el valor es como que ya estuviese en la tabla, que hacer?, almacenar el numero de registro en una variable, y mandarla a buscar, como la va a encontrar, hay que que comparar el numero de registro encontrado, si es igual a buscar el siguiente, y si no es el dato que estabas buscando, espero que te haya servido esta explicacion, chau

  Respuesta:  Jose Rolando Quintero Paz
Mira
Por un lado quieres evitar los registros repetidos pero, por otro lado ya tienes muchos con esa caracteristica. en mi opinion debes usar la funcion Seek pero colocas el indice como Normal, posteriormente cuando la busqueda te de positiva, es decir que ya existe el registro, que lo muestre y te pregunte si quieres ingresar uno nuevo o no.

Ej.

select mitabla
set order to vcod
store 0 to codigo
go top
seek vcod
if found()
"mensaje"
else
append blank
"grabar"

  Respuesta:  Jose Rolando Quintero Paz
Mira
Por un lado quieres evitar los registros repetidos pero, por otro lado ya tienes muchos con esa caracteristica. en mi opinion debes usar la funcion Seek pero colocas el indice como Normal, posteriormente cuando la busqueda te de positiva, es decir que ya existe el registro, que lo muestre y te pregunte si quieres ingresar uno nuevo o no.

Ej.

select mitabla
set order to vcod
store 0 to codigo
go top
seek vcod
if found()
"mensaje"
else
append blank
"grabar"

  Respuesta:  Jose Rolando Quintero Paz
Mira
Por un lado quieres evitar los registros repetidos pero, por otro lado ya tienes muchos con esa caracteristica. en mi opinion debes usar la funcion Seek pero colocas el indice como Normal, posteriormente cuando la busqueda te de positiva, es decir que ya existe el registro, que lo muestre y te pregunte si quieres ingresar uno nuevo o no.

Ej.

select mitabla
set order to vcod
store 0 to codigo
go top
seek vcod
if found()
"mensaje"
else
append blank
"grabar"

  Respuesta:  Jose Rolando Quintero Paz
Mira
Por un lado quieres evitar los registros repetidos pero, por otro lado ya tienes muchos con esa caracteristica. en mi opinion debes usar la funcion Seek pero colocas el indice como Normal, posteriormente cuando la busqueda te de positiva, es decir que ya existe el registro, que lo muestre y te pregunte si quieres ingresar uno nuevo con el mismo numero o no.

Ej.
select mitabla
set order to vcod
store 0 to codigo
go top
seek vcod
if found()
"mensaje"
else
append blank
"grabar"
Endif