Actualizar Valor Tabla mediante Cuadro Combinado Access 2007

Tengo un cuadro combinado que selecciona los valores de una tabla. El problema es que puede que el valor no esté introducido en la tabla. Mi pregunta es si se puede añadir el valor a través del cuadro combinado y que se quede registrado en la tabla de origen para próximas ocasiones en las que se deba seleccionar ese mismo valor o si hay que introducirlo directamente en la tabla de origen.

1 respuesta

Respuesta
1

Una forma de hacerlos sería esta:

Supongamos que tu cuadro combinado de llama "tuCombo", y se basa en una tabla (TuTabla) con esta estructura: ID (Autonumerico), Dato (de tipo Texto)

En el evento "Al no estar en al lista" de tu cuadro combinado, le generas este código:

Private Sub tuCombo_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Dar de alta?", vbYesNo) = vbYes Then
    Response = acDataErrContinue
    CurrentDb.Execute "INSERT INTO TuTabla(Dato) VALUES('" & NewData & "')"
    Me.tuCombo= DLookup("ID", "TuTabla", "[Dato]='" & NewData & "'")
    Me.OtroCampo.SetFocus
    Me.tuCombo.Requery
Else
    Response = acDataErrContinue
    Me.tuCombo= ""
End If
End Sub

Si quisieras insertar directamente sin preguntar, sería así:

Private Sub tuCombo_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    CurrentDb.Execute "INSERT INTO TuTabla(Dato) VALUES('" & NewData & "')"
    Me.tuCombo= DLookup("ID", "TuTabla", "[Dato]='" & NewData & "'")
    Me. OtroCampo. SetFocus
    Me. TuCombo. Requery
End Sub

Buenas tardes Sveinbjorn, he probado el primer código en el evento que me dices. He puesto lo siguiente:

If MsgBox("No está en la lista ¿Dar de alta?", vbYesNo) = vbYes Then
    Response = acDataErrContinue
    CurrentDb.Execute "INSERT INTO MATERIAL(CALIDAD) VALUES('" & NewData & "')"
    Me.cboMaterial = DLookup("ID", "[MATERIAL]", "[CALIDAD]='" & NewData & "'")
    Me.RECUBRIMIENTO.SetFocus
    Me.cboMaterial.Requery
Else
    Response = acDataErrContinue
    Me.cboMaterial = ""
End If

pero no hace absolutamente nada. o da error, pero no introduce el nuevo valor en la tabla. ¿Sabes qué es lo que estoy escribiendo mal?

Gracias de antemano.

Saludos,

Ainhoa

Vale, ya vi dónde está el error. Fallo mío al transcribir el código:

   Me.cboMaterial = DLookup("ID", "[MATERIAL]", "[CALIDAD]='" & NewData & "')"

El paréntesis de cierre tiene que ir dentro de las comillas dobles.

Buenos días de nuevo, puse el código corregido y me daba un error, dándole vueltas me di cuenta de que faltaba un paréntesis de cierre e la instrucción DLOOKUP, pero aún así, sigue sin funcionar. No da error pero no registra el nuevo valor.

Ahora tengo el siguiente código en el evento:

Private Sub cboMaterial_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Dar de alta?", vbYesNo) = vbYes Then
    Response = acDataErrContinue
    CurrentDb.Execute "INSERT INTO MATERIAL(CALIDAD) VALUES('" & NewData & "')"
    Me.cboMaterial = DLookup("ID", "[MATERIAL]", "[CALIDAD]='" & NewData & "')")
    Me.[MATERIAL-TIPO].SetFocus
    Me.cboMaterial.Requery
Else
    Response = acDataErrContinue
    Me.cboMaterial = ""
End If
End Sub

Siento ser tan pesada.

El error lo sigues teniendo en la línea que te comentaba, pero ahora te sobra el último paréntesis.

Te pongo todo el código:

Private Sub cboMaterial_NotInList(NewData As String, Response As Integer)
If MsgBox("No está en la lista ¿Dar de alta?", vbYesNo) = vbYes Then
    Response = acDataErrContinue
    CurrentDb.Execute "INSERT INTO MATERIAL(CALIDAD) VALUES('" & NewData & "')"
    Me.cboMaterial = DLookup("ID", "[MATERIAL]", "[CALIDAD]='" & NewData & "')"
    Me.[MATERIAL-TIPO].SetFocus
    Me.cboMaterial.Requery
Else
    Response = acDataErrContinue
    Me.cboMaterial = ""
End If
End Sub

Vale, ya he encontrado mi error. Estaba en las propiedades del cuadro combinado. Tu código es perfecto.

Muchas gracias.

Me alegro de que lo solucionaras. Hasta otra!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas