Lentitud en consulta Access vba (ADO)
He creado una consulta para realizar la formación de trabajadores y que me facilita cuando realizaron la última formación. Hasta aquí todo correcto pero he querido ir más allá y he incorporado un campo para consultar, en base a una fecha prevista de formación y que me muestre el turno del trabajador. El sistema funciona, lento, pero funciona y me lo muestra el turno de ese día pero cada vez que bajo el scroll parece cómo sí me volviese a realizar la búsqueda. He intentado cambiar el tipo de recorset, etc pero no veo donde puede fallar.
En la consulta de agrupación le he añadido el campo siguiente, con total tipo Expresión y que llama a la función Turno_por_fecha pasándole el dni del trabajador (la fecha de formació la coge del formulario):
Turno: Turno_por_fecha([Plantilla].[dni])
La función de consulta a la otra BD llamada Turno_por_fecha es la siguiente y es lo que se ejecuta por cada registro para recibir el turno:
Public Function Turno_por_fecha(dni As Variant) As Variant
Dim dnix As Variant
Dim fecha As Date
Dim fechax As Variant
Dim rs2 As dao.Recordset
Dim strBDRemota As String
Dim dbx As dao.Database
Dim stAppName As String
fechax = Forms!Formacion.[fecha_por_turnos]
If (IsNull(fechax)) Then
Turno_por_fecha= "Sense dades"
Else
fecha = Format(fechax, "mm/dd/yyyy")
stAppName = Dir("U:\Cuadrantes.accdb")
Set dbx = DBEngine.OpenDatabase(stAppName)
dnix = dni
strSQL = "SELECT Turno FROM Turnos " & _
" WHERE dni='" & dnix & "' and Fecha=#" & fecha & "#"
Set rs2 = dbx.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
If rs2.RecordCount <> 0 Then
Turno_por_fecha= rs2!Turno
Else
Turno_por_fecha= "Sense dades"
End If
rs2.Close
Set rs2 = Nothing
dbx.Close
End If
End Function
No se si hay manera de optimizar el proceso. ¿Cómo lo véis?