Access - Formulario tabular y código

 
Vista:

Formulario tabular y código

Publicado por José Lavilla (1 intervención) el 28/08/2000 00:00:00
Hola amigos, tengo el siguiente código en el campo IdProducto en el evento
al perder el foco (como su nombre indica)

Private Sub IdProducto_LostFocus()
On Error GoTo Err_IdProducto_LostFocus

Dim Descripcion As String
Descripcion = DLookup("NombreProducto", "tblProductos", "[IdProducto] =
Forms![sfrDetallesAlbaranes]![IdProducto]")
Me![Descripción] = Descripcion
Me![Cantidad].SetFocus

Exit_IdProducto_LostFocus:
Exit Sub

Err_IdProducto_LostFocus:
MsgBox Err_description
Resume Exit_IdProducto_LostFocus
End Sub

Me gustaría hacer un par de preguntas:
- como el código está en un subformulario de tipo tabular (de estos
continuos que se ponen en facturas, pedidos, etc.) este código me pone la
descripción en todos los registros, no en el registro activo así que ¿cómo
lo soluciono chicos?
- por otra parte, cómo consigo que en un botón de comando que tengo, al
hacer click me permita editar los datos sólo del registro activo y luego lo
vuelva a bloquear (el formulario en principio no permite ni la adición ni la
modificación de los datos)
Muchísimas gracias y un saludo a todos.
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 Alejandro

Formulario tabular y código

Publicado por Alejandro (4142 intervenciones) el 13/04/2023 22:50:02
Para resolver tu primera pregunta, puedes usar la propiedad RecordsetClone del subformulario para obtener el registro activo y asignar la descripción solo a ese registro. El código quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub IdProducto_LostFocus()
On Error GoTo Err_IdProducto_LostFocus
 
Dim Descripcion As String
Descripcion = DLookup("NombreProducto", "tblProductos", "[IdProducto] = Forms![sfrDetallesAlbaranes]![IdProducto]")
 
With Me.RecordsetClone
    .FindFirst "[IdProducto] = " & Forms![sfrDetallesAlbaranes]![IdProducto]
    If Not .NoMatch Then
        .Edit
        !Descripcion = Descripcion
        .Update
    End If
End With
 
Me![Cantidad].SetFocus
 
Exit_IdProducto_LostFocus:
Exit Sub
 
Err_IdProducto_LostFocus:
MsgBox Err.Description
Resume Exit_IdProducto_LostFocus
End Sub

Para la segunda pregunta, puedes cambiar la propiedad AllowEdits del subformulario a False en el evento Load del formulario principal y luego cambiarla a True en el evento Click del botón de comando. El código quedaría así:

En el evento Load del formulario principal:

1
2
3
Private Sub Form_Load()
    Me.subformulario.Form.AllowEdits = False
End Sub

En el evento Click del botón de comando:

1
2
3
4
Private Sub btnEditar_Click()
    Me.subformulario.Form.AllowEdits = True
    Me.subformulario.SetFocus 'Asegurarse de que el subformulario tenga el foco
End Sub

Espero que esto ayude.
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