Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problema al abrir conexión activa con ADOX

168 views
Skip to first unread message

xavendano

unread,
Sep 4, 2006, 2:17:33 PM9/4/06
to
Saludos,

Tengo una aplicación que manipula una base de datos de Access.
El error se presenta solamente cuando el archivo ya existe y deseo
utilizarlo para incluir nuevas estructuras de datos, o datos en el archivo.

La instrucción original es:
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =
C:\MapInfo.mdb"

El error que me presenta la app es el siguiente:

Arguments are of the wrong type, are out of acceptable range, or are in
conflic with one another.

¿cómo puedo obtener el valor correcto a asignar en el ActiveConnection?

Tomé el ejemplo del siguiente link: (por demás excelente)
http://www.mvp-access.com/softjaen/manuales/adox/index.htm, pero me presentó
esta situación particular.

Pero este

Estoy utilizando VS2005.

De antemano, gracias a todos......


Robinson.Moscoso

unread,
Sep 4, 2006, 2:35:11 PM9/4/06
to
Hola como esta:

Esta es la cadena de coneccion que utilizo para conectarme a una base de
datos de access:

"Provider=Microsoft.Jet.OLEDB.4.0;Password=contraseña;User ID=usuario;Data
Source=C:\basededatos.mdb;Persist Security Info=True"

Pero te sugiero que para crearla hagas lo siguiente: crea un archivo txt en
blanco en una carpeta de tu pc, y cambiale la extensión a udl :

coneccion.txt > coneccion.udl

luego haces doble clic sobre el archivo y configuras la coneccion, despues
abres el archivo con un editor de texto como el notepad y ahi tienes la
cadena de coneccion lista para copiar en el archivo config de tu aplicacion.

Ojo tienes que compartir la carpeta donde esta la base de datos en el
servidor para el caso de archivos access, para conectarte a SQL server lo
tienes que configurar para que acepte conecciones TCP-IP.

Cualquier cosa me comentas, ahh y otra cosa... por solidaridad con los demas
integrantes del grupo es mejor trabajar todo por aca por el foro... uno
nunca sabe cuando alguien más tiene el mismo problema ;-)

Un saludo

Róbinson Moscoso
Colombia


"xavendano" <romell....@ingeolan.com> escribió en el mensaje
news:%23XCjh4E...@TK2MSFTNGP03.phx.gbl...

xavendano

unread,
Sep 4, 2006, 2:59:13 PM9/4/06
to
Gracias por tu pronta respuesta amigo.....

El construir la cadena de conexión no es problema, sino simplemente el
realizar la asignación de un "string" a la propiedad "ActiveConnection", del
objeto Catalog....

Es decir, genere la cadena de conexión siguiendo tus sugerencias pero me
presentó el mismo error.

"Robinson.Moscoso" <nos...@loquesea.com> wrote in message
news:%23G217EF...@TK2MSFTNGP04.phx.gbl...

Robinson.Moscoso

unread,
Sep 4, 2006, 4:31:30 PM9/4/06
to
Hola como estas...

mmmm no se cual podrá ser el error, pero por ahi mirando encontré estos
articulos que meustran como conectarse no se si intentas esto a ver como te
va...

http://www.functionx.com/ado/Lesson02.htm
http://support.microsoft.com/?scid=kb;es;317867

otra cosa es que pues no se que vas a hacer con tu base de datos, pero en
mis aplicaciones yo utilizo oledb para acceder a mi base de datos, te copio
a ca la funcion que utilizo para tal proposito, espero te sirva.

Function sql_nonquery(ByVal sentencia_sql As String)
'antes de utlizar debes usar el namesapce System.Data.OleDb
'Imports System.Data.OleDb

dim myconnection As OleDbConnection
dim connectionString As String =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=basededatos.mdb;Persist
Security Info=False"

Try
myconnection = New OleDbConnection(connectionString)
myconnection.Open()
Dim mycomando As New OleDbCommand(sentencia_sql)
mycomando.Connection = myconnection
mycomando.ExecuteNonQuery()
mycomando.Connection.Close()
myconnection.Close()
Catch ex As Exception
MsgBox("Error en la conección:" & Chr(13) & ex.ToString, )
End Try
Return True
End Function


Un saludo

Róbinson Moscoso
Colombia

"xavendano" <romell....@ingeolan.com> escribió en el mensaje

news:OhXP1PF0...@TK2MSFTNGP04.phx.gbl...

SoftJaén

unread,
Sep 5, 2006, 12:24:42 PM9/5/06
to
"xavendano" escribió:

> Tengo una aplicación que manipula una base de datos de Access.
> El error se presenta solamente cuando el archivo ya existe y deseo
> utilizarlo para incluir nuevas estructuras de datos, o datos en el
> archivo.
>
> La instrucción original es:
> cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =
> C:\MapInfo.mdb"
>
> El error que me presenta la app es el siguiente:
>
> Arguments are of the wrong type, are out of acceptable range, or are in
> conflic with one another.
>
> ¿cómo puedo obtener el valor correcto a asignar en el ActiveConnection?

Hola:

En Visual Basic .net, si tienes activada la instrucción «Option Strict», no
puedes asignar directamente una cadena de conexión a la propiedad
«ActiveConnection» de un objeto ADOX.Catalog, porque obtendrás el error que
nos estás comentando. Deberás de asignar explícitamente un objeto
ADODB.Connection:

Dim cnn As New ADODB.Connection

cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= C:\MapInfo.mdb"
cnn.Open()

cat.ActiveConnection = cnn

Un saludo

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.


xavendano

unread,
Sep 5, 2006, 1:41:46 PM9/5/06
to
Excelente SoftJaen....
Gracias por tu respuesta...pero eso genera una duda adicional.

En mi app, ciertamente estoy utilizando ambas referencias ADODB y ADOX, con
una acceso al objeto de datos y puedo ejecutar mi instrucción .Open sin
problemas, y con la otra puedo manipular las estructuras que tendrá esa base
de datos. Hasta aquí todo sin problemas.

El problema se presenta al momento de instalar dicha aplicación en un
cliente. Realizo la instalación con un proyecto de tipo Setup con VS2005
para desktop, que funciona perfectamente salvo por el hecho que me presenta
un error al instanciar las librerias de ADODB. El error es algo asi como
como que no existen o no se pueden encontrar los ensamblados de ADODB.
Intenté luego instalar la versión 2.7 o 2.8 del MDAC_TYP pero fue un intento
fallido, el problema persiste.

1- Despierta mi curiosidad el por qué el setup no "empaqueta" tambien las
referencias de ADODB asi como cualquier otra referencia o componente sin
problema.
2- Que alternativa tengo para este tipo de situaciones. Debo instalar
MDAC_TYP previo al framework? o a la aplicación?.....
3- En conclusión, como podría solucionar esta situación.....

De antemano, gracias a todos.............


"SoftJaén" <grupo_n...@softjaen.es> wrote in message
news:eDpwMfQ...@TK2MSFTNGP06.phx.gbl...

SoftJaén

unread,
Sep 6, 2006, 9:11:10 AM9/6/06
to
"xavendano" escribió:

> En mi app, ciertamente estoy utilizando ambas referencias ADODB y ADOX,

> con una acceso al objeto de datos y puedo ejecutar mi intrucción .Open sin


> problemas, y con la otra puedo manipular las estructuras que tendrá esa
> base de datos. Hasta aquí todo sin problemas.

Si sólo usas ADOX para manipular la estructura de una base de datos
Microsoft Accesss, lo mismo te podría interesar utilizar un objeto
OleDbCommand, correspondiente al espacio de nombres System.Data.OleDb, para
ejecutar consultas SQL del Lenguaje de Definición de Datos (DDL) del motor
Microsoft Jet. Con dichas consultas puedes crear y modificar tablas, campos,
índices, y en definitiva, casi todo lo que se puede hacer con la biblioteca
de ADOX.

Utilizar el espacio de nombres System.Data.OleDb evitaría tener que hacer
referencia a las bibliotecas de ADO y ADOX, mediante la interoperabilidad
COM de .NET, lo que no significa que en el sistema del usuario final de tu
aplicación no haya que instalar los Componentes de Acceso a Datos de
Microsoft (MDAC), tal y como indicaré posteriormente.

> El problema se presenta al momento de instalar dicha aplicación en un

> cliente. Realizo la instalación con un proyecto del tipo Setup con


> VS2005 para desktop, que funciona perfectamente salvo por el hecho

> que me presenta un error al instanciar las librerías de ADODB. El error


> es algo asi como como que no existen o no se pueden encontrar los
> ensamblados de ADODB. Intenté luego instalar la versión 2.7 o 2.8
> del MDAC_TYP pero fue un intento fallido, el problema persiste.

Con independencia o no que tu aplicación haga uso de las biblioteca ADODB y
ADOX, digamos que es requisito imprescindible instalar la versión 2.6 o
superior de los Componentes de Acceso a Datos de Microsoft, porque tales
componentes son requeridos si en nuestro proyecto de Visual Basic .net
utilizamos el espacio de nombres System.Data.OleDb o System.Data.SqlClient,
por tanto, si dices que has ejecutado el archivo redistribuible
MDAC_TYP.exe, entiendo que en el equipo cliente se han instalado
correctamente los Componentes de Acceso a Datos de Microsoft.

Ahora bien, como dichas bibliotecas se utilizan mediante la
interoperabilidad COM que nos dispensa el marco de trabajo de .net, deberás
de procurar que en la carpeta donde se encuentra el ejecutable de tu
aplicación, se encuentren igualmente los archivos correspondientes a los
ensamblados de importación de las mencionadas bibliotecas, es decir, que en
la carpeta deberán de existir los siguientes archivos:

Interop.ADODB.dll
Interop.ADOX.dll

Si no se encuentran dichos archivos, obtendrás una excepción en tiempo de
ejecución, con un mensaje más o menos parecido al siguiente:

[...] No se puede cargar el archivo o ensamblado
'Interop.ADOX.Version=2.8.0.0, .... ni una de sus dependencias. El sistema
no puede hallar el archivo especificado.[...]

Por tanto, en el archivo de distribución de tu aplicación deberás de incluir
los mencionados ensamblados de importación, los cuales los podrás encontrar
en la carpeta Debug o Release de tu proyecto, porque me imagino que se
habrán creado automáticamente. :-)

> Despierta mi curiosidad el por qué el setup no "empaqueta" tambien las
> referencias de ADODB asi como cualquier otra referencia o componente sin
> problema

Ahí ya no llego. Desconozco el motivo por el cual dichos archivos no se
incluyen automáticamente en el archivo de instalación, pero eso no quita que
tú los añadas manualmente al proyecto de instalación.

xavendano

unread,
Sep 6, 2006, 2:21:37 PM9/6/06
to
Esto es lo que uno llamaba en la universidad "Una clase magitral"

Excelente la información que acabas de enviar SoftJaen...

Muchísimas gracias!!!!!!


"SoftJaén" <grupo_n...@softjaen.es> wrote in message

news:OTtbtXb0...@TK2MSFTNGP03.phx.gbl...

xavendano

unread,
Sep 6, 2006, 4:33:25 PM9/6/06
to
SotJaen

¿Que pasa si algunos de los Dlls no existe? A pesar que tiene la copia
local en TRUE de su referencia.

Me refiero particularmente al caso de: Interop.ADODB.dll

De antemano, gracias...................

"xavendano" <romell....@ingeolan.com> wrote in message
news:ONZBBEe0...@TK2MSFTNGP04.phx.gbl...

SoftJaén

unread,
Sep 7, 2006, 8:48:58 AM9/7/06
to
"xavendano" preguntó:

>
> ¿Que pasa si algunos de los Dlls no existe? A pesar que tiene la copia
> local en TRUE de su referencia.
>
> Me refiero particularmente al caso de: Interop.ADODB.dll

Si el ensamblado de importación no existe en la carpeta de la aplicación,
lógicamente se producirá la excepción que te comenté en mi anterior mensaje.

Quiero comentarte que el caso de la biblioteca de ADO clásica, digamos que
es un tanto especial en .NET, y el archivo de ensamblado de importación
(Interop.ADODB.dll) se copiará en la carpeta de resultados, obviamente si
has establecido a True el valor «Copia local» de las propiedades de la
referencia, y dicha referencia se corresponde con la biblioteca «Microsoft
ActiveX Data Objects 2.x Library», la cual se encuentra en la pestaña COM
del cuadro de diálogo «Agregar referencia».

Pero ocurre que los ingenieros de Microsoft, teniendo en mente que los
usuarios podrían seguir utilizando en sus proyectos la biblioteca de ADO
clásica, decidieron incluir la biblioteca de ADO en el GAC (Caché de
Conjunto Global), de ahí que si observas la pestaña .NET del cuadro de
diálogo «Agregar referencia», observarás que entre los primeros elementos de
la lista aparece la biblioteca ADODB. Si en tu proyecto referencias ésta
biblioteca, en lugar de referenciar la que aparece en la pestaña COM, no se
copiará el ensamblado de importación en la carpeta de resultados, porque por
defecto, el valor «Copia local» de la referencia es False, y no tendrás
problema alguno de utilizar la biblioteca de ADO clásica, porque ya existe
la copia en el GAC. Por supuesto que si estableces el valor en True, se
copiará el ensamblado en la carpeta de la aplicación, pero vuelvo a
insistir, que no es necesario por la existencia de una copia en el GAC.

En resúmen, si decides utilizar en tu proyecto la biblioteca de ADO,
establece la referencia a la citada biblioteca en la pestaña .NET, en lugar
de utilizar la que aparece en la pestaña COM del cuadro de diálogo «Agregar
referencia». Pero para utilizar la biblioteca de ADOX, necesariamente
tendrás que especificar la referencia COM, y procurar que el valor «Copia
local» sea True, para que se cree el ensamblado de importación, el cual
deberás de distribuir junto con el resto de archivos que conforman tu
aplicación.

0 new messages