Duda sobre manejo de registros con Recordset (creo)

Los expertos. Tengo un problema y no sé cómo solucionarlo.
Tengo un formulario con subformulario donde se van introduciendo registros relacionados, esto es, en el formulario se meten los datos generales de los albaranes (fecha albarán, proveedor) y en el subformulario el desglose de esos albaranes (producto comprado, cantidad, precio, fecha final consumo). Todo esto se nutre de otras tablas tales como artículos, proveedores, etc., mediante cuadros combinados y utilizando la propiedad Column para rellenar los distintos cuadros de texto. Esto funciona bien en principio.
El problema es el siguiente: yo quiero que, mediante un evento asociado a un botón, y siempre a criterio del usuario, compruebe lo siguiente:
- De cada proveedor me extraiga las líneas de los artículos que sean iguales, bien comprados en la misma fecha o en distinta, los ordene por "fecha de compra", y en el campo de "fecha fin consumo" ponga la "fecha de compra" de la línea anterior del mismo producto, dejando la última línea en blanco, ya que esta última cogerá la fecha de la siguiente línea cuando se introduzca y se vuelva a ejecutar el evento.
He oído decir por ahí que eso se tiene que hacer con recordset, pero, sinceramente, no tengo ni idea de cómo. Lo más que he conseguido hacer ha sido una consulta en la que me aparecen ordenados los artículos que he comprado tanto por código de artículo como por fecha de compra, pero no sé cómo incluir el dato que me falta.
Perdonad si he sido un poco farragoso; si necesitáis ver más datos, no dudéis en preguntarme y trataré de explicarme mejor.

Respuesta
1

No se si me he enterado bien, supongo que el resultado de la consulta es:

Proveedor Articulo FechaCompra FechaFinconsumo

aaaa 01 01/02/2013 02/03/2013

aaaa 01 02/03/2013 05/03/2013

aaaa 01 05/05/2013

¿Es así...?

Si es así, lo que tienes que hacer es un recordset, este sería el código:

'Declaramos las variables

Dim db as Database

Dim rs as Recordset

Dim var as variant

'Activamos la base de datos

Set db=currentdb()

'Creamos el recordset

Set rs=db.OpenRecordset("Select Proveedor, Articulo, Fechacompra, FechafinConsumo from NombreTabla where Proveedor='aaaa' and Articulo='01' order by FechaCompra")

'Recorremos el recordset (nos situaremos al final del recordset -movelast- para ir actualizado hacia arriba)

rs.MoveLast

Do while not rs.Bof

var=rs!FechaCompra

rs.MovePrevious

rs.edit

rs!FechaFinConsumo=var

rs.Update

loop

Es decir, me sitúo en el último registro, doy el valor a la variable var con el valor del campo FechaCompra me muevo al registro anterior y actualizo el campo FechaFinConsumo

Angeles, muchas gracias por tu aclaración.

Tal y como me lo has puesto me has orientado bastante, pero sigo teniendo un par de dudas:

1º.- En la línea donde se abre el recordset, me pones "from NombreTabla". ¿Funciona igual con una consulta o se tiene que abrir más de una tabla?. El tema es que los datos se encuentran en dos tablas; la primera es cabeceras_documentos y la segunda lineas_documentos. En la primera se encuentra la fecha de la compra y en la segunda la fecha de fin de consumo. Ambas se relacionan con el id_documento.

2º.- Donde me pones "where proveedor='aaa' and Articulo='01', ¿quiere decir que tan sólo me va a actualizar el artículo 01 del proveedor 'aaa'?.¿Y si hay varios proveedores con varios artículos?. Es más, ¿y si tengo que es más de un proveedor el que me sirve el mismo artículo?.

Perdona que pregunte tanto, pero es la primera vez que uso los recordset y estoy liao como una calabaza.

El resto sí me ha quedado claro cómo funciona, ha sido muy instructivo.

Muchísimas gracias por todo de nuevo.

Julián

P.D.:Si quieres te puedo mandar la base de datos para que la veas.

Lo que pongo para abrir el recordset, el Select... es la sql de la consulta.

Te explico, un recordset es un grupo de datos, el resultado es el mismo que una consulta de selección, y sobre ese grupo de datos es sobre el que actúas.

Si no sabes lenguaje sql, en la consulta que tienes hecha, en modo diseño en la parte superior izquierda (en access 2003, no se si estará en el mismo sitio en otras versiones...) tienes 3 opciones: modo vista, diseño y sql, si abres la sql podrás ver el código de la consulta, este código es el que tienes que utilizar para abrir el recordset.

Te pongo las partes fundamentales de una consulta de selección:

SELECT para seleccionar los campos que quieres, lo harás con el nombre del campo separado por ,

FROM el nombre de la tabla a la que pertenecen los campos.

Si por ejemplo tengo una tabla que llamo Proveedores con 2 campos DNI y Nombre, la consulta básica sería:

Select DNI, Nombre From Proveedores

Te devolvería TODOS los registros con el orden que tengas en la tabla

Si quieres ordenar por DNI, utilizas el ORDER BY

SELECT dni, nombre FROM Proveedores ORDER BY DNI

y si quieres poner una o varias condiciones, utilizas el WHERE

Si queremos filtrar por el DNI=01 pondríamos:

SELECT DNI, nombre FROM Proveedores='01'

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas