Consulta Access

Que ya llevo varios días dándole vueltas y no hay forma. Yo estoy empezando en esto de Access y todavía me engancho en algunas cosas.
Tengo hecha una base de datos para controlar las devoluciones recibidas en un almacén.
La cosa es que en esta base de datos tengo una tabla "Productos" donde tengo dos campos (Referencia y Familia)
Luego tengo otra tabla "Trabajo Devoluciones" donde vamos introduciendo los datos según se reciben, mediante un formulario. En esta tabla también están los campos (Referencia y Familia). El campo Referencia coge los datos de la tabla "Productos", y quisiera que el campo Familia se rellenara solo según el dato que le pongo en referencia. Son campos de texto, ya que las referencias tienen letras.
Ya e intentado varias cosas pero no me sale. No se si me he explicado bien, si necesitan alguna otra cosa ya me dicen.
Respuesta
1
Te explico cómo hacer lo que pides.
Con el formulario en vista diseño haces click sobre el campo "Referencia". Sacas sus propiedades y te vas a la pestaña "Eventos". Haces click sobre el espacio en blanco que hay a la derecha del evento "Después de actualizar". Te aparecerá un pequeño botón con puntos suspensivos. Haces click sobre él y te saldrá una ventana con varias opciones. Clicka la opción "Generar código".
En la pantalla que te aparece le escribes el siguiente código:
---
Private Sub Referencia_AfterUpdate()
    Dim valorReferencia As Variant
    valorReferencia = Me.Referencia.Value
        'Comprobamos que existe valor en la referencia.
        'Si no, nos lanza un mensaje de error
    If IsNull(valorReferencia) Then
        MsgBox "No ha introducido ninguna referencia"
        Exit Sub
    End If
        'Creamos la consulta y el recordset para buscar
'los registros coincidentes con el valor referencia
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim mySql As String
    Set dbs = CurrentDb
    mySql = "SELECT Productos.Familia FROM Productos"
    mySql = mySql & " WHERE Productos.Referencia = '" & valorReferencia & "'"
    Set rst = dbs.OpenRecordset(mySql, dbOpenSnapshot)
        'Asignamos el valor encontrado al campo familia
    Me.Familia.Value = rst.Fields(0).Value
        'Cerramos las conexiones y liberamos memoria
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing
End Sub
---
Doy por supuesto que las tablas y los campos se llaman exactamente como las has escrito en la consulta.
Finalmente el código así cómo está es un poco "incómodo" a la hora de introducir datos. Tienes que mirar cómo se llama el campo que viene a continuación de "Familia" y añadir una línea más, justo encima del comentario 'Cerramos las conexiones y liberamos memoria, que diga:
Me.[NombreDeTuCampo].SetFocus
Y eso es todo. Si tienes problemas o no entiendes algo de lo que te he explicado me lo comentas e intentamos arreglarlo.
No he recibido ninguna respuesta. ¿Te ha ido bien?
Bueno, ya me dirás cosas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas