You are on page 1of 11

VB 6.0 - Mysql con procedimientos almacenados en Visual Basic 6.0. 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. Desarrollo 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 int , _nombre varchar(50) , _fechaNacimiento datetime , _peso decimal(18, 2) ) BEGIN SELECT IFNULL(MAX(codigo),0)+1 into _codigo FROM `visitante`; INSERT INTO `visitante`( `codigo`, `nombre`, `fechaNacimiento`, `peso` ) VALUES ( _codigo, _nombre, _fechaNacimiento, _peso ); END $$ DELIMITER ;

-- Actualizar Visitante DELIMITER $$ DROP PROCEDURE IF EXISTS `spU_visitante` $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `spU_visitante`( _codigo int , _nombre varchar(50) , _fechaNacimiento datetime , _peso decimal(18, 2) ) BEGIN UPDATE visitante

SET `nombre` = _nombre, `fechaNacimiento` = _fechaNacimiento, `peso` = _peso WHERE `codigo` = _codigo ; END $$ DELIMITER ;

-- 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

Y las referencias del proyecto deberian ser las siguientes:

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

You might also like