FoxPro/Visual FoxPro - no repetir registro

   
Vista:

no repetir registro

Publicado por programadora (53 intervenciones) el 19/01/2010 19:52:43
hola chicos ojala puedan ayudarme, porque ya me desespere.... necesito que al capturar un numero de recibo me diga si ya existe y no me deje repetirlo ni dublicarlo que hago??? esto tengo en el evento lost focus del txtrecibo..

STORE SPACE(0) TO num
num=thisform.txtrecibo.Value
recibo=num
LOCATE FOR (ALLTRIM(recibo))
recibo=num
DO WHILE FOUND( )
cMessageTitle = 'ERROR '
cMessageText = 'EL NUMERO DE RECIBO QUE PROPORCIONASTE YA EXISTE,'+(CHR(13))+'¿DESEAS AGREGAR UNO NUEVO?'
nDialogType = 4 + 32 + 256
nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)

DO CASE
CASE nAnswer = 6
GO BOTTOM
APPEND BLANK
replace recibo WITH thisform.txtrecibo.Value
THISFORM.Txtf_poliza.SetFocus
*THISFORM.Refresh
WAIT WINDOW 'Eligió Si'

CASE nAnswer = 7
THISFORM.REFRESH
clear
*THISFORM.txtrecibo.SetFocus
RETURN 0
WAIT WINDOW 'Eligió No'
ENDCASE



ENDDO



pero al teclear cualquier numero siempre lo encuentra aunque no este y aparte me lo sobreescribe en la tabla de antemano 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 Gonzalez

No repetir registro

Publicado por Mauricio Gonzalez (1368 intervenciones) el 19/01/2010 20:37:48
Programadora, puedes probar esto:
En el LOAD:
CLOSE TABLE ALL
use tabla1 IN 0 ORDER recibo
SELE tabla1
*---
En el VALID:
vnum=thisform.txtrecibo.Value
IF SEEK(vnum)
=MESSAGEBOX('Registro ya existe...intente uno nuevo.',0+16+0,'Valida Recibo')
thisform.txtrecibo.Value = '' && Para limpiar el campo
RETURN .F.
ENDIF
*--- Marha, cuando salga de aca es porque no existe en tabla1 o como tu la llames, pruebalo y avisas!!!!!
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:no repetir registro

Publicado por Saul (676 intervenciones) el 19/01/2010 21:04:17
Aqui esta una posible Solucion, hay mas formas pero esta es la forma que yo utilizo..

Num = " "

Num=thisform.txtrecibo.Value

SELECT Recibo FROM Tus_Recibos;
WHERE ALLTRIM(Recibo) = ALLTRIM(Num)
INTO ARRAY _TuArray

IF _Tally > 0 &&Esto es como si hay registros
cMessageTitle = 'ERROR '
cMessageText = 'EL NUMERO DE RECIBO QUE PROPORCIONASTE YA EXISTE,'+(CHR(13))+'¿DESEAS AGREGAR UNO NUEVO?'
nDialogType = 4 + 32 + 256
nAnswer = MESSAGEBOX(cMessageText, nDialogType, cMessageTitle)

DO CASE
CASE nAnswer = 6
GO BOTTOM
APPEND BLANK
replace recibo WITH thisform.txtrecibo.Value
THISFORM.Txtf_poliza.SetFocus
*THISFORM.Refresh
WAIT WINDOW 'Eligió Si'

CASE nAnswer = 7
THISFORM.REFRESH
clear
*THISFORM.txtrecibo.SetFocus
RETURN 0
WAIT WINDOW 'Eligió No'
ENDCASE

ENDIF

Hay me cuentas saludos
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:no repetir registro

Publicado por es_binario (757 intervenciones) el 21/01/2010 01:35:08
Todas las soluciones anteriores son buenas, pero mira te pongo algo de lo que yo tengo en uno de mis programas totalmente funcional y con mucho menos lineas de codigo.

Esto lo tengo en el Valid del TxtFolio cuando se escribe un dato en el evento valid se escuta este codigo, y no me da ningun problema para nada.

SELECT folio FROM venta WHERE folio == this.Value INTO CURSOR folios_de_mi_venta
SELECT folios_de_mi_venta
IF RECCOUNT() > 0
MESSAGEBOX("El folio ya se encuentra en uso",48,"El folio no se puede usar")
THISFORM.txtfolio.Value = 0
RETURN
ENDIF

con esas simples lineas no me deja pasar ningun.

claro que le puedes poner al messenger box 4+32+256

If msg = 6 && si

Else && aqui se da por supuesto un no.

Endif

por cierto en la respuestas anteriores donde se utiliza el seek hay que poner antes un set exact on

Saludos
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:no repetir registro

Publicado por programadora (53 intervenciones) el 21/01/2010 18:47:08
hola es binario gracias mil!! me sirvio mucho tu codigo, saludos desde mexico
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