ADO: conectarse a MySQL e introducir datos en una VISTA
Vamos a continuar profundizando en los temas de ayer. Empezamos con temas de MySQL. Tenemos que descargarlos de la propia web: - mysql-5.5.14-winx64 (community server: elegimos el de 64 bits). - mysql-gui-tools-5.0-r17-win32 (el entorno gráfico). Se pueden ver los pasos más conflictivos aquí. Tenemos que ir a odbcad32 - Acceso directo para agregar los drivers de MySQL. Si hubiera problemas de desactualización nos obligaría a descargarlos. Tendremos que poner estos datos al agregar: ver aquí. También señalamos los detalles del cambio de conexión al “agregar nuevo origen de datos”. Sobre los ejercicios de hoy. Veremos el esquema siguiente: 1º, los ob jetos que dependen de la BD empleada: a.1 Conexión. Ej.: ConexionMySQL.Open() a.2 Adaptador. Ej.: Dim Adaptador As New MySqlDataAdapter("SELECT * FROM AUTORES", ConexionMySQL) Después, se ponen los INDEPENDIENTES de la BD. b.1DataSet. Ej.: Dim Datos As New DataSet + llenado del DataSet: Adaptador.Fill(Datos, "AUTORES") Ya con el DataSet pueden aparecer otros objetos independientes como: - Manejador. Ej.: Dim Manejador As New DataViewManager(Datos) b.100 DataSource y DataMember (ya para publicar los datos): dgv.DataSource = Datos: dgv.DataMember = "AUTORES" En el primer proyecto (se puede ver el formulario aquí completo) vamos a conectarnos por NET y por ODBC. Comprobaremos que se hace de la misma forma en un caso y en otro. Importando la librería correspondiente y abriendo la conexión (con Try), hacemos lo siguiente para mostrar los datos en un DataGriedView (con su cadena de conexión bien declarada en el formulario de diseño): Dim Adaptador As New MySqlDataAdapter("SELECT * FROM AUTORES", ConexionMySQL) Dim Datos As New DataSet Adaptador.Fill(Datos, "AUTORES") dgv.DataSource = Datos dgv.DataMember = "AUTORES" Ya lo hemos visto en otros post: aquí se puede ver de forma más sencilla y clara. Si la conexión fuera a través de ODBC se haría exactamente igual (sustituimos MySQL por ODBC donde corresponda). Ya dejando MySQL, nos metimos más en ADO con este otro proyecto. Empezamos a utilizar un Manager con ADO. Para ver el proyecto completo, hacer click aquí: 190711 Forzoso ADO Real Manager. Veremos de qué manera se peude forzar una conexión a una BD de SQL. En el primer caso, vamos a realizar una búsqueda de clientes de nuestra BD. Como en el ejercicio anterior, creamos el DataAdapter y el DataSet de igual forma y con la misma selección de datos de la tabla en cuestión. Añadimos lo siguiente con idea de recuperar la clave principal (entre el DataAdapter y el DataSet): Adaptador.MissingSchemaAction = MissingSchemaAction.AddWithKey Conociendo la clave principal nos permite realizar búsquedas, inserciones, eliminaciones… Vamos a probar con una búsqueda a través de un TextBox. Creamos un manejador y ya está: Dim Manejador As New DataViewManager(Datos) Manejador.DataViewSettings("Tabla").RowFilter = "NOMBRE LIKE '" + tbConsulta.Text + "%'" Cerramos la conexión y declaramos el DataSource y el DataMember del DataGriedView. 2º caso del mismo proyecto. Vamos a añadir una fila. Todo igual que antes hasta: Adaptador.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim Comando As New SqlCommandBuilder(Adaptador) Ahora nuestro Adaptador ya puede emplear Insert, Delete y Update. Creamos el DataSet y vamos a crear una fila de la siguiente manera: Dim Fila As DataRow = Datos.Tables("Tabla").NewRow 'Obtenemos una nueva fila vacía con la estructura que tendrá esta tabla. Fila("CIF") = "12312312P": Fila("NOMBRE") = "REINOSA": Fila("DIRECCION") = (etc.) Ahora añadimos la fila y actualizamos el DataSet (con Try, por seguridad): Datos.Tables("Tabla").Rows.Add(Fila) Try Adaptador.Update(Datos, "Tabla") 'Forzamos al DataSet a aceptar los cambios y grabar en origen. Datos.AcceptChanges() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Conflicto con clave principal") End Try Cerramos la conexión y declaramos el DataSource y el DataMember como otras ocasiones. Caso 3º del mismo proyecto. IMPORTANTE: veremos cómo introducir datos a través de una vista. Es muy semejante al caso anterior hasta la creación del DataSet. Ahora (por ejemplo) vamos a hacer una vista de los clientes de la provincia de Ourense. Dim Vista As New DataView(Datos.Tables("Tabla"), "PROVINCIA='OURENSE'", "NOMBRE ASC", DataViewRowState.CurrentRows) 'Creamos una nueva fila en la vista. Dim Fila As DataRowView = Vista.AddNew() Fila("CIF") = "12312312B": Fila("NOMBRE") = "RAMONASA": etc. 'Finalizamos la edición. Fila.EndEdit() 'Actualizamos el origen de datos. Adaptador.Update(Datos, "Tabla") Y terminamos según lo acostumbrado.