Conectar VB Con Mysql
Conectar VB Con Mysql
Conectar VB Con Mysql
"Si usa algn cdigo del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y tambin comentenos que tal les pareci el tutorial"
1. ENTORNO
Visual Basic 6.0. MySQL 5.0.
2. INTRODUCCIN
Visual Basic es un lenguaje de programacin orientado a eventos, desarrollado por el alemn Alan Cooper para Microsoft. Este lenguaje de programacin es un dialecto de BASIC, con importantes agregados. Su primera versin fue presentada en 1991, con la intencin de simplificar la programacin utilizando un ambiente de desarrollo completamente grfico que facilitara la creacin de interfaces grficas y, en cierta medida, tambin la programacin misma. Y el siguiente tutorial podran ver un ejemplo de como comunicar Visual Basic 6.0 con una base de datos MySQL 5.0 que tiene procedimientos almacenados. Desarrollaremos un ejemplo de mantenimiento a una tabla que espero les sea de su utilidad.
3. DES ARROLLO
3.1. Driver Primero debemos de instalar el Driver de MySQL para que se pueda comunicar Visual Basic 6.0 con MySQL 5.0 para eso lo descargamos del siguiente LINK 3.2. Creando Base de Datos con MySQL A continuacin les paso el script para crear la base y la tabla que vamos a usar en el ejemplo --
-- Creando la base de datos -CREATE DATABASE IF NOT EXISTS bdblog; --- Usando la base de datos -USE bdblog; --- Creando la tabla -DROP TABLE IF EXISTS `visitante`; CREATE TABLE `visitante` ( `codigo` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(50) NOT NULL, `fechaNacimiento` datetime NOT NULL, `peso` decimal(18,2) NOT NULL, PRIMARY KEY (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
3.3. Creando los procedimiento El script de los procedimientos almacenados que vamos a usar -- Insertar Visitante DELIMITER $$ DROP PROCEDURE IF EXISTS `spI_visitante` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `spI_visitante`( _codigo _nombre _peso ) BEGIN SELECT IFNULL(MAX(codigo),0)+1 into _codigo FROM `visitante`; INSERT INTO `visitante`( `codigo`, `nombre`, `fechaNacimiento`, `peso` ) VALUES ( _codigo, _nombre, _fechaNacimiento, _peso int , varchar(50) , datetime , decimal(18, 2)
_fechaNacimiento
); END $$ DELIMITER ;
-- Actualizar Visitante DELIMITER $$ DROP PROCEDURE IF EXISTS `spU_visitante` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `spU_visitante`( _codigo _nombre _peso ) BEGIN UPDATE visitante SET `nombre` = _nombre, `fechaNacimiento` = _fechaNacimiento, `peso` = _peso WHERE `codigo` = _codigo ; END $$ DELIMITER ; int , varchar(50) , datetime , decimal(18, 2)
_fechaNacimiento
-- Mostrar todos los Visitante DELIMITER $$ DROP PROCEDURE IF EXISTS `spF_visitante_all` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `spF_visitante_all`( ) BEGIN select codigo, nombre, fechaNacimiento, peso from visitante order by nombre; END $$ DELIMITER ; 3.4. Creando el proyecto en Visual Basic 6.0. Debemos de crear un proyecto en Visual Basic 6.0 y luego diseamos el siguiente formulario
3.4.1. Mtodos de soporte Dentro del formulario vamos a crear unos mtodos que den soporte a nuestro formulario. Como el evento limpiar, que limpia todos los textbox o el mtodo habilitar que habilita los controles. Option Explicit 'Para saber si es un nuevo registro Dim nuevo As Boolean 'Para saber si vamos a modificar Dim modificar As Boolean 'Habilita los controles que son textbox, combobox, dtpicker Private Sub habilitar(ByVal blnEstado As Boolean)
Dim crl As Control For Each crl In Me.Controls If TypeOf crl Is TextBox Or TypeOf crl Is ComboBox Or TypeOf crl Is DTPicker Then crl.Enabled = blnEstado End If Next End Sub 'Limpia las cajas de texto Private Sub limpiar() Dim crl As Control For Each crl In Me.Controls If TypeOf crl Is TextBox Then crl.Text = "" End If Next End Sub 'Habilita o deshabilita los botones Private Sub botones() If nuevo = True Or modificar = True Then habilitar True btnNuevo.Enabled = False btnGuardar.Enabled = True btnModificar.Enabled = False btnCancelar.Enabled = True Else habilitar False btnNuevo.Enabled = True btnGuardar.Enabled = False btnModificar.Enabled = True btnCancelar.Enabled = False End If End Sub 'Cargamos los metodos en el load Private Sub Form_Load() nuevo = False modificar = False habilitar False botones 'Este metodo lo implementamos despues llenarListView End Sub 3.4.2. Mtodo Conectar El siguiente mtodo nos permite conectarnos a la base de datos que esta en MySQL desde Visual Basic 6.0. Public Function Conectar() As ADODB.Connection Dim con As ADODB.Connection
Set con = New ADODB.Connection con.CursorLocation = adUseClient con.Open "DRIVER={MySQL ODBC 3.51 Driver};" _ & "SERVER=localhost;" _ & "DATABASE=bdblog;" _ & "UID=root;PWD=clave;PORT=3306;OPTION=131072" Set Conectar = con End Function
3.4.3. Mtodo llenar listView Private Sub llenarListView() With lvwVisitante .Refresh .ListItems.Clear End With Dim sqlcon As ADODB.Connection Set sqlcon = Me.Conectar Dim sqlrec As New ADODB.Recordset sqlrec.Open "call spF_visitante_all()", sqlcon, adOpenStatic, adLockOptimistic Dim Item As ListItem While Not sqlrec.EOF Set Item = lvwVisitante.ListItems.Add(, , sqlrec!nombre) Item.Tag = sqlrec!nombre Item.SubItems(1) = VBA.Format$(sqlrec!fechaNacimiento, "dd-MM-yyyy") Item.SubItems(2) = "" & sqlrec!peso Item.SubItems(3) = "" & sqlrec!Codigo sqlrec.MoveNext Wend lvwVisitante.Refresh sqlrec.Close sqlcon.Close Set sqlrec = Nothing Set sqlcon = Nothing End Sub 3.4.4. Mtodo para insertar un visitante Este mtodo sirve para insertar un visitante a nuestra base de datos y llama al procedimiento almacenado "spI_Visitante" Public Function insertarvisitante() As Boolean On Error GoTo Problemas Dim rpta As Boolean ' Variables que nos indicar si se inserto el Registro rpta = False Dim sqlcon As ADODB.Connection ' Variable que sirve para establecer la conexion con MySQL Set sqlcon = Me.Conectar
Dim sqlcmd As New ADODB.Command ' El comando que vamos a ejecutar --> Insertar un registro a la tabla visitante With sqlcmd .CommandText = "call spI_visitante(" & _ "?," & _ "?," & _ "?," & _ "?" & _ ")" .ActiveConnection = sqlcon ' Establecemos la conexion al comando .CommandType = adCmdText ' Va a ejecutar un Store Procedure .Prepared = True ' La sentencia esta prepara para ejecutarse End With 'Parametros que tendra el procedimiento almacenado spI_visitante Dim paramcodigo As New ADODB.Parameter Dim paramnombre As New ADODB.Parameter Dim paramfechaNacimiento As New ADODB.Parameter Dim parampeso As New ADODB.Parameter 'Establecemos los valores para los parametros del procedimiento almacenado spI_visitante With paramcodigo .Name = "_codigo" .Size = 0 .Direction = adParamInput .Type = adInteger .Value = 0 End With With paramnombre .Name = "_nombre" .Size = 50 .Direction = adParamInput .Type = adVarChar .Value = UCase(Me.txtNombre.Text) End With With paramfechaNacimiento .Name = "_fechaNacimiento" .Size = 0 .Direction = adParamInput .Type = adDate .Value = Me.dtpFechaNacimiento.Value End With With parampeso .Name = "_peso" .Size = 0 .Direction = adParamInput .Type = adDecimal .Precision = 18 .NumericScale = 2
.Value = Me.txtPeso.Text End With 'Agregamos los parametros al comando sqlcmd.Parameters.Append paramcodigo sqlcmd.Parameters.Append paramnombre sqlcmd.Parameters.Append paramfechaNacimiento sqlcmd.Parameters.Append parampeso 'Ejecutamos el procedimiento sqlcmd.Execute 'Limpiamos los recursos Set sqlcmd = Nothing sqlcon.Close Set sqlcon = Nothing insertarvisitante = True Exit Function Problemas: insertarvisitante = False Exit Function End Function 3.4.5. Mtodo para actualizar un visitante Este mtodo sirve para actualizar un visitante a nuestra base de datos y llama al procedimiento almacenado "spU_Visitante" Public Function actualizarvisitante() As Boolean On Error GoTo Problemas Dim rpta As Boolean ' Variables que nos indicar si se actualizo el Registro rpta = False Dim sqlcon As ADODB.Connection ' Variable que sirve para establecer la conexion con MySQL Set sqlcon = Me.Conectar Dim sqlcmd As New ADODB.Command ' El comando que vamos a ejecutar --> Actualizar un registro a la tabla visitante With sqlcmd .CommandText = "call spU_visitante(" & _ "?," & _ "?," & _ "?," & _ "?" & _ ")" .ActiveConnection = sqlcon ' Establecemos la conexion al comando .CommandType = adCmdText ' Va a ejecutar un Store Procedure .Prepared = True ' La sentencia esta prepara para ejecutarse End With 'Parametros que tendra el procedimiento almacenado spI_visitante Dim paramcodigo As New ADODB.Parameter Dim paramnombre As New ADODB.Parameter
Dim paramfechaNacimiento As New ADODB.Parameter Dim parampeso As New ADODB.Parameter 'Establecemos los valores para los parametros del procedimiento almacenado spI_visitante With paramcodigo .Name = "_codigo" .Size = 0 .Direction = adParamInput .Type = adInteger .Value = Me.lblCodigo.Caption End With With paramnombre .Name = "_nombre" .Size = 50 .Direction = adParamInput .Type = adVarChar .Value = UCase(Me.txtNombre.Text) End With With paramfechaNacimiento .Name = "_fechaNacimiento" .Size = 0 .Direction = adParamInput .Type = adDate .Value = Me.dtpFechaNacimiento.Value End With With parampeso .Name = "_peso" .Size = 0 .Direction = adParamInput .Type = adDecimal .Precision = 18 .NumericScale = 2 .Value = Me.txtPeso.Text End With 'Agregamos los parametros al comando sqlcmd.Parameters.Append paramcodigo sqlcmd.Parameters.Append paramnombre sqlcmd.Parameters.Append paramfechaNacimiento sqlcmd.Parameters.Append parampeso 'Ejecutamos el procedimiento sqlcmd.Execute 'Limpiamos los recursos Set sqlcmd = Nothing sqlcon.Close Set sqlcon = Nothing actualizarvisitante = True Exit Function Problemas:
actualizarvisitante = False Exit Function End Function 3.4.6. Eventos de los controles del formulario A continuacin les mostraremos los eventos de los botones del formulario y del evento double clic del listview 'Evento clic del boton cancelar Private Sub btnCancelar_Click() nuevo = False modificar = False botones limpiar Me.lblCodigo.Caption = "" End Sub 'Evento clic del boton guardar Private Sub btnGuardar_Click() Dim respuesta As Integer Dim rpta As Boolean rpta = False If nuevo = True Then rpta = Me.insertarvisitante Else respuesta = MsgBox("Desea guardar los cambios realizados", 52, "MENSAJE") If respuesta = vbYes Then rpta = Me.actualizarvisitante End If End If If rpta = True Then Dim men As String men = "Se " If nuevo = True Then men = men + "registro " Else men = men + "actualizo " End If men = men + "de forma correcta al Visitante" MsgBox men, vbDefaultButton1, "MENSAJE" Else MsgBox "No se realizo el proceso correctamente", vbCritical, "ERROR" End If nuevo = False modificar = False botones limpiar llenarListView
Me.lblCodigo.Caption = "" End Sub 'Evento clic del boton modificar Private Sub btnModificar_Click() If lblCodigo.Caption <> "" Then modificar = True botones Else MsgBox "Debe de buscar un dato para modificar", vbCritical, "ERROR" End If End Sub Private Sub btnNuevo_Click() nuevo = True modificar = False botones limpiar Me.txtNombre.SetFocus Me.lblCodigo.Caption = "" End Sub 'Evento double clic del lisview Private Sub lvwVisitante_DblClick() On Error GoTo Problemas If lvwVisitante.ListItems.Count = 0 Then Exit Sub If lvwVisitante.SelectedItem Is Nothing Then Exit Sub Me.txtNombre.Text = lvwVisitante.SelectedItem.Tag Me.dtpFechaNacimiento.Value = lvwVisitante.SelectedItem.SubItems(1) Me.txtPeso.Text = lvwVisitante.SelectedItem.SubItems(2) Me.lblCodigo.Caption = lvwVisitante.SelectedItem.SubItems(3) Exit Sub Problemas: MsgBox "Debe de seleccionar un Visitante", vbCritical, "ERROR" Exit Sub End Sub
Algo asi, muuy sencillo, ahora bien.. Nos vamos al ambiente de programacion del formulario
y antes del Form_Load Escribiremos declararemos los siguientes objetos Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Adentro del Form_Load Escribiremos lo siguiente
Private Sub Form_Load() conn.Open "driver={mysql odbc 3.51 driver};" _ & "user=administrador;" _ & "password=123;" _ & "server=localhost;" _ & "database=midb;" rs.Open "select * from mitabla", conn, adOpenStatic, adLockOptimistic Text1.Text = rs.Fields("nombre") Text2.Text = rs.Fields("apellido") Text3.Text = rs.Fields("cedula") Text4.Text = rs.Fields("email") Text5.Text = rs.Fields("pais") End Sub El codigo seria algo asi.
Hablemos un poco de este codigo, conn sera el q nos permita la conexion de la base de datos, debemos especificar el nombre de usuario, la clave, el nombre del servidor, y la base de datos. rs sera nuestro recordset, el que nos permitira realizar cualquier cosa con los registros, eliminar, nuevo, guardar, buscar, etc..
con la instruccin "selectr * from mitabla" hacemos un llamado a la tabla de la base de datos midb, pudieran existir mas tablas en esa base de datos y con esa instruccion especificamos cual es la tabla con la que vamos a trabajar. en este caso mitabla. Finalmente, pasamos los registros que estan en nuestra base de datos, a las cajas de texto respecticamente.. si ejecutamos la aplicacin nos daremos cuenta de que nos muestra los registros o el registro q creamos anteriormente. Ahora programemos nuestros botones de nuevo y guardar. en el boton de guardar escribiremos: Private Sub Command1_Click() rs.AddNew Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" End Sub
en el de guardar escribiremos:
Private Sub Command2_Click() rs.Fields("nombre") = Text1.Text rs.Fields("apellido") = Text2.Text rs.Fields("cedula") = Text3.Text rs.Fields("email") = Text4.Text rs.Fields("pais") = Text5.Text rs.Update Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" MsgBox "Tus registros han sigo duardados en " _ & Chr(10) & "tu base de datos midb (MYSQL)" _ & Chr(10) & Chr(10) & "Cool.." End Sub
y para verificar que tu registro se guardo, entra a SQLyog y verifica que realmente tus registros estan hay.