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:

  1. 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

    ResponderEliminar
  2. 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

    ResponderEliminar