Tengo una base de datos
Access y la quiero gestionar a través de una aplicación de Visual Studio. Para conectar ambas hay que seguir
unos pasos muy sencillos.
Primero hay que crear la
aplicación de Visual Studio y copiar la Base de Datos Access en el directorio
Bin\Debug de dicha aplicación para evitar luego problemas.
Luego desde mi
aplicación de Visual Studio elijo Ver y la opción Explorador de Servidores.
Esto nos abre una
ventana desde la que crearemos la conexión de nuestra Base de datos Access con
nuestra aplicación. Para ello, sobre
conexiones de datos botón derecho del ratón
y agregar conexión.
Esto nos abre un cuadro
de diálogo que tiene por defecto la conexión SQL Server, pulsamos cambiar.
Y podemos elegir la
conexión a una base de datos de Access.
Pulsamos aceptar y
volvemos al diálogo anterior pero modificado para Access. Pulsamos examinar.
Y esto nos permitirá
elegir nuestra base de datos
Access. Hecho esto podemos probar la
conexión para asegurarnos de que es una conexión correcta.
Una vez hemos agregado
nuestra base de datos veremos esto en el explorador de servidores.
Ahora podemos elegir un
objeto (una tabla por ejemplo) y pulsando el botón derecho del ratón nos
permite mostrar los datos de la tabla.
Ahora para ver los datos
en nuestra aplicación directamente añadimos un formulario a nuestra aplicación
y colocamos un control de texto sencillo.
Ahora en el código de la
aplicación ponemos esto:
(He añadido comentarios
en verde para explicar lo que hace cada
línea de código)
Imports
System.Data.OleDb
Public Class Form1
'Objeto que recoje los datos leidos de la tabla
Dim dt As New DataTable
'Contador del
número de filas
Dim intFila
As Integer = 0
'Se activa al
cargarse el formulario
Private Sub
Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
'Objeto conexión para conectarse a la base de datos de Access
Dim
strConexion As New
OleDbConnection("Provider=Microsoft.jet.Oledb.4.0;Data
Source=" + My.Application.Info.DirectoryPath
+ "\Database21.mdb")
'Variable que contiene la select a ejecutar sobre la base de datos
Dim strSQL As String = "Select * from tbConstelaciones"
'Adaptador de la base de datos con la aplicación
Dim adaptador As New
OleDb.OleDbDataAdapter(strSQL, strConexion)
Dim ds As New DataSet
'Rellena al
adaptador con el primer dato leído
adaptador.Fill(dt)
'Vacía la
memoria del adaptador
adaptador.Dispose()
'llama a la
subrutina qu emuestra el texto en la caja
ActualizaTexto()
End Sub
Private Sub ActualizaTexto()
'Muestra en
la caja de texto el campo descripción de la tabla leída.
TextBox1.Text = CStr(dt.Rows(intFila)("Descripcion"))
End Sub
End Class
Si ahora ejecutamos la aplicación, podemos
encontrarnos con esto:
O incluso puede salirnos
un mensaje de error diciendo que no reconoce Microsoft.jet.Oledb.4.0.
La aplicación no está
leyendo correctamente de la base de datos. (En mi caso particular es porque el
equipo es de 64 bits) Podemos
solucionarlo del siguiente modo:
Abrimos las propiedades
del proyecto.
En la carpeta compilar
elegimos Opciones de compilación
avanzadas.
Esto nos abre un cuadro
de diálogo donde ponemos lo que proceda (en mi caso x86)
Ahora al ejecutar la
aplicación ya si lee el primer campo de la tabla.
A partir de aquí ya
podemos empezar a complicar nuestra aplicación como queramos para acceder a los
datos.
Por ejemplo podemos añadir dos botones de avance hacia atrás y hacia delante para navegar por los registros de la tabla con muy poco código. Basta con esto:
Por ejemplo podemos añadir dos botones de avance hacia atrás y hacia delante para navegar por los registros de la tabla con muy poco código. Basta con esto:
Y ahora en el código
basta añadir.
Private Sub btnAnterior_Click(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles btnAnterior.Click
If intFila > 0 Then
intFila -=
1
ActualizaTexto()
End If
End Sub
Private Sub btnSiguiente_Click(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles btnSiguiente.Click
If intFila < dt.Rows.Count Then
intFila += 1
ActualizaTexto()
End If
End Sub
Por último voy a poner otro ejemplo de un procedimiento similar al anterior pero en este caso a través de código almacena el resultado de la SELECT (que pueden ser varias filas) en un array.
'Este
procedimiento busca un resultado de una columna de una tabla de la base de
datos el valor
a buscar se introduce como Valor_Campo en este caso es un integer pero podría
ser de cualquier otro tipo
Public Sub BusquedaGenerica(ByVal Nombre_Tabla As String, ByVal Nombre_Campo As String, ByVal strConexion As Object, Optional ByVal Valor_Campo As Integer = 0)
'Variable
que contiene la select a ejecutar sobre la base de datos
Dim strSQL As String
Dim i As Integer = 0
Dim cuenta As Integer
Dim Salida() As String 'Este
array almacenará el resultado de la SELECT
Try
cuenta =
CuentaRegistros(strConexion, "SELECT
COUNT(*) FROM " & Nombre_Tabla & " WHERE " &
Nombre_Campo & " = " & Valor_Campo) 'cuenta el
número de registros que devuelve la select
'Nombre_Campo_X
es otro campo de la tabla diferente del introducido por parámetro
strSQL = "SELECT Nombre_Campo_X FROM " & Nombre_Tabla & "
WHERE & Nombre_Campo & = " & Valor_Campo 'selecciona todos los que cumplen la condición
Dim cmd As New OleDb.OleDbCommand(strSQL, strConexion
ReDim Preserve Salida(cuenta)
'Crea un
objeto que guardará el resultado de la SELECT
Dim reader As OleDb.OleDbDataReader = cmd.ExecuteReader
i = 0
'Recorre el resultado del SELECT y lo
almacena en el array
While
reader.Read
Salida(i) = reader.Item(0)
i = i + 1
End While
reader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
BusquedaGenerica = "Error en BuscaGenerica"
End Try
End Sub
'Devuelve
el número de registros de una SELECT de tipo COUNT
Private Function CuentaRegistros(ByVal strConexion As Object, ByVal Query As String) As Integer
'Busca
la cantidad de registros
Dim cmd1 As New OleDb.OleDbCommand(Query, strConexion)
CuentaRegistros = cmd1.ExecuteScalar()
End Function
No hay comentarios:
Publicar un comentario