Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Apertura de la conexin. Creacin del adaptador de datos. Relleno del objeto DataSet. Cierre de la conexin.
Private Function CreateDataSetOleDb(ByVal cnnString As String, ByVal SQL As String, _ ByVal tableName As String) As DataSet ' Creamos un objeto OleDbConnection Dim cnn As New OleDbConnection(cnnString) Try ' Abrimos la conexin cnn.Open() ' Creamos un adaptador de datos Dim da As New OleDbDataAdapter(SQL, cnn) ' Rellenamos el objeto DataSet con los datos de la consulta SQL Dim ds As New DataSet da.Fill(ds, tableName) Return ds Catch ex As Exception MessageBox.Show(ex.Message, "Crear DataSet") Finally ' Cerramos la conexin cnn.Close() End Try End Function 4. Enlazar los controles con los campos de la base de datos, creando el correspondiente objeto Binding mediante el mtodo Add de la coleccin DataBindings. Dicho mtodo acepta el nombre de la propiedad del control enlazado (generalmente la propiedad Text), la referencia al origen de datos (el objeto DataSet), y el nombre del campo de la tabla de la base de datos, en el formato nombretabla.nombrecampo. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Creamos el conjunto de datos ds = CreateDataSetOleDb("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Mis documentos\Northwind.mdb", _ "SELECT EmployeeID, FirstName, LastName FROM Employees", _ "Employees") If ds Is Nothing Then Exit Sub
~2~ Ing. Henry M. Arvalo Flores
bmb = Me.BindingContext(ds, "Employees") ' Asociamos el evento PositionChanged con un controlador de eventos AddHandler bmb.PositionChanged, AddressOf PositionChanged ' Procedemos a enlazar los controles de texto txtEmployeeID.DataBindings.Add("Text", ds, "Employees.EmployeeID") txtFirstName.DataBindings.Add("Text", ds, "Employees.FirstName") txtLastName.DataBindings.Add("Text", ds, "Employees.LastName") ' Actualizar With bmb .Position = .Count .Position = 0 End With End Sub Una vez creado el conjunto de datos, y enlazados los correspondientes controles, solo nos queda escribir el cdigo necesario en los distintos botones de comando, para que podamos movernos de una posicin a otro dentro del origen de datos (el objeto DataSet). Private Sub PositionChanged(ByVal sender As Object, ByVal e As EventArgs) lblReg.Text = "Registro " & (bmb.Position + 1) & " de " & bmb.Count End Sub Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click bmb.Position = 0 End Sub Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click bmb.Position -= 1 End Sub Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click bmb.Position += 1 End Sub Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click bmb.Position = bmb.Count - 1 End Sub Si ejecuta el proyecto, observar que puede desplazarse por los distintos registros pulsando sobre los correspondientes botones, almacenndose en el origen de datos (el
~3~ Ing. Henry M. Arvalo Flores
objeto DataSet) todas las modificaciones que efecte sobre los campos. Pero al estar trabajando en un entorno desconectado de la propia base de datos, esas modificaciones realizadas no tendrn efecto en la propia base de datos: tendr que utilizar un objeto DataAdapter apropiado para enviar las modificaciones a la base de datos. De ello se encargar el siguiente procedimiento genrico, el cual actualiza un origen de datos OleDb: Private Sub UpdateOleDb(ByVal ds As DataSet, ByVal cnnString As String, _ ByVal SQL As String, ByVal tableName As String) ' Creamos un objeto OleDbConnection Dim cnn As New OleDbConnection(cnnString) Try ' Abrimos la conexin cnn.Open() ' Creamos un adaptador de datos Dim da As New OleDbDataAdapter(SQL, cnn) ' Rellenamos el objeto DataSet con los datos' de la consulta SQL da.Fill(ds, tableName) ' Creamos un objeto CommandBuilder para actualizar los datos Dim cmdBuilder As New OleDbCommandBuilder(da) With da .InsertCommand = cmdBuilder.GetInsertCommand .DeleteCommand = cmdBuilder.GetDeleteCommand .UpdateCommand = cmdBuilder.GetUpdateCommand End With ' Enviamos los cambios a la base de datos da.Update(ds, tableName) Catch ex As Exception MessageBox.Show(ex.Message, "Actualizar Datos") Finally ' Cerramos la conexin cnn.Close() End Try End Sub Siguiendo con nuestro ejemplo, para llamar al procedimiento UpdateOleDb utilizaramos el siguiente cdigo: UpdateOleDb(ds, "Provider=Microsoft.Jet.OLEDB.4.0;" &_ "Data Source=C:\Mis documentos \Northwind.mdb", _ "SELECT EmployeeID, FirstName, LastName FROM Employees", "Employees")
~4~ Ing. Henry M. Arvalo Flores