Imprimir página | Cerrar ventana

ejecutar Recordset se vuelve lento

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85003
Fecha de impresión: 18/Abril/2024 a las 04:25


Tema: ejecutar Recordset se vuelve lento
Publicado por: escoper45
Asunto: ejecutar Recordset se vuelve lento
Fecha de publicación: 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



Respuestas:
Publicado por: Maverick2019
Fecha de publicación: 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,


Publicado por: javier.mil
Fecha de publicación: 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
http://www.accessdemo.info/docs_articulos/como-crear-recordset-mas-rapidos.html" rel="nofollow - http://www.accessdemo.info/docs_articulos/como-crear-recordset-mas-rapidos.html




-------------
https://www.accessdemo.info" rel="nofollow - https://www.accessdemo.info





Publicado por: guarracuco
Fecha de publicación: 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);


Publicado por: guarracuco
Fecha de publicación: 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)



Imprimir página | Cerrar ventana