Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

miércoles, 20 de junio de 2012

VB6 error: no se pudo encontrar el archivo ISAM instalable

Me conectaba a una base de datos en Access 2003 usando un objeto ADODB.Connection llamado miDB, y un Recordset llamado miRS. Luego cerraba ambas conexiones haciendo:

If miDB.State <> adStateClosed Then miDB.Close
If miRS.State <> adStateClosed Then miRS.Close

miDB.Open miConnectionStringaDSN
miRS.Open "select * from Tabla", miDB

La propiedad State de ambas variables me dice si están cerradas o abiertas.

En resumen, una vez cerrada la conexión a la base de datos en Access, conectaba miDB a otra base de datos, a través de un DSN (ya creado mediante ODBC usando el aplicativo odbcad32.exe del Windows) y usando el formato de cadena de conexión para System DSN de la web de ConnectionStrings.

Y entonces me saltaba este error:


El mensaje es: "Error 80004005 en tiempo de ejecución: no se pudo encontrar el archivo ISAM instalable."

Parecía que me faltaba instalar algo, pero cuando realizaba primero la conexión por DSN (sin conectar miDB ó miRS a ninguna base de datos con anterioridad) la aplicación funcionaba de maravilla.

Deduje que no era problemas de instalación. Cuando conectaba miDB y miRS a una base de datos, cerraba ambos objetos e intentaba abrir una nueva conexión a DSN (¡y esto sólo ocurría al conectar por DSN!), "algo" se quedaba bloqueando un archivo, en algún lugar, y como la nueva conexión por DSN no podía abrirlo, consideraba que el archivo no existía y me lanzaba el error.

Entonces cambié mi código a:

If miDB.State <> adStateClosed Then miDB.Close
If miRS.State <> adStateClosed Then miRS.Close

Set miDB = Nothing
Set miRS = Nothing
Set miDB = New Connection
Set miRS = New Recordset

miDB.Open miConnectionStringaDSN
miRS.Open "select * from Tabla", miDB

Y resolví el problema, ya no aparece el error de ISAM instalable, y pude conectarme a mi DSN sin más inconvenientes, pues al anular ambos objetos (miDB y miRS) destruyo cualquier enlace que quede flotando, en algún lugar, perdido en las entrañas de mi Windows.

3 comentarios:

Anónimo dijo...

Buenas yo tengo un datagrid, combobox y caja de texto cuando ejecuto me sale ese error , no se que hacer

Private Sub Form_Load()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\Users\Emi\Desktop\Proyecto 2\BD1." & _
"MDB ; Persist Security Info= False"

With Adodc1
.CommandType = adCmdText
.RecordSource = " Select * From Consultas"
.Refresh
Set DataGrid1.DataSource = Adodc1.Recordset
DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell
.Visible = False
End With
With Combo1
Combo1.Text = "largo"

End With

text1.Text = ""

End Sub

Private Sub Text1_Change()
On Error GoTo error_Handler
With Adodc1
If text1 <> "" Then
.Recordset.Filter = Combo1 & " LIKE '*" + text1 + "*'"
Else
.Recordset.Filter = ""
End If
.Refresh
End With
Exit Sub
error_Handler:
If Err.Number = 3265 Then
MsgBox " el campo seleccionado no es valido ", vbCritical
Else
MsgBox "dd", vbCritical
End If
End Sub

tmnt dijo...

Tengo este error


If Clave.Text <> "" Then
consulta = "SELECT *FROM Clave_Encapsuladas WHERE Clave= " & Clave.Text & ""
adaptador = New OleDb.OleDbDataAdapter(consulta, conexion)
registro = New DataSet
adaptador.Fill(registro, "Clave_Encapsuladas")
lista = registro.Tables("Clave_Encapsuladas").Rows.Count
End If

del boton actualizar ayuda

Programacion C++ dijo...

Me gusta, Aprender programacion