es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VBA / ADODB recordset no se borra – depende del PC.

Como de costumbre, un problema un tanto extraño con uno de mis macros de VBA de Excel.

Utilizo Excel como una base de datos, con una hoja de cálculo que almacena una gran cantidad de datos. Busco la fecha utilizando ADODB.

Todo funciona bien en la mayoría de los PC, pero hoy en día, uno de mis compañeros se encontró con un problema que no puedo entender.
El problema solo se ve en su computadora. Él me envió el archivo, pero no pude reproducir el problema en mi PC. Además, otros compañeros que utilizan el mismo código fuente no tienen problemas.

El problema:
Uno de los campos (columna) en la base de datos es el “estado del caso”. Cuando cambiamos el estado de un caso de ‘Abierto’ a ‘Cerrado’ y luego consultamos todos los registros con el estado ‘Abierto’, el caso cambiado aún aparece en el conjunto de registros resultante. Cuando verifico el estado en la hoja de cálculo que se utiliza como fuente de consulta, puedo ver que el estado está configurado como ‘Cerrado’, pero ADODB aún lo encuentra como ‘Abierto’.

Como mencioné, esto solo ocurre en 1 PC, por lo que no puede ser el código. ¿Podría ser alguna biblioteca en particular y, de ser así, cuál? Comparé las bibliotecas utilizadas a través de una sesión de TeamViewer en su PC y en mi PC, y todas son idénticas.

Estoy perdido.

Este es el código que utilizo

Public Sub OpenDB()
Si cnn.state = adStateOpen Then cnn.Close
cnn.ConnectionString = “Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=” & _
ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name
cnn.Open
End Sub

Public Sub closeRS()
Si rs.state = adStateOpen Then rs.Close
rs.CursorLocation = adUseClient
End Sub


If PRODUCTname <> “” Or PIRstate <> “” Or cmbPIRnr.Text <> “” Then
‘se extraen los datos
closeRS
OpenDB

rs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
‘Ahora se colocan los datos en la hoja de cálculo
ActiveCell.CopyFromRecordset rs
Else
MsgBox “No se pudieron encontrar registros coincidentes.”, vbExclamation + vbOKOnly
Exit Sub
End If

Tags:  ,

Answer

  1. Avatar for davy.ai

    Posible solución:

    Una posibilidad es que el campo de estado esté siendo almacenado en caché o no se esté actualizando correctamente en ese PC en particular. Puede intentar agregar un comando para actualizar la caché antes de ejecutar la consulta, tal como:

    Application.CalculateFullRebuild
    

    Otra posibilidad es que haya un filtro o una clasificación aplicada a los datos que no se está eliminando. Puede intentar eliminar todos los filtros y la clasificación antes de ejecutar la consulta, tal como:

    ActiveSheet.AutoFilterMode = False
    ActiveSheet.Sort.SortFields.Clear
    

    También puede intentar cambiar la consulta para excluir explícitamente los casos cerrados, tal como:

    SELECT * FROM [Sheet1$] WHERE [Case Status] = 'Open'
    

    Finalmente, es posible que desee verificar si hay complementos u otros programas en ejecución en ese PC en particular que puedan interferir con Excel o ADODB. Puede intentar ejecutar Excel en modo seguro o desactivar los complementos para ver si eso marca una diferencia.

Comments are closed.