Error con el objeto ADOX.Catalog VS2005

20/07/2006 - 06:32 por xavendano | Informe spam
Saludos,

Estoy creando una base de datos en tiempo de ejecución y tengo algunos
inconvenientes al tratar de incluir tabla en el. La base de datos no se crea
toda de una vez sino que se incrementa en momentos diferentes de la
aplicación según la aplicación que la maneja. Se anexaron las referencias a
ADO y ADOX

Ejmplo:

1- Se crea la base de datos sin estructura alguna de soporte de datos
(Funciona sin problemas)
Dim cat As ADOX.Catalog

cat = New ADOX.Catalog

cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datos.mdb;")

2- En otro momento de la aplicación se recupera la conexión de base de datos
con el propósito de incluir ua estructura de datos nueva, es decir, una
tabla. Se hace con la instrucción siguiente (Funciona perfectamente)
Dim Cnn = New ADODB.Connection

Cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datos.mdb;")

3- Porteriormente se crea un objeto de tipo tabla para ser incluida en la
base de datos (Esta declaración y configuración no presenta problemas)
Dim tblTable As New ADOX.Table

tblTable.Name = "AAA"

tblTable.Columns.Append("NOMBRE", ADOX.DataTypeEnum.adVarChar)

4- Se incluye la tabla al objeto del catálogo (ERROR)
cat.Tables.Append(tblTable)

PRESENTA EL ERROR

{"Tipo no válido."}

-2147217859



Realmente desconozco la naturaleza del error y el porque ocurre...además, no
conozco otro método tan eficiente como este para generar la base de datos...

Alguien podría orientarme mejor acerca de cómo resolver mi problema

De antemano, gracias a todos
 

Leer las respuestas

#1 Jesús López
20/07/2006 - 18:17 | Informe spam
Crear una base de datos de Access no se puede hacer con ADO.NET, necesitas
ADOX. Sin embargo sí que puedes crear tablas con ADO.NET usando la
instrucción SQL "CREATE TABLE". La verdad es que a mi me parece más sencillo
usar "CREATE TABLE" que todo el follón que hay que montar para crear las
tablas con ADOX.

Dim CreateTableCommand As New OleDbCommand("CREATE TABLE MiTabla (Campo1
Tipo1, Campo2 Tipo2, )", cn )
cn.Open()
CreateTableCommand.ExecuteNonQuery()
cn.Close()


Por otra parte, personalmente yo ni siquiera usaría ADOX para crear la base
de datos, sino que tendría un archivo Plantilla.mdb ( una base de datos en
blanco creada con Access) y cada vez que necesitara una nueva base de datos
simplemente copiaría el archivo Plantilla.mdb con otro nombre (p.e
MiBaseDeDatos.mdb)

Con lo que al final no necesitas ADOX para nada de nada.

Ahora bien, si a ti te gusta ADOX, entonces olvida este mensaje.

Saludos:

Jesús López




"xavendano" escribió en el mensaje
news:
Saludos,

Estoy creando una base de datos en tiempo de ejecución y tengo algunos
inconvenientes al tratar de incluir tabla en el. La base de datos no se
crea toda de una vez sino que se incrementa en momentos diferentes de la
aplicación según la aplicación que la maneja. Se anexaron las referencias
a ADO y ADOX

Ejmplo:

1- Se crea la base de datos sin estructura alguna de soporte de datos
(Funciona sin problemas)
Dim cat As ADOX.Catalog

cat = New ADOX.Catalog

cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datos.mdb;")

2- En otro momento de la aplicación se recupera la conexión de base de
datos con el propósito de incluir ua estructura de datos nueva, es decir,
una tabla. Se hace con la instrucción siguiente (Funciona perfectamente)
Dim Cnn = New ADODB.Connection

Cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\datos.mdb;")

3- Porteriormente se crea un objeto de tipo tabla para ser incluida en la
base de datos (Esta declaración y configuración no presenta problemas)
Dim tblTable As New ADOX.Table

tblTable.Name = "AAA"

tblTable.Columns.Append("NOMBRE", ADOX.DataTypeEnum.adVarChar)

4- Se incluye la tabla al objeto del catálogo (ERROR)
cat.Tables.Append(tblTable)

PRESENTA EL ERROR

{"Tipo no válido."}

-2147217859



Realmente desconozco la naturaleza del error y el porque ocurre...además,
no conozco otro método tan eficiente como este para generar la base de
datos...

Alguien podría orientarme mejor acerca de cómo resolver mi problema

De antemano, gracias a todos






Preguntas similares