Como cambiar un password en visual foxpro

Estoy creando un formulario para cambiar la clave de acceso al sistema y no me funciona. Quisiera que me ayudaran, se los agradeceria.

La instruccion que utilizo es la siguiente

IF USED("clave")

SELECT clave
ELSE
USE &dira\clave EXCLUSIVE
ENDIF
LOCATE FOR codigo=nvclave

IF EOF()
LOCATE FOR codigo=vclave
REPLACE codigo WITH nvclave
 SELECT clave
 USE
MESSAGEBOX("Clave Reemplazada", 0, "Mensaje:")
ELSE
MESSAGEBOX("Nueva Clave existe", 0, "Mensaje:")
SELECT clave
USE
ENDIF
thisform.init

Utilizo tres textos

1. Donde digito la clave anterior

2. Donde me muestra el nombre del usuario

3. Donde digito la nueva clave

La tabla se llama clave y contiene los siguientes campos

Codigo, nombre

Respuesta
2

Dices que tienes 3 objetos tipo textbox.

Llamemosle Text1, Text2 y Text2; donde Text1 es Clave anterior, Text2 Nombre del Usuario y Text3 Clave nueva... solo puliendo un poco tu código...

** Definir Variables.
nvclave = thisform.text1.value
IF USED("clave")
     SELECT clave
ELSE
     Select Select(1)
     USE &dira\clave EXCLUSIVE
ENDIF
LOCATE FOR nvclave=codigo
IF Found()
     REPLACE codigo WITH nvclave
     MESSAGEBOX("Clave Reemplazada", 0, "Mensaje:")
ELSE
     MESSAGEBOX("Nueva Clave existe", 0, "Mensaje:")
Endif
USE && Tabla Clave abierta,no es necesario volver a Seleccionar.
Thisform.Init

Prueba ésto..

Perdona El Chicho, solo me puse a darle mejor forma a tu código, pero cometí algunos errores... pienso que el c{odigo siguiente iría mejor

** Definir Variables.
nvclave = thisform.text3.value
IF USED("clave")
     SELECT clave
ELSE
     Select Select(1)
     USE &dira\clave EXCLUSIVE
ENDIF
Select Codigo From Clave Into Array aCodigo Where nvClave=codigo
IF _tally=0
     REPLACE codigo WITH nvclave
     MESSAGEBOX("Clave Reemplazada", 0, "Mensaje:")
ELSE
     MESSAGEBOX("Nueva Clave existe", 0, "Mensaje:")
Endif
USE && Tabla Clave abierta,no es necesario volver a Seleccionar.
Thisform. Init

1ra. COrrección; la clave nueva se toma del textbox 3 y no del 1.

2da. Cambiamos Locate por Select, para que el puntero no se mueva dentro de la tabla, sino que quede posicionada en el último registro de la tabla Clave, que supongo haces que se posicione cuando ingresas clave anterior.

NOTA: Supongo que ésto lo tienes escrito en el método Valir del Textbox 3 (nueva clave), en cuyo caso podrías abreviar la linea 2 así..

nvclave = this.value

Si las claves fueses de caracter asegúrate de que tome solo el valor literal usando Alltrim...

nvclave = Alltrim(this.value)

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

gracias por tu respuesta. El codigo funciona pero me cambia la clave del primer registro y no de el que necesito cambiar

Por eso te decía que suponía que te posicionabas sobre el registro cuando ingresabas la clave anterior... pues bien, para hacerlo ésto, debes hacer...

Siguiendo con la teoría de que es en el Textbox 1 donde ingresas la clave anterior...

** Esto estaría escrito dentro del método Valid del Textbox 1.
vjclave = Alltrim(this.value)
If Empty(vjclave)
     Return
Endif
IF USED("clave")
     SELECT clave
ELSE
     Select Select(1)
     USE &dira\clave EXCLUSIVE
ENDIF
Locate For vjClave=codigo
IF Found()
    Thisform.Text2.value = Clave.Nombre
Else
     MESSAGEBOX("Clave inexistente", 0, "Mensaje:")
     This.Value = ""
     Return .f.
Endif
Return

gracias por tu valioso tiempo.

te explico.

tengo una tabla donde guardo las claves para ingresar al sistema llamada "CLAVE", la cual contiene 3 campos : codigo,nombre,grupo

tengo un formulario que contiene 3 textbox : uno llamado "VCLAVE" donde llamo la clave actual, otro "VNOMBRE" donde llamo el nombre actual y el otro llamado "NVCLAVE" donde ingreso la nueva clave que quiero reemplazar.

La siguiente instruccion me reemplaza el primer registro de la tabla y lo que quiero es que me reemplaze el registro del textbox llamado vclave.

nvclave = thisform.text1.value
IF USED("clave")
SELECT clave
ELSE
Select Select(1)
USE &dira\clave EXCLUSIVE
ENDIF
Select CODIGO From Clave Into Array Codigo Where NvClave=codigo
IF _tally=0
REPLACE codigo WITH nvclave
MESSAGEBOX("Clave Reemplazada", 0, "Mensaje:")
ELSE
MESSAGEBOX("Nueva Clave existe", 0, "Mensaje:")
Endif
Thisform. Init

la tabla tiene la siguiente informacion:

CODIGO          NOMBRE             GRUPO

7714                inventario           ventas

7718                contabilidad        sistema

7721                compras               ingresos

quiero que cuando digite en el textbox "VCLAVE" el codigo "7718" el cursor se coloque en el registro de la tabla que contenga ese codigo, en este caso en el segundo registro y no en el primero como lo está haciendo.

gracias

Lo lógico es que en el campo de clave nueva al que llamas VCLAVE solo ingreses la nueva clave y no que la localice, para eso tienes el textbox VCLAVE; y cuyo caso es exactamente como te lo he explicado solo que como no conocía los nombres de los objetos te decia Text1, Text2 y Text3...

Entonces el criterio que te he planteado en mis respuestas es que primeramente localizar el usuario y luego modificas su clave... entonces, en order sería así:

1. En el método valid del Textbox llamado VCLAVE escribes lo siguiente...

** Esto estaría escrito dentro del método Valid del VCLAVE.
vjclave = Alltrim(this.value)
If Empty(vjclave)
     Return
Endif
IF USED("clave")
     SELECT clave
ELSE
     Select Select(1)
     USE &dira\clave EXCLUSIVE
ENDIF
Locate For vjClave=codigo
IF Found()
    Thisform.VNOMBRE.value = Clave.Nombre
Else
     MESSAGEBOX("Clave inexistente", 0, "Mensaje:")
     This.Value = ""
     Return .f.
Endif
Return

2. En el Valid del Textbox de nombre NVCLAVE..

** Esto va en el Textbox de NVCLAVE.
nvclave = This.Value
IF USED("clave")
     SELECT clave
ELSE
     Select Select(1)
     USE &dira\clave EXCLUSIVE
ENDIF
Select Codigo From Clave Into Array aCodigo Where nvClave=codigo
IF _tally=0
     REPLACE codigo WITH nvclave
     MESSAGEBOX("Clave Reemplazada", 0, "Mensaje:")
ELSE
     MESSAGEBOX("Nueva Clave existe", 0, "Mensaje:")
Endif
USE && Tabla Clave abierta,no es necesario volver a Seleccionar.
Thisform. Init

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas