Conectar Vb Con Mysql

Embed Size (px)

Citation preview

  • 7/22/2019 Conectar Vb Con Mysql

    1/15

    LUNES, FEBRERO 21 , 2011

    VB 6.0 - MYSQL CON PROCEDIMIENTOS ALMACENADOS ENVISUAL BASIC 6.0.10:52 A.M. HENRY JOE WONG URQUIZA 14 COMENTARIOS

    "Si u sa algn cdigo d el siguiente tutorial , den el icono de ME GUSTA del Faceboo k que se encu entra en su

    mano derecha, para que se vu elva Seguidor del Blo g y tambin c omentenos que tal les pareci el tutor ial"

    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 siguienteLINK

    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

    --

    http://www.programandoconcafe.com/2011/02/vb-60-mysql-con-procedimientos.htmlhttp://www.programandoconcafe.com/2011/02/vb-60-mysql-con-procedimientos.htmlhttp://www.blogger.com/comment.g?blogID=22625355&postID=2646468795145829839http://www.blogger.com/comment.g?blogID=22625355&postID=2646468795145829839http://dl.dropbox.com/u/8439638/conectorMySQLVB60.rarhttp://dl.dropbox.com/u/8439638/conectorMySQLVB60.rarhttp://dl.dropbox.com/u/8439638/conectorMySQLVB60.rarhttp://dl.dropbox.com/u/8439638/conectorMySQLVB60.rarhttp://www.blogger.com/comment.g?blogID=22625355&postID=2646468795145829839http://www.programandoconcafe.com/2011/02/vb-60-mysql-con-procedimientos.htmlhttp://www.programandoconcafe.com/2011/02/vb-60-mysql-con-procedimientos.html
  • 7/22/2019 Conectar Vb Con Mysql

    2/15

    -- Creando la base de datos

    --

    CREATEDATABASEIFNOTEXISTSbdblog;

    --

    -- Usando la base de datos

    --

    USEbdblog;

    ---- Creando la tabla

    --

    DROPTABLEIFEXISTS`visitante`;

    CREATETABLE`visitante` (

    `codigo` int(11) NOTNULLAUTO_INCREMENT,

    `nombre` varchar(50) NOTNULL,

    `fechaNacimiento` datetimeNOTNULL,

    `peso` decimal(18,2) NOTNULL,

    PRIMARYKEY(`codigo`)

    ) ENGINE=InnoDB DEFAULTCHARSET=latin1;

    3.3. Creando los procedimiento

    El script de los procedimientos almacenados que vamos a usar

    -- Insertar Visitante

    DELIMITER $$

    DROPPROCEDUREIFEXISTS`spI_visitante` $$

    CREATEDEFINER=`root`@`localhost` PROCEDURE`spI_visitante`(

    _codigo int,

    _nombre varchar(50) ,

    _fechaNacimiento datetime,

    _peso decimal(18, 2)

    )

    BEGIN

    SELECTIFNULL(MAX(codigo),0)+1 into_codigo FROM`visitante`;

    INSERTINTO`visitante`(

    `codigo`,

    `nombre`,

    `fechaNacimiento`,

    `peso`

    )

    VALUES(

    _codigo,

    _nombre,

    _fechaNacimiento,

    _peso

  • 7/22/2019 Conectar Vb Con Mysql

    3/15

    );

    END$$

    DELIMITER ;

    -- Actualizar Visitante

    DELIMITER $$

    DROPPROCEDUREIFEXISTS`spU_visitante` $$

    CREATEDEFINER=`root`@`localhost` PROCEDURE`spU_visitante`(

    _codigo int,

    _nombre varchar(50) ,

    _fechaNacimiento datetime,

    _peso decimal(18, 2)

    )

    BEGIN

    UPDATEvisitante

    SET

    `nombre` = _nombre,

    `fechaNacimiento` = _fechaNacimiento,

    `peso` = _peso

    WHERE

    `codigo` = _codigo

    ;

    END$$

    DELIMITER ;

    -- Mostrar todos los Visitante

    DELIMITER $$

    DROPPROCEDUREIFEXISTS`spF_visitante_all` $$

    CREATEDEFINER=`root`@`localhost` PROCEDURE`spF_visitante_all`(

    )

    BEGIN

    selectcodigo, nombre, fechaNacimiento, peso fromvisitante orderbynombre;

    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

  • 7/22/2019 Conectar Vb Con Mysql

    4/15

    Y las referencias del proyecto deberian ser las siguientes:

    http://4.bp.blogspot.com/-Cbqgm7QdaeU/TWJ7ujZYL5I/AAAAAAAAAOo/Pn2ves3-Gbw/s1600/Dibujo.JPG
  • 7/22/2019 Conectar Vb Con Mysql

    5/15

    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.

    OptionExplicit

    'Para saber si es un nuevo registro

    Dimnuevo AsBoolean

    'Para saber si vamos a modificar

    Dimmodificar AsBoolean

    'Habilita los controles que son textbox, combobox, dtpicker

    PrivateSubhabilitar(ByValblnEstado AsBoolean)

    http://2.bp.blogspot.com/-ccM5BAT6duQ/TWJ-WU5iw3I/AAAAAAAAAOs/XgkytefRfGY/s1600/Referencias.jpg
  • 7/22/2019 Conectar Vb Con Mysql

    6/15

    Dimcrl AsControl

    ForEachcrl In Me.Controls

    IfTypeOf crl IsTextBox OrTypeOf crl IsComboBox OrTypeOf crl IsDTPicker Then

    crl.Enabled = blnEstado

    EndIf

    Next

    EndSub

    'Limpia las cajas de textoPrivateSublimpiar()

    Dimcrl AsControl

    ForEachcrl In Me.Controls

    IfTypeOf crl IsTextBox Then

    crl.Text = ""

    EndIf

    Next

    EndSub

    'Habilita o deshabilita los botones

    PrivateSubbotones()Ifnuevo = TrueOrmodificar = TrueThen

    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

    EndIf

    EndSub

    'Cargamos los metodos en el load

    PrivateSubForm_Load()

    nuevo = False

    modificar = False

    habilitar False

    botones

    'Este metodo lo implementamos despues

    llenarListView

    EndSub

    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.

    PublicFunctionConectar() AsADODB.Connection

    Dimcon AsADODB.Connection

  • 7/22/2019 Conectar Vb Con Mysql

    7/15

    Setcon = NewADODB.Connection

    con.CursorLocation = adUseClient

    con.Open"DRIVER={MySQL ODBC 3.51 Driver};"_

    & "SERVER=localhost;"_

    & "DATABASE=bdblog;"_

    & "UID=root;PWD=clave;PORT=3306;OPTION=131072"

    SetConectar = con

    EndFunction

    3.4.3. Mtodo llenar listView

    PrivateSubllenarListView()

    WithlvwVisitante

    .Refresh

    .ListItems.Clear

    EndWith

    Dimsqlcon AsADODB.Connection

    Setsqlcon = Me.Conectar

    Dimsqlrec AsNewADODB.Recordset

    sqlrec.Open"call spF_visitante_all()", sqlcon, adOpenStatic, adLockOptimistic

    DimItem AsListItem

    WhileNotsqlrec.EOF

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

    Setsqlrec = Nothing

    Setsqlcon = Nothing

    EndSub

    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"

    PublicFunctioninsertarvisitante() AsBoolean

    OnErrorGoToProblemas

    Dimrpta AsBoolean' Variables que nos indicar si se inserto el Registro

    rpta = False

    Dimsqlcon AsADODB.Connection ' Variable que sirve para establecer la conexion con

    MySQL

    Setsqlcon = Me.Conectar

  • 7/22/2019 Conectar Vb Con Mysql

    8/15

    Dimsqlcmd AsNewADODB.Command ' El comando que vamos a ejecutar --> Insertar un

    registro a la tabla visitante

    Withsqlcmd

    .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

    EndWith

    'Parametros que tendra el procedimiento almacenado spI_visitante

    Dimparamcodigo AsNewADODB.Parameter

    Dimparamnombre AsNewADODB.Parameter

    DimparamfechaNacimiento AsNewADODB.Parameter

    Dimparampeso AsNewADODB.Parameter'Establecemos los valores para los parametros del procedimiento almacenado

    spI_visitante

    Withparamcodigo

    .Name = "_codigo"

    .Size = 0

    .Direction = adParamInput

    .Type= adInteger

    .Value = 0

    EndWith

    Withparamnombre

    .Name = "_nombre"

    .Size = 50

    .Direction = adParamInput

    .Type= adVarChar

    .Value = UCase(Me.txtNombre.Text)

    EndWith

    WithparamfechaNacimiento

    .Name = "_fechaNacimiento"

    .Size = 0

    .Direction = adParamInput

    .Type= adDate

    .Value = Me.dtpFechaNacimiento.Value

    EndWith

    Withparampeso

    .Name = "_peso"

    .Size = 0

    .Direction = adParamInput

    .Type= adDecimal

    .Precision = 18

    .NumericScale = 2

  • 7/22/2019 Conectar Vb Con Mysql

    9/15

    .Value = Me.txtPeso.Text

    EndWith

    'Agregamos los parametros al comando

    sqlcmd.Parameters.Append paramcodigo

    sqlcmd.Parameters.Append paramnombre

    sqlcmd.Parameters.Append paramfechaNacimiento

    sqlcmd.Parameters.Append parampeso

    'Ejecutamos el procedimientosqlcmd.Execute

    'Limpiamos los recursos

    Setsqlcmd = Nothing

    sqlcon.Close

    Setsqlcon = Nothing

    insertarvisitante = True

    ExitFunction

    Problemas:

    insertarvisitante = False

    ExitFunctionEndFunction

    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"

    PublicFunctionactualizarvisitante() AsBoolean

    OnErrorGoToProblemas

    Dimrpta AsBoolean' Variables que nos indicar si se actualizo el Registro

    rpta = False

    Dimsqlcon AsADODB.Connection ' Variable que sirve para establecer la conexion con

    MySQL

    Setsqlcon = Me.Conectar

    Dimsqlcmd AsNewADODB.Command ' El comando que vamos a ejecutar --> Actualizar un

    registro a la tabla visitante

    Withsqlcmd

    .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

    EndWith

    'Parametros que tendra el procedimiento almacenado spI_visitante

    Dimparamcodigo AsNewADODB.Parameter

    Dimparamnombre AsNewADODB.Parameter

  • 7/22/2019 Conectar Vb Con Mysql

    10/15

    DimparamfechaNacimiento AsNewADODB.Parameter

    Dimparampeso AsNewADODB.Parameter

    'Establecemos los valores para los parametros del procedimiento almacenado

    spI_visitante

    Withparamcodigo

    .Name = "_codigo"

    .Size = 0

    .Direction = adParamInput

    .Type= adInteger

    .Value = Me.lblCodigo.Caption

    EndWith

    Withparamnombre

    .Name = "_nombre"

    .Size = 50

    .Direction = adParamInput

    .Type= adVarChar

    .Value = UCase(Me.txtNombre.Text)

    EndWithWithparamfechaNacimiento

    .Name = "_fechaNacimiento"

    .Size = 0

    .Direction = adParamInput

    .Type= adDate

    .Value = Me.dtpFechaNacimiento.Value

    EndWith

    Withparampeso

    .Name = "_peso"

    .Size = 0

    .Direction = adParamInput

    .Type= adDecimal

    .Precision = 18

    .NumericScale = 2

    .Value = Me.txtPeso.Text

    EndWith

    '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

    Setsqlcmd = Nothing

    sqlcon.Close

    Setsqlcon = Nothing

    actualizarvisitante = True

    ExitFunction

    Problemas:

  • 7/22/2019 Conectar Vb Con Mysql

    11/15

    actualizarvisitante = False

    ExitFunction

    EndFunction

    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

    PrivateSubbtnCancelar_Click()

    nuevo = False

    modificar = False

    botones

    limpiar

    Me.lblCodigo.Caption = ""

    EndSub

    'Evento clic del boton guardar

    PrivateSubbtnGuardar_Click()

    Dimrespuesta AsInteger

    Dimrpta AsBoolean

    rpta = False

    Ifnuevo = TrueThen

    rpta = Me.insertarvisitante

    Else

    respuesta = MsgBox("Desea guardar los cambios realizados", 52, "MENSAJE")

    Ifrespuesta = vbYes Then

    rpta = Me.actualizarvisitante

    EndIf

    EndIf

    Ifrpta = TrueThen

    Dimmen AsString

    men = "Se "

    Ifnuevo = TrueThen

    men = men + "registro "

    Else

    men = men + "actualizo "

    EndIf

    men = men + "de forma correcta al Visitante"

    MsgBox men, vbDefaultButton1, "MENSAJE"

    Else

    MsgBox "No se realizo el proceso correctamente", vbCritical, "ERROR"

    EndIf

    nuevo = False

    modificar = False

    botones

    limpiar

    llenarListView

  • 7/22/2019 Conectar Vb Con Mysql

    12/15

    Me.lblCodigo.Caption = ""

    EndSub

    'Evento clic del boton modificar

    PrivateSubbtnModificar_Click()

    IflblCodigo.Caption "" Then

    modificar = True

    botonesElse

    MsgBox "Debe de buscar un dato para modificar", vbCritical, "ERROR"

    EndIf

    EndSub

    PrivateSubbtnNuevo_Click()

    nuevo = True

    modificar = False

    botones

    limpiarMe.txtNombre.SetFocus

    Me.lblCodigo.Caption = ""

    EndSub

    'Evento double clic del lisview

    PrivateSublvwVisitante_DblClick()

    OnErrorGoToProblemas

    IflvwVisitante.ListItems.Count = 0 ThenExitSub

    IflvwVisitante.SelectedItem IsNothingThenExitSub

    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)

    ExitSub

    Problemas:

    MsgBox "Debe de seleccionar un Visitante", vbCritical, "ERROR"

    ExitSub

    EndSub

    Acontinuacincrea unformulariocon lassiguientesdescripciones

  • 7/22/2019 Conectar Vb Con Mysql

    13/15

    Algo asi, muuy senci llo, ahora bien..Nos vamos al ambiente de programacion del formulario

    y antes del Form_Load Escribiremos declararemos los siguientes objetos DimconnAsNewADODB.ConnectionDimrsAsNewADODB.Recordset

    Adentro del Form_Load Escribiremos lo siguiente

  • 7/22/2019 Conectar Vb Con Mysql

    14/15

    Private SubForm_Load()conn.Open "driver={mysql odbc 3.51 driver};" _

    & "user=administrador;" _& "password=123;" _& "server=localhost;" _& "database=midb;"

    rs.Open "select * from mitabla", conn, adOpenStatic, adLockOptimisticText1.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 nombrede 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..

  • 7/22/2019 Conectar Vb Con Mysql

    15/15

    con la instruccin "selectr * from mitabla" hacemos un llamado a la tabla de la base de datos midb, pudieran existir mastablas en esa base de datos y con esa instruccion especificamos cual es la tabla con la que vamos a trabajar. en estecaso 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 SubCommand1_Click()rs.AddNewText1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""End Sub

    en el de guardar escribiremos:

    Private SubCommand2_Click()

    rs.Fields("nombre") = Text1.Textrs.Fields("apellido") = Text2.Textrs.Fields("cedula") = Text3.Textrs.Fields("email") = Text4.Textrs.Fields("pais") = Text5.Textrs.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.