Error 3464 en Visual Basic, con acces 2019

¿Cómo corrij eso?

Private Sub ActualizarGuardar_Click()
Me. Requery
Lista56. Requery
End Sub

Private Sub addcantprint_Click()
If IsNull(Me.txtnumero) Then
MsgBox "Debe agregar una cantidad"
Exit Sub
If Me.txtnumero < 0 Then
MsgBox "No puede agregar Cantidades negativas", vbExclamation, "Error"
Exit Sub
End If
End If
Dim fIni As Integer, fFin As Integer, i As Integer
fIni = 1
fFin = Me.txtnumero
For i = fIni To fFin
CurrentDb.Execute "INSERT INTO prodprint(Id, nombre, numero, color, unidad, precio) VALUES('" & Nz(Me![Lista56], 0) & "','" & Nz(Me![Nombre], 0) & "','" & Nz(Me![Numero], 0) & "','" & Nz(Me![Color], 0) & "','" & Nz(Me![Und_medida], 0) & "','" & Nz(Me![Precio], 0) & "')"
Next i
Me.txtnumero = Null
DoCmd.Requery
End Sub

Private Sub agregatodos_Click()
If IsNull(Me.txtnumero) Then
MsgBox "Debe agregar una cantidad"
Exit Sub
If Me.txtnumero < 0 Then
MsgBox "No puede agregar Cantidades negativas", vbExclamation, "Error"
Exit Sub
End If
End If
Dim fIni As Integer, fFin As Integer, i As Integer
fIni = 1
fFin = Me.txtnumero
For i = fIni To fFin
CurrentDb.Execute "addallproduct"
Next i
Me.txtnumero = Null
DoCmd.Requery
End Sub

Private Sub elimina_registro_Click()
resultado = MsgBox("Esta seguro de eliminar registro", vbOKCancel, "CONFIRMACION")
If resultado = vbOK Then
DoCmd.SetWarnings False 'Sirve para deshabilitar las advertencias de sistema
DoCmd.RunCommand acCmdDeleteRecord 'comando que ejecuta eliminacion
DoCmd.SetWarnings True 'Sirve para habilitar las advertencias de sistema
Else
MsgBox "A cancelado eliminar registro"
End If
DoCmd.Requery
End Sub

Private Sub eliminalistaetiqueta_Click()
resultado = MsgBox("Esta seguro de eliminar lista etiquetas", vbOKCancel, "CONFIRMACION")
If resultado = vbOK Then
DoCmd.SetWarnings False 'Sirve para deshabilitar las advertencias de sistema
stDocName = "deletelistprint"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit
DoCmd.SetWarnings True 'Sirve para habilitar las advertencias de sistema
Else
MsgBox "A cancelado eliminar registro"
End If
DoCmd.Requery
End Sub

Private Sub Iniciocodigo_Click()
DoCmd.OpenForm "starcodigo"
Me.Requery
End Sub

Private Sub limpia_campo_Click()
Me.txtbuscar = ""
End Sub

Private Sub Comando58_Click()
Lista56.Requery
End Sub

Private Sub Lista56_AfterUpdate()
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id] = " & Str(Nz(Me![Lista56], 0)) <--- Error
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

1 Respuesta

Respuesta
2

Declara rs como un recordset, no como un objeto, que no tiene el método FindFirst:

Dim rs As DAO.Recordset

o

Dim rs As Recordset

Un saludo.


Donde se haría el cambio precisamente?

Private Sub Lista56_AfterUpdate()
Dim rs As Object  <--- Esta es la linea que debes cambiar

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id] = " & Str(Nz(Me![Lista56], 0)) <--- Error
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

El error persiste en la misma sección

¿Y qué error te da (adivino no soy...)?

Si el Id es un valor numérico, quítale el Str, porque no tiene sentido que lo conviertas a texto...

rs.FindFirst "[Id] = " & Nz(Me![Lista56], 0)

Transformar el Id a texto es lo que busco, pero por más que edite siempre surge el mismo error 3464 señalando el texto antes marcado.

El error 3464 cual es ¿error de que no coinciden los tipos de datos?

Si el campo Id en la tabla lo has definido como numérico, sí o sí lo tienes que comparar con un valor numérico (o autonumérico):

rs.FindFirst "[Id] = " & Nz(Me![Lista56], 0)

Si Id en la tabla lo has definido como texto, además de convertirlo a texto tienes que tratarlo como un texto, es decir, entre comillas simples: 

rs.FindFirst "[Id] = '" & Str(Nz(Me![Lista56], 0)) & "'"

Y no tienes más opciones, cualquier otra cosa que intentes te dará error...

Bueno, sí habría otra, pero para mí no tiene ningún sentido, y que sería que el campo Id sea numérico y lo "conviertas" a texto para validarlo contra un número convertido también a texto:

rs.FindFirst "Str([Id]) = '" & Str(Nz(Me![Lista56], 0)) & "'"

pero como digo no me tiene sentido tener dos números y convertirlos a texto para compararlos...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas