** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Modificar Campos  Consulta - No actualiza Recordse
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoModificar Campos Consulta - No actualiza Recordse

 Responder Responder Página  12>
Autor
Mensaje
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Tema: Modificar Campos Consulta - No actualiza Recordse
    Enviado: 03/Marzo/2019 a las 21:34
Buenas tardes, 
Tengo un subformulario cuyo origen es una consulta. He intentado modificar varios campos pero no me lo permite:

Dim rst As DAO.Recordset

Set rst = Me.subComprobacionGiros.Form.RecordsetClone

If rst.RecordCount > 0 Then

With rst

.MoveFirst

While Not .EOF

  .Edit

  !PAGADA = True

  !GIRADA = True

  !FECHA_GIRO = Me.txtFechaGiro

  .Update

  .MoveNext

Wend

.Close

End With

End If

Me dice que el Recordset no se puede modificar.

¿Cómo podría solucionarlo? He intentado varias opciones, pero todas me dan error, y no sé si es porque cometo el error en algo o es que estoy haciendo una burrada.

Los campos que quiero cambiar están todos en la tabla facturas (pero necesito modificar solo las filtradas en ese subformulario)

Gracias por adelantado.

Saludos,



Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11858
Enlace directo a este mensaje Enviado: 04/Marzo/2019 a las 09:10
La consulta base del subformulario (de la que se "alimenta" el recordsetclone es una consulta no actualizable
Sin ver la SQL de la consulta es dificil dar con una solución pero empieza por llevarte la SQL a una consulta de pruebas y modificala para obtener una consulta actualizable. 
Nota: a mi no se me dan muy bien las consultas pero siempre he tenido ese tipo de problemas. casi siempre se debe a un exceso de tablas en la consulta o a unas relaciones mal construidas. 

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 16:09
Buff, con lo que me costó hacer la dichosa consulta, porque me daba fallos cuando aparte de portes había cargos o abonos en la misma factura.... que me la tuvieron que construir... espero haya otra opción.
La consulta es para obtener el total de la factura, dado que se nutre de varias tablas: almacenaje, cargos-abonos y portes: 
Es esta: 
SELECT Factura.IDFACTURA, Factura.IDCLIENTE, C1.TotalCargosAbonos, C2.TotalAlmacenaje, C3.SUMPORTES, Nz([C1].[TotalCargosAbonos],0)+Nz([C2].[TotalAlmacenaje],0)+Nz([C3].[SUMPORTES],0) AS TOTAL_BASEIMPONIBLE, Factura.tipo_iva, CCur([TOTAL_BASEIMPONIBLE]*(1+[factura].[tipo_iva])) AS TOTAL_FACTURA
FROM ((Factura LEFT JOIN qsubCargosAbonos AS C1 ON Factura.IDFACTURA=C1.NFACTURA) LEFT JOIN qsubAlmacenaje AS C2 ON Factura.IDFACTURA=C2.NFACTURA) LEFT JOIN qsubExpedicion AS C3 ON Factura.IDFACTURA=C3.IDFACTURA;
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 17:16
Hola! He hecho una trampilla...
 He puesto un subformulario no visible con origen a la tabla facturas y vinculado al subformulario por el ID al subformulario cuyo origen no me deja modificar, y aplico a la tabla facturas directamente los cambios
 Era mejor hacerlo... de forma un poco menos cutre, pero ... a veces el fin justifica los medios ;)
 No obstante si a alguien se le ocurre algo más correcto, se agradece.
 Un saludo!!
 

Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 18:58
Nada, estoy tonta.. solo había probado con el primer registro... cuando me puse a girar varias facturas me he dado cuenta de que solo me sale la primer factura... así que mi "truco", no me vale para nada.. Cualquier sugerencia.... se agradece
Saludos!!!
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4920
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 20:22
Respira profundo, y has caso a Xavi, a hacer pruebas en el generador de consultas
Cuando no es actualizable una consulta:
*consulta de referencia cruzada
*Consulta que calcula una suma, promedio o cuenta
*Consulta con tablas adjuntas que no tienen índice o clave primaria
*consulta para la que no se dispone del permiso requerido para actualizar o eliminar
*Consulta con la propiedad valor único en si
*consulta basada en 3 o mas tablas con relación Varios a uno a varios
*Consulta con mas de una tabla o consulta que estas no están entrelazadas por una linea de union en la vista diseño

Cual es tu caso.
Saludos.




Editado por emiliove - 05/Marzo/2019 a las 20:23
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 21:25
jajaja, eso de respirar profundo suena mal. 
 La consulta calcula una suma, el total de las facturas, suma de varias tablas.
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4920
Enlace directo a este mensaje Enviado: 05/Marzo/2019 a las 21:55
Ok, quita la suma de la consulta a ver si te deja actualizar ahora, si funciona la suma la haces en el subformulario 

Saludos.
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 07/Marzo/2019 a las 20:29
Hola, he probado y tampoco me deja modificar:
SELECT Factura.FECHAFACTURA, Factura.IDFACTURA, Factura.IDCLIENTE, Factura.FECHA_VENCIMIENTO, Factura.PAGADA, Factura.tipo_iva, Factura.GIRADA, CargosAbonos.IMPORTE, Almacenaje.IMPORTE, Expedicion.portes
FROM (CargosAbonos RIGHT JOIN (Expedicion RIGHT JOIN Factura ON Expedicion.IDFACTURA = Factura.IDFACTURA) ON CargosAbonos.NFACTURA = Factura.IDFACTURA) LEFT JOIN Almacenaje ON Factura.IDFACTURA = Almacenaje.NFACTURA;

Aclaro un poco las tablas que tengo:
FACTURA
------------          
IDFACTURA
FECHAFACTURA
IDCLIENTE
....

EXPEDICION
-------------
NEXPEDICION
IDCLIENTE
PORTES
IDFACTURA
.....

CARGOS_ABONOS
--------------------
IDCARGO
IDFACTURA
IDCLIENTE
IMPORTE
.....

ALMACENAJE
--------------
IDALMACENAJE
IDCLIENTE
IMPORTE
....

Me ayudaron a construirla tal cual la tengo en otro mensaje titulado CONSULTA AGRUPADA ( me sumaba mal cuando la misma factura tenía portes y abonos al mismo tiempo) , donde está colgado el ejemplo.

Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11858
Enlace directo a este mensaje Enviado: 08/Marzo/2019 a las 10:50
Propuesta de cambio de táctica: recorre el recordsetclone y, sabiendo el identificador del documento que pretendes modificar, lanza una consulta de actualización.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 09/Marzo/2019 a las 10:38
Buenas Xavi, me he puesto con ello... me da error 3144 en la instrucción UPDATE...
Por más que he consultado sobre consultas de actualización no doy con el error, ¿quizá este haciendo algo mal antes? Espero no sea una burrada...


Dim NFacturaGiro As String


     Dim rst As DAO.Recordset


     Dim miSql As String


Set rst = Me.subfrmComprobacionGiros.Form.RecordsetClone


If rst.RecordCount > 0 Then


With rst


.MoveFirst


While Not .EOF


NFacturaGiro = rst("IDFACTURA")


 


miSql = "UPDATE FACTURA SET FACTURA.PAGADA =" & True & ","


miSql = miSql & "FACTURA.GIRADA =" & True & ","


miSql = miSql & "FACTURA.FECHA_ABONO= #" & Format(Me.txtFechaGiro, "mm/dd/yyyy") & "# ,"


miSql = miSql & "FACTURA.FECHA_REALIZACIONGIRO= #" & Format(now(), "mm/dd/yyyy") & "# ,"


miSql = miSql & "WHERE IDFACTURA=  '" & NFacturaGiro & "'"


 


 CurrentDb.Execute miSql


  .MoveNext


 


Wend


.Close


End With


End If


Set rst = Nothing


 


Me.subfrmComprobacionGiros.Requery


  

Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3137
Enlace directo a este mensaje Enviado: 09/Marzo/2019 a las 11:27
Hola
A primera vista dos cosas:
1ª.-En miSql = miSql & "FACTURA.FECHA_REALIZACIONGIRO= #" & Format(now(), "mm/dd/yyyy") & "# ," la coma final sobra. 
2ª.-¿Idfactura es numérico?
Prueba y ya comentas
Un saludo a todos
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 996
Enlace directo a este mensaje Enviado: 09/Marzo/2019 a las 18:05
Yo suelo usar el editor de consultas de Access para preparar la consulta con unos datos de prueba. Y cuando ya me funciona en el editor, la "traspaso" a VBA. Y en caso de problemas con la "traducción", el maestro Chea creó un complemento para esto:

- http://access.bengoechea.net/utilidades-1/sql2vba


Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Enlace directo a este mensaje Enviado: 10/Marzo/2019 a las 11:26
Hola, muchas gracias a ambos.
 He quitado la coma final. IDFACTURA es tipo texto.
Me da error de todos modos. Error 3061, pocos parámetros. Se esperaba 1.
He probado con el editor de consultas, pero he intentado bajarme el complemento pero no me lo reconoce... uso 2007
En el editor, probando con dos facturas existentes me lo aplica correctamente:
UPDATE Factura SET Factura.FECHA_ABONO = Now(), Factura.FECHA_RealizacionGiro = Now(), Factura.PAGADA = True
WHERE (((Factura.IDFACTURA)="12828" Or (Factura.IDFACTURA)="12552"));
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 10841
Enlace directo a este mensaje Enviado: 10/Marzo/2019 a las 11:50
Pues ahora, a partir de esa SQL que te funciona ves haciendo cambios -uno a uno-.

Por cierto, si quitas las 'calificaciones' queda mucho más limpio de leer:

SQL = "UPDATE Factura SET FECHA_ABONO = Now(), FECHA_RealizacionGiro = Now(), PAGADA = True
WHERE IDFACTURA = '12828'"
CurrentDb.Execute SQL


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable