¿Cómo pude hacer que solo se muestre un campo disponible en Microsoft Access 2000?

Estimado amigo espero te encuentres muy bien, y deseándote extos, he creado una base de datos en access 2000, en ella tengo un campo llamado No de Tarjeta, lo que básicamente quiero hacer es que al mandar todos los campos a un formulario, el único campo que aparezca disponible sea el campo que te mencione, ya que al ingresar el numero de tarjeta si esta ya existe le va a desbloquear o desplegar todos los otros campos para hacerlos activos, sino, que permita el formulario ingresar un nuevo numero de tarjeta, me dicen que lo puedo hacer con un lost focus, pero no tengo ni la más mínima idea de como empezar, saludos desde El salvador. Migost

1 respuesta

Respuesta
1
¿Cómo estas?
Me alegra mucho que vuelvas a preguntar, espero lo poco que se te sirva.
Bueno lo que deseas hacer es relativamente sencillo, vas a necesitar un poquito de programación pero no te asustes, vamos a ir paso a paso:
Primero elabora el formulario como quieres que se vea cuando todos los botones estén desplegados. Crea un botón nuevo dentro del formulario; cuando el asistente aparezca busca la opción "Operaciones con registros" "Agregar un registro nuevo". Deja el botón en cualquier parte, más adelante usaremos lo que hace el botón.
Cuando termines de diseñar el formulario, selecciona todos los objetos que no quieres que se vean, puedes hacerlo dando clic sostenido y cubriendo los objetos. Luego ingresas al menú "Ver" y luego "Propiedades" aparece una ventana con varias pestañas, escoges la que se llama "Formato" y la primera opción debería ser "Visible" la cambias al valor "Falso", cambia a la vista formulario y podrás observar que los objetos señalados no son visibles. Si quieres dejarlos visibles, pero bloqueados, entonces solo seleccionas los campos, (no las etiquetas), las listas desplegables, cuadros de opciones y todo lo que el usuario puede modificar y en la ventana propiedades escoges la ventana "Datos" y luego cambias "Bloqueado" a si y "Activado" a no. Puedes jugar con las opciones anteriores hasta que obtengas lo que deseas.
Bueno lo que sigue es verificar si el NoTarjeta existe y activar los campos y mostrar los datos correspondientes o activar los campos e ir a un registro nuevo en caso contrario, ¿cierto?
Entonces haces lo siguiente: seleccionas el campo NoTarjeta y abres la ventana de propiedades, luego escoges la ventana "Eventos" y buscas el evento "Después de Actualizar" al frente aparece un botón con ... lo aprimes y en la venta que aparece escoges "Generador de código"
En la ventana de Visual que vas a ver debería decir más o menos lo siguiente:
Private Sub NoTarjeta_AfterUpdate()
End Sub
Entre estas dos líneas pegas lo siguiente. (Supongo que la tabla se llama "Usuarios" y el campo se llama "NoTarjeta")
Dim Tarjeta
Tarjeta = me.NoTarjeta
Prueba = DLookup("[NoTarjeta]", "Usuarios", "[NoTarjeta] = " & Tarjeta & "")
if isnull(prueba)=false then 'Quiere decir que la tarjeta si existe
me.Campo1.visible=true 'Si ocultaste los campos colacas esta
'Si desactivaste y bloqueaste los campos colocas estos dos
Me.Campo1.Locked = False
Me.Campo1.Enabled = True
'Observa que en vez de campo1 tienes que fijarte como se llaman los controles de tu formulario y colocarlo aquí además tendras que pegar estas líneas tantas veces como campos quieras activar u ocultar
else
'Busca en tu formulario el botón que creaste y coloca lo que dice aquí +- es esto
DoCmd. GoToRecord,, acNewRec
End if
Pruebalo y empezamos a mirar que más hay que hacer, suerte.
Gajimenb
Hice lo que me dijiste, sabes para comprenderlo mejor he creado una base sencilla donde la tabla se llama miguel y el formulario ostorga, dentro del formulario tengo dos campos llamados tarjeta y miguel1, lo que he hecho es ocultar el campo miguel1, y es en el campo tarjeta que lo he dejado visible para meter el dato que me interesa el cual obviamente hará que aparezca el campo miguel1, si exte existe, ya lo hice y me aparece un error de depuración, este es el error '3464' acá te mando lo que yo ingrese, espero me ayudes y disculpa por tanta pregunta,
acá esta lo que yo ingrese :
Private Sub tarjeta_AfterUpdate()
Dim tarjeta
tarjeta = Me.tarjeta
prueba = DLookup("[tarjeta]", "miguel1", "[tarjeta] = " & tarjeta & "")(esto es lo que me aparecece, especificante en esta linea me dice que los datos no coinciden)
If IsNull(prueba) = False Then 'Quiere decir que la tarjeta si existe
Me.miguel.Visible = True 'Si ocultaste los campos colacas esta
'Si desactivaste y bloqueaste los campos colocas estos dos
Else
'Busca en tu formulario el botón que creaste y coloca lo que dice aqui +- es esto
DoCmd.GoToRecord , , acNewRec
End If
End Sub
Saludos desde el salvador
En primer lugar una recomendación, envíame la descripción del error, no el número, aún no se que significa y no se como averiguarlo.
De todas maneras me late que ya se que pasa, si el campo "Tarjeta" es tipo texto entos, la función cambia de esto:
prueba = DLookup("[tarjeta]", "miguel1", "[tarjeta] = " & Tarjeta & "")
a esto:
prueba = DLookup("[tarjeta]", "miguel1", "[tarjeta] = '" & Tarjeta & "'")
Fíjate que estoy colocando un apostrofe antes y después de las comillas de " & Tarjeta & "
Creo que esta es la solución
Suerte,
gajimenb
Tal como tu me dijiste le hice unos ajustes;sin embargo, ahora no hace ningún tipo de procedimiento y en el campo tarjeta me acepta el mismo número las veces que yo quiera, es decir acepta No de tarjeta ya ingresados, y no me despliega el campo oculto "miguel", bueno acá te mando la estructura a ver si me ayudas. Saludos desde El Salvador
Private Sub tarjeta_AfterUpdate()
Dim tarjeta
tarjeta = Me.tarjeta
prueba = DLookup("[tarjeta]", "miguel1", "[tarjeta] = "" & tarjeta & """)
If IsNull(prueba) = False Then
Me.miguel.Visible = True
Else
DoCmd.GoToRecord , , acNewRec
End If
End Sub
En este tipo de situaciones lo que hago es lo siguiente:
Borro todo el procedimiento desde private hasta end sub
luego voy al campo, vuelvo a seleccionar el evento "depués de actualizar" y pego de nuevo el procedimiento, intentalo a ver.
Hey, eres formidable, ya me funcionó, pero como quiero abusar de tu gentileza, quiero hacerte una nueva pregunta acerca de un pequeño problema que he experimentado en un formulario en el que he creado un campo de texto independiente en el cual al ingresar un numero busca en un campo llamado código si existe el registro numérico de este, el código tiene la clave principal, pero lo que necesito hacer ahora es pasar el código de numérico a texto(lo cual ya hice), pero al ingresar en el texto independiente letras me da un error de depuración. Este es el código:
Private Sub Texto8_AfterUpdate()
Dim a As Integer
a = Me.Texto8 (aqui me lo sombrea de amarillo como para hacerme saber que aqui es donde tengo que depurar)
Me.Form.Recordset.findfirst "codigo = " & a
If Me.Form.Recordset.nomatch Then
respuesta = MsgBox("No hay ningún registro con ese código, ¿desea agregarlo?.", vbYesNo, "¿Agregar registro?")
If respuesta = 6 Then
DoCmd.GoToRecord acActiveDataObject, , acNewRec
Me.codigo = Me.Texto8
Me.nombre.SetFocus
End If
End If
End Sub
Mi amigo, disculpa que no te puntee aun pero es que quería aprovechar la ocasión, luego lo hago, y disculpa por abusar demasiado de tu tiempo, de antemano te lo agradezco de todo corazón, saludos desde El Salvador, tu amigo... Miguel
Mi viejo el error es muy sencillo, lo que sucede es que la variable a esta definida como tipo numérica del tipo integer (entero). Ya que el campo es de tipo texto, así ingreses un número no te lo va a almacenar en la variable por esa razón, yo te recomendaría que en la línea:
Dim a as integer
la dejes así
Dim a
Y listo no necesitas declar el tipo.
Suerte
Gajimenb

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas