** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Actualizar Varios Registro, Cuadro lista
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Actualizar Varios Registro, Cuadro lista

 Responder Responder
Autor
Mensaje
Lys Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Marzo/2023
Localización: Madrid
Estado: Sin conexión
Puntos: 3
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Lys Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Actualizar Varios Registro, Cuadro lista
    Enviado: 03/Marzo/2023 a las 11:58
Lo primero,  gracias a todos los que  ayudais a los novatos como una servidora, intentare ser breve y concisa.

Tengo una base de datos para pasar ofertas a los clientes, con la siguiente estructura:

1º TABLA CABECERA DE OFERTAS [IDNUMEROOFERTA](CLAVE PRINCIPAL), [FECHA], [CLIENTE] etc.

2º TABLA DETALLE DE OFERTAS [IDDEOFERTA](CLAVE PRINCIPAL), [NUMERO OFERTA], [ARTICULO], [UND], [DIAS] etc.

Relación uno a varios

3º TABLA COEFICIENTE

               [ID],[INDICADOR],[DIAS]

FORMULARIO NUEVAS OFERTAS, con los campos de la primera tabla

SUBFORMULARIO DETALLE DE OFERTAS, con los campos de la segunda tabla

               CUADRO DE LISTA DE LA TABLA COEFICIENTE con los campos de la tercera tabla

En muchas ocasiones después de pasar la oferta al cliente con un montón de artículos ejemp. por 1 [DIA] tengo que modificar este campo e indicar 2 ó 3,5 o lo que sea.

Cree un cuadro de lista y en el evento al hacer click puse el siguiente código, pero solo me actualiza el primer registro.

Private Sub Lista_Coeficiente_Click()

Me.DIAS = Me.Lista_Coeficiente.Column (2)

End Sub              

Navegando encontré éste otro, y me dice error de compilación, no se ha definido Sub o Function

Private Sub Lista_Coeficiente_Click()

Update.DETALLE_DE_OFERTAS

Me.DIAS = Me.Lista_Coeficiente.Column(2)

WHERE [FORMULARIOS]![FORMULARIO_NUEVAS_OFERTAS].IDNUMEROOFERTA = [FORMULARIOS]![SUBFORMULARIO_DETALLE_DE_OFERTA].NUMEROOFERTA

End Sub

Lo único que me funciona a medias es una consulta de actualización (ejecuto desde un botón) donde he puesto como criterio [indicar número de días] aquí el error es que como estamos acostumbrados a usar el teclado numérico, el punto no lo  coge como una coma y cundo pones 3.5 en el campo[DIAS] pone 35.

Espero haberme explicado bien.

Graciaaaaaassssss

Alguna sugerencia???

¡Creo que al final me he enrollado demasiado!

Sorry.



Editado por Lys - 03/Marzo/2023 a las 12:45
Esther
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Marzo/2023 a las 12:21
Hola Esther y bienvenida al foro,

Este código:

Me.DIAS = Me.Lista_Coeficiente.Column (2)

solo actualizará un registro (el que esté activo del subformulario)

El otro código que pones es una pseudo-SQL que nunca puede funcionar directamente. Colocado así podria funcionar:

CurrentDb.Execute "UPDATE DETALLE_DE_OFERTAS SET Dias = " & Me!Lista_Coeficiente.Column(2) & " WHERE IDNUMEROOFERTA = " & Me!NumeroOferta, dbFailOnError

De todas formas, para mi la mejor técnica que se me ocurre para actualizar el conjunto de registros de un subformulario es recorrer su RecordsetClone para lanzar la modificación.

(se supone que el ListBox Lista_Coeficiente se encuentra en el formulario padre)

Dim rstClone As DAO.Recordset

Set rstClone = Me!ElControlSubformulario.Form.RecordsetClone

Do Until rstClone.EOF
  rstClone.Edit
  rstClone!Dias = Me!Lista_Coeficiente.Column(2)
  rstClone.Update
Loop
rstClone.Close
Set rstClone = Nothing
 

Nota: los experimentos, con gaseosa (o sea, que lo hagas en una copia)

Nota2: escrito al vuelo. Revisa la sintáxis.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Lys Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 02/Marzo/2023
Localización: Madrid
Estado: Sin conexión
Puntos: 3
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Lys Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Marzo/2023 a las 15:15
Un millón de gracias!
El primer código me da error (3078, no puede encontrar la tabla o consulta)
El segundo lo escribo así y me da error en esta línea
Set rstClone = Me ! DIAS.Form.RecordsetClone

No se encontró el método o el dato miembro
ListBox Lista_Coeficiente se encuentra en el SUBFORMULARIO_DETALLE_DE_OFERTAS

Algo debo de escribir mal
Unhappy
Esther
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Marzo/2023 a las 15:54
Hola,

El código CurrentDb no deja de ser lo que conseguirías con una consulta de actualización. Lo que se hace es substituir el valor que darías (clausula SET) por el que tengas en el control y el criterio (clausula WHERE) por el registro actual.

El segundo debes asignar el recordsetclone correctamente.

Si el cuadro de lista esta en el subformulario y el código se lanza desde el propio subformulario, entonces la asignación es:

Set rstClone = Me.RecorsetClone

El RecordsetClone es la copia en memoria de los registros de una tabla/consulta/formulario. 

Tu has escrito Me!DIAS.Form.RecordsetClone y tienes error.

Analiza:
Me! --> El formulario actual
DIAS --> El nombre del control
.Form --> Indicas que el control DIAS es un subformulario
.RecordsetClone --> y que pretendes hacer una copia (clone) de los registros

Como comprenderás, eso es un error.

Busca información sobre RecordsetClone (escribe eso en la ventana de código y pulsa F1) para ver como funciona.

Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14926
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Marzo/2023 a las 15:56
Por cierto, me dejé una línea en el código Embarrassed(es lo que tiene escribir al vuelo)


Dim rstClone As DAO.Recordset

Set rstClone = Me!ElControlSubformulario.Form.RecordsetClone

Do Until rstClone.EOF
  rstClone.Edit
  rstClone!Dias = Me!Lista_Coeficiente.Column(2)
  rstClone.Update
  rstClone.MoveNext
Loop
rstClone.Close
Set rstClone = Nothing
Xavi, un minyó de Terrassa

Mi web
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable