Access - OpenRecordset

 
Vista:

OpenRecordset

Publicado por Carlos (5 intervenciones) el 24/09/2022 09:27:06
Hola a todos.

Tengo un formulario en el que prentedo recuperar registros individuales mediante dos cuadros combinados en cascada. A continuación que saque a cuadros te texto independientes todos los valores almacenados en el registro, pudiendo modificarlos y luego guardarlos con un botón.

La cuestión es que he seguido un ejemplo pero no funciona. Os pongo el código por si me podéis orientar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub recuperaRegistro()
    Dim rst As DAO.Recordset, SQL As String
 
    SQL = "SELECT * FROM TARIFA WHERE ESPESOR = '" & Me.COMB_ESPESOR & "' & MATERIAL = '" & Me.COMB_MATERIAL & "'"
    Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
    With rst
        Me.txtMaterial = MATERIAL
        Me.txtEspesor = ESPESOR
        Me.txtPrecioCompra = PRECIO_COMPRA
        Me.txtMargen = MARGEN
        Me.txtPrecioVenta = PRECIO
        Me.txtFechaCompra = ULTIMA_COMPRA
        Me.txtPrecioCompraUltimo = ULTIMO_PRECIO_COMPRA
        Me.txtObservaciones = OBSERVACIONES
    End With
    rst.Close: Set rst = Nothing
    Exit Sub
End Sub
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

OpenRecordset

Publicado por Anonimo (3316 intervenciones) el 24/09/2022 12:40:48
La referencia a los datos del recordset no es correcta, un ejemplo con ... Me.txtMaterial = MATERIAL ...

Me.txtMaterial <<< === el objeto que recibira el valor

MATERIAL <<<<<<=== asi escrito Access espera una variable.
Lo adecuado (se está utilizando With) es :
1
!MATERIAL
El (!) hace referencia a 'rst' , esto es, equivale a escribir:
1
rst!MATERIAL

Si se corrige el error en esas asignaciones posiblemente funcionara, solo podría fallar si no existe la combinación 'espesor + material' (pues rst no tendría datos).
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

OpenRecordset

Publicado por Carlos (5 intervenciones) el 24/09/2022 14:00:18
Ante todo, gracias por tu respueta.

Así tampoco funciona. Me sale un error "No coinciden los tipos de datos en la expresión de criterios"
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

OpenRecordset

Publicado por Anonimo (3316 intervenciones) el 24/09/2022 15:06:05
No puedo juzgar lo que no 'veo' y por ello la frase:
... Así tampoco funciona. Me sale un error "No coinciden los tipos de datos en la expresión de criterios" ...

No tengo idea de a que se refiere, normalmente se detiene en la línea que da el error y la delata cambiándole el color.

Al referirse a criterios se puede deducir que el error está en la SQL y en ella que, al utilizar comillas simples, ambos datos son de tipo texto (o alfanuméricos) utilizaremos unos para ver lo que devuelve la SQL (espesor = 'la mitad de' , material = 'corcho'):

1
SQL = "SELECT * FROM TARIFA WHERE ESPESOR = 'la mitad de' & MATERIAL = 'corcho'"

Access no entenderá que: & <==> AND

Lo correcto sería así:
1
SQL = "SELECT * FROM TARIFA WHERE ESPESOR = 'la mitad de' AND MATERIAL = 'corcho'"
Lo que nos lleva a corregir el original:
1
SQL = "SELECT * FROM TARIFA WHERE ESPESOR = '" & Me.COMB_ESPESOR & "' AND MATERIAL = '" & Me.COMB_MATERIAL & "'"

Queda la duda que sean texto o número el tipo de datos esperados (dependerá del tipo de datos en el origen de datos, la tabla), si fueran numéricos (el caso de un ID autonumérico) se escribiría así:
1
SQL = "SELECT * FROM TARIFA WHERE ESPESOR = " & Me.COMB_ESPESOR & " AND MATERIAL = " & Me.COMB_MATERIAL

Dispones de ambas versiones (números/texto) utiliza la adecuada en función del tipo de dato correcto para cada uno.
Esto no invalida el error detectado antes (que era más llamativo) y que si aun esta sin resolver ....

(Cuanta más información se proporcione, antes se localizan los problemas)
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

OpenRecordset

Publicado por carlosgavel (5 intervenciones) el 24/09/2022 15:41:47
Mofidicado el AND y el tema de las comillas (unos datos son texto y otros numéricos), el error que se señala es

1
Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)

Cuando pongo el cursor sobre lo resaltado en amarillo pone dbOpenForwardOnly=8.

El código ha quedado así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rivate Sub recuperaRegistro()
    Dim rst As DAO.Recordset, SQL As String
 
    SQL = "SELECT * FROM TARIFA WHERE ESPESOR = " & Me.COMB_ESPESOR & " AND MATERIAL = " & Me.COMB_MATERIAL & ""
    Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
    With rst
        Me.txtMaterial = !MATERIAL
        Me.txtEspesor = !ESPESOR
        Me.txtPrecioCompra = !PRECIO_COMPRA
        Me.txtMargen = !MARGEN
        Me.txtPrecioVenta = !PRECIO
        Me.txtFechaCompra = !ULTIMA_COMPRA
        Me.txtPrecioCompraUltimo = !ULTIMO_PRECIO_COMPRA
        Me.txtObservaciones = !OBSERVACIONES
    End With
    rst.Close: Set rst = Nothing
    Exit Sub
End Sub
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

OpenRecordset

Publicado por Anonimo (3316 intervenciones) el 24/09/2022 17:28:04
Esta indicando que se desea abrir solo para lectura, pero no está bien ubicado, le falta un parámetro que (cuando no se utiliza) se debe de respetar su espacio (esto es: añadir una coma) de esa forma:
.- El primer parámetro será la SQL
.- El segundo no se utiliza
.- El tercero es el indicador del modo de apertura

dbOpenForwardOnly le indica que solo lo puede recorrer hacia adelante ¿?

Mi preferencia es abrirlo en modo lectura (dbReadOnly) que no provoca interferencias cuando se comparte o utiliza desde otra ubicación.

1
Set rst = CurrentDb.OpenRecordset(SQL, , dbReadOnly)
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

OpenRecordset

Publicado por Celine (1 intervención) el 23/11/2022 11:02:37
Great forum that helped me learn a lot of new knowledge from many different issues
bitlife
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
sin imagen de perfil

OpenRecordset

Publicado por Mike (1 intervención) el 06/02/2024 05:59:55
También encontré este error, geometry dash lite es terrible.
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
sin imagen de perfil

OpenRecordset

Publicado por Johnson (1 intervención) el 15/02/2024 15:22:13
I appreciate the content; I discovered a lot of useful stuff here. Continue to provide such insightful articles.
connections game
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