** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - ejecutar Recordset se vuelve lento
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoejecutar Recordset se vuelve lento

 Responder Responder
Autor
Mensaje
escoper45 Ver desplegable
Habitual
Habitual
Avatar

Unido: 06/Junio/2010
Localización: Mexico
Estado: Sin conexión
Puntos: 52
Enlace directo a este mensaje Tema: ejecutar Recordset se vuelve lento
    Enviado: 11/Febrero/2020 a las 00:42

buenas tarde tengo este codigo que compra  2 tablas diferentes   

Tbl_ComprasDet  compara con   apartadosCOtiCompra


compara si el codigo es igual y tiene una cantidad que lo agrege ala tabla 

Tbl_ComprasDet


lo hace pero se tarda mucho en mas de 50 registro 


Dim numeroA As String
numeroA = Me.Codigo.Value
'Otra forma es usar un Recordset directo a la tablas
Dim rs As DAO.Recordset 'Creamos el recordset dao
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Tbl_ComprasDet WHERE NrPedidoDet = " & numeroA, dbOpenDynaset)
Me.Refresh 'Refrescamos la vista
rs.MoveFirst 'Nos movemos al inicio
Do While Not rs.EOF 'Verificamos que no hemos llegado al final
rs.Edit 'Editamos los registros
rs!Qtdeapar = Nz(DCount("Catapartado", "apartadosCOtiCompra", "[Nopieza]='" & rs!CodProducto & "'"), 0)
rs.Update 'Actualizamos
rs.MoveNext 'Nos movemos al siguiente registro
Loop 'Hacemos el bucle de nuevo
rs.Close 'Cerramos la variable
Set rs = Nothing 'Dejamos la variable sin inicializar
Me.Refresh 'Refrescamos la vista

Escoper

Soporte Tecnico
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 11/Febrero/2020 a las 10:32
Hola
Quizás tenga mejor rendimiento sí haces un ForwardOnly y por cada registro ejecutas una query de actualización. Por supuesto, el recordset readonly para evitar bloqueos.

Salu2,
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4812
Enlace directo a este mensaje Enviado: 11/Febrero/2020 a las 20:07
Ademas de lo ya comentado como la forma de apertura de la tabla tambien hay algunas funciones que también pueden hacer ralentizar el código

Me.Refresh ' << Primer Refresh es necesario ?
rs.MoveFirst ' << Se podria suprimir
Do While Not rs.EOF ' << Puedes sustituitala (mira el enlace de abajo)
DCount ' << Deberias plantearte cambiarla ....
Me.Refresh ' << Ultimo Refresh es necesario ?

Pegale un vistazo aqui


Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 15/Febrero/2020 a las 08:14
Con una instrucción sql puedes hacerlo.
La he escrito al vuelo, desde un dispositivo mobil, así que dudo funcione de primera.

update tbl_comprasdet cdet
set cdet.qtdeapar (
  select acc.catapartado
  from apartadoscoticompra acc
  where  cdet.codproducto = acc.nopieza And acc.catapartado>0);
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 15/Febrero/2020 a las 08:16
Copiala y pegarla en el editor de consultas para probarla.
Luego busca como ejecutar una consulta.
Quizás debas cambiar el criterio >0 por not is null ( or is not null, en este momento estoy inseguro cual es para vba)


Editado por guarracuco - 15/Febrero/2020 a las 08:18
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable