Evitar registro duplicado en campo. VFP

Espero andes bien! Soy Mariela... Aquí molestándote de nuevo. Mi duda es esta: he intentado evitar registros duplicados en los campos de una tabla. Lo que he trabajado va así: en algunos textos de mi form, he diseñado una linea de código para, al ingresar el dato, inmediatamente saber si el registro ya existe en la tabla. Por ejemplo: en el Valid del text "TxtCodigo" (que tiene como controlsource un campo "codigoprod") puse esto:
SELECT tabla1
LOCATE FOR  codigoprod = (THISFORM.txtCodigo.Value) 
IF FOUND ()
MESSAGEBOX("Codigo de producto ya registrado en sistema")
RETURN 
Endif
El problema es que esta expresión, ademas de "evaluar" los datos que tengo en el campo, evalúa también el dato que escribo en el text... Es decir, toma en cuenta lo que escribo en el text "a como si ya lo hubiese guardado en la tabla". ¿Me comprendes? Por esta razón, no me permite ingresar absolutamente ningún dato! Por ejemplo: Si en el campo tengo: 100, 200 y 300, al ingresar en el text 400, envía el mensaje y no permite seguir! Espero puedas ayuadarme! Saludos! Marielaaa....(^_^)!

1 Respuesta

Respuesta
1
Hasta donde logro comprender tienes problemas cuando el campo no está en la tabla... Bueno el caso es que yo no utilizo ese código pues me genera errores como ese. Lo que yo realizo es que en el Lostfocus del text hago lo siguiente:
IF !EMPTY(this.Value)
      SELECT tabla
      SET ORDER TO pk_campo
      IF SEEK(this.Value)
            Cargar los valores
      ENDIF
Endif
Cuando realizas ! EMPTY les estas preguntado que si no está vacío el text, entonces si está lleno el realiza los comandos que se encuentran dentro del IF.
La parte del SET ORDER TO ____, es ordenar los campos de la tabla, pues cuando corras el SEEK va a recorrer toda la tabla en busca del dato. Si no lo encuentra no monta nada, de lo contrario ya entrarías a definirle que es lo que tu necesitas.
Espero poder haber ayudado...
Te doy el ejemplo que utilizo en uno de mis form para que te hagas una idea
IF !EMPTY(this.Value)
   SELECT tb_proveedores
   SET ORDER TO PK_NIT
   IF SEEK (this.Value)
      Thisform. Cargartext
      THISFORM. BLOQUEartext
      Thisform. Bloquearcmd
   Endif
Endif
Suerte!!! ;-)
Ohhhh... no, no, no... un momento... el código correcto es así:
SELECT tabla1
LOCATE FOR codigopro = (THISFORM.Txtcodigo.Value)
<span style="white-space: pre;"> </span>IF FOUND ()
<span style="white-space: pre;"> </span>MESSAGEBOX("Codigo de producto ya registrado en sistema")
<span style="white-space: pre;"> </span>RETURN
<span style="white-space: pre;"> </span>ENDIF
Mil disculpas. Ahora si esta correcto. XDXDDXD
Upsss... no se que pasa! No sale bien el código escrito!
Ohhh! Esa solución me parece excelente! Eres muy amable por tu orientación! Ya mismo la probare! Gracias por ayudarme! Eres muyyyyyyyyyyyyyyyy amable! Saludos y bendiciones!
Besitosss... Mariela (^_^)!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas