Creacion: Base de Datos Microsoft Access en Vb.net

Servicios de Desarrollo Web, Software y Aplicaciones moviles, & Soporte tecnico, blog oficial de tecnologia y mas

Creacion: Base de Datos Microsoft Access en Vb.net

Todo lo referente a practicas en Visual Studio

Cómo crear una base de datos Microsoft Access mediante la importacion Sistem.reflexión.

El resultado es obtener un Archivo de Microsoft Access con una base de datos generada en un Sistema hecho en Vb.net, este ejercicio fue realizado en el 2010.

Por Enrique Martínez Montejo «SoftJaén»
[MS MVP – VB]
Última revisión: 20/06/2008

La manera más fácil de crear una nueva base de datos Microsoft Access mediante programación es referenciando en nuestro proyecto de Visual Basic .net.

Las bibliotecas clásicas de ADO y ADOX, tal como explico en el artículo Cómo crear una nueva base de datos Microsoft Access.

Como podrá observar el lector, se utiliza la interoperabilidad COM para poder utilizar las mencionadas bibliotecas que han sido referenciadas en nuestro proyecto.

Pero tampoco es sumamente necesario referenciar explícitamente en nuestro proyecto biblioteca alguna, porque el propio marco de trabajo de .net.

Pone a nuestra disposición un conjunto de clases para poder acceder y manipular módulos y ensamblados mediante técnicas de reflexión.

Permitiéndonos recuperar el objeto System.Type de los objetos, incluyendo el objeto Type de cualquier componente COM que se encuentre.

Debidamente registrado en el sistema, como bien puede ser la biblioteca de ADOX.

El conjunto de clases que nos permite tal posibilidad se encuentra dentro del espacio de nombres System.Reflection, a excepción del objeto System.Type.

Que se encuentra dentro del propio espacio de nombres System, por tanto, lo primero que haremos será importar en nuestro módulo el siguiente espacio de nombres:

Imports System.Reflection

A continuación, crearemos una función general que será la encargada de crear la base de datos propiamente dicha.

Mediante llamadas a otras funciones auxiliares más específicas. Para ello, a la función le deberá pasar una cadena de conexión Ole Db adecuada.

Incluir la ruta y el nombre de la base de datos que se desea crear, así como los restantes parámetros que estime conveniente.

»’
»’ Crea una nueva base de datos Microsoft Access utilizando la biblioteca ADOX.
»’
»’ Cadena de conexión Ole Db con la información necesaria para crear la nueva base de datos.
»’
»’
Public Function CreateDatabaseAccess(ByVal connString As String) As Boolean

‘ La función asume que no existe el archivo de base de datos, y que la
‘ cadena de conexión cumple con los parámetros necesarios, entre ellos,
‘ el parámetro Data Source.

‘ Creamos un objeto Catalog de la biblioteca de ADOX

Dim ty As System.Type = Nothing
Dim cat As Object = CreateObject("ADOX.Catalog", ty)

If cat Is Nothing Then Return False

‘ Generamos una nueva base de datos Microsoft Access.

Dim param() As Object = {connString}
Dim o As Object = ExecuteMethod(cat, ty, "Create", param)

If o Is Nothing Then Return False

‘ Se ha creado con éxito la base de datos

‘ Referenciamos el objeto ADODB.Connection subyacente.

Dim cnn As Object = GetProperty(cat, ty, «ActiveConnection», New Object() {})

cat = cnn
cnn = Nothing

‘ Cerramos la conexión.

ExecuteMethod(cat, ty, «Close», Nothing)

ty = Nothing
cat = Nothing

Return True

End Function

La siguiente función auxiliar crea y devuelve una referencia al objeto COM que se haya especificado mediante su ProgId:

»’
»’ Crea y devuelve una referencia al objeto COM especificado.
»’
»’ Nombre correspondiente al ProgId del objeto COM que se desea obtener.
»’ Se devolverá el tipo asociado al identificador de programa especificado.
»’
»’
Private Function CreateObject(ByVal progId As String, ByRef ty As System.Type) As Object

Try
‘ Obtenemos el tipo asociado al identificador de programa
‘ (ProgID) especificado.

ty = Type.GetTypeFromProgID(progId)

If ty Is Nothing Then Return Nothing

‘ Creamos la instancia del tipo de objeto especificado.

Dim o As Object = Activator.CreateInstance(ty)

Return o

Catch ex As Exception
Return Nothing

End Try

End Function

A continuación, escribiremos una función que se encargará de ejecutar los métodos del objeto especificado.

Utilizando para ello el método InvokeMember del objeto System.Type adecuado:

»’
»’ Ejecuta el método del objeto COM especificado.
»’
»’ Instancia del objeto COM cuya método se desea ejecutar.
»’ El tipo asociado al programa especificado.
»’ Nombre del método que se desea ejecutar.
»’ Matriz que contiene los argumentos que se van a pasar al método que se desea ejecutar.
»’
»’
Private Function ExecuteMethod(ByVal app As Object, _
ByVal ty As System.Type, _
ByVal methodName As String, _
ByVal args() As Object) As Object

If (app Is Nothing) OrElse _
(ty Is Nothing) Then Return Nothing

Try
‘ Ejecuto el método especificado.

Dim o As Object = ty.InvokeMember( _
methodName, _
BindingFlags.DeclaredOnly Or BindingFlags.Public Or _
BindingFlags.NonPublic Or BindingFlags.Instance Or _
BindingFlags.IgnoreCase Or BindingFlags.InvokeMethod, _
Nothing, _
app, _
args)
Return o

Catch ex As Exception
Return Nothing

End Try

End Function

Y si la anterior función se encarga de ejecutar los métodos de un objeto, ahora construiremos la última función auxiliar para leer el valor de las propiedades del objeto.

»’
»’ Obtiene el valor de la propiedad del objeto COM especificado.
»’
»’ Instancia del objeto COM cuya propiedad se desea leer.
»’ El tipo asociado al programa especificado.
»’ Nombre de la propiedad.
»’ Matriz que contiene los argumentos que se van a pasar a la propiedad.
»’
»’
Private Function GetProperty(ByVal app As Object, _
ByVal ty As System.Type, _
ByVal propertyName As String, _
ByVal args() As Object) As Object

If (app Is Nothing) OrElse _
(ty Is Nothing) Then Return Nothing

Try
‘ Leo el valor de la propiedad especificada.

Dim value As Object = ty.InvokeMember( _
propertyName, _
BindingFlags.DeclaredOnly Or BindingFlags.Public Or _
BindingFlags.NonPublic Or BindingFlags.Instance Or _
BindingFlags.GetField Or BindingFlags.GetProperty, _
Nothing, _
app, _
args)
Return value

Catch ex As Exception
Return Nothing

End Try

End Function

¡Bueno! Ya sólo queda llamar a la función CreateDatabaseAccess para crear una nueva base de datos Microsoft Access.

En el ejemplo, una flamante base de datos Microsoft Access 2007:

Dim bln As Boolean = CreateDatabaseAccess( _
«Provider=Microsoft.ACE.OLEDB.12.0; » & _
«Data Source=C:\Bases\Nuevo1.accdb»)
If bln Then
MessageBox.Show(«La base de datos se ha creado satisfactoriamente.»)
Else
MessageBox.Show(«No se ha podido crear la base de datos.»)
End If

Como habrá tenido ocasión de comprobar, la reflexión nos proporciona una alternativa para evitar referenciar en tiempo de diseño componentes COM.

En nuestro proyecto, porque lo que hace es crear dinámicamente los objetos en tiempo de ejecución.

Pero por utilizar esta técnica, tenemos que pagar un precio, que consiste en que no podemos utilizar la característica de IntelliSense disponible en el entorno de trabajo de Visual Studio.

Por tanto, tendremos que conocer con soltura los métodos y propiedades de aquellos objetos con los cuales vamos a trabajar.

Esta es la direccion original http://www.mvp-access.es/softjaen/bases/ado/sjspado023.htm por si quieren mas informacion.

 

2 comentarios

  1. Usually I do not read article on blogs, however I would like to say that this write-up very compelled me to take a look at and do it! Your writing style has been amazed me. Thank you, very nice article.

Deja un comentario