11 - Anexo

[editar]
Monografía creado por Isaias Cansino García.
02 de Febrero de 2008
Anexo:
Objetivo:
Implementar procedimientos almacenados en mysql 5 o superior, crear una aplicación cliente en visual basic 6.0 realizando la interconexión mediante ODBC con el conector mysql-connector-odbc-3.51.14-win32.

Consideraciones:

El anexo comenzará la descripción del artículo considerando que el siguiente software requerido se encuentra instalado correctamente en su equipo de cómputo a utilizar para llevar a cabo esta práctica.

De la misma manera se supondrá la correcta configuración del el o los usuario en el DBMS, se recomienda ingresar dos, uno de ellos que tenga todos los privilegios sobre la base de datos que se creará y otro solamente con el privilegio de ejecución.

Se considera que el lector tiene conocimientos medios en el manejo del DBMS así como del lenguaje de programación visual basic 6.0 y de la tecnología ADO.

Es también necesario que después de la instalación del DBMS, creación de usuarios mencionados, se creen la base de datos “banco” y las tablas de la imagen que se presenta en la sección “escenario”, para este fin se recomienda que se utilice la aplicación administrativa de base de datos mysql administrator que viene en el paquete mysql-gui-tools-5.0-r8-win32.msi


Software Requerido:

• wamp5_1.6.6
• Visual basic 6.0
• mysql-connector-odbc-3.51.14-win32
• Sistema operativo windows preferentemente XP
• mysql-gui-tools-5.0-r8-win32.msi

Escenario:

El anexo pretende resolver el problema planteado en el capítulo dos sección cinco sub sección uno que es básicamente el caso de un banco en el que se pretende ocultar tablas a los usuarios y para esto utilizan la implementación de procedimientos almacenados. La estructura de base de datos es la que se muestra a continuación.






Procedimientos almacenados:

Mediante la herramienta mysql query browser es necesario ingresar lo siguientes procedimientos almacenados.

Estado_cuenta:

Este procedimiento se encarga de poner a la vista de la aplicación cliente los diferentes movimientos que ha tenido la cuenta que se otorga como parámetro, al igual que todos los otros procedimientos almacenados antes de brindar cualquier información se realiza una verificación del usuario y la clave de este.




Identificación:

Este procedimiento realiza la verificación inicial del nombre del usuario, clave y la sucursal donde tiene autorización de ingresar.



Información:

Es el encargado de enviar información a la aplicación cliente de diferentes aspectos que tienen que ver con la situación de la cuenta.


ingresa_retiro_deposito

El ingreso de información en las tablas de operación y movimientos es el principal trabajo de este procedimiento, aparte de garantizar que estos movimientos se realicen correctamente.



Aplicación:

La aplicación está realizada en el lenguaje de programación visual basic 6.0 y realiza una interconexión con mysql-connector-odbc-3.51.14-win32, consta de un grupo de formularios que se describen a continuación.





Formulario Clavepedir:

En este formulario el usuario se identifica y puede tener acceso a la configuración de la conexión, posterior a la identificación es enviado al formulario mdi que se analizará más delante.




Bajo el siguiente código:

Private Sub Command1_Click()

Dim sql As String
Dim mirecordset As Recordset
Dim mirecordset2 As Recordset
If Module2.conectar1 = False Then
Call MsgBox("Su conexión no fué exitosa", vbInformation, "I.T.E.S.U")
dsn.Show
Exit Sub
End If

If Text1 = Or Text2 = Or Text3 = Then Call MsgBox("Es necesario ingresar todos los datos de identificación", vbInformation, "I.T.E.S.U") Exit Sub End If ' utilizacion de procedimiento almacenado sql = "call identificacion('" & Text1 & "','" & Text2 & "'," & Text3 & ")" Set mirecordset = MiConexion.Execute(sql) If mirecordset.BOF And mirecordset.EOF Then Call Module2.DESconectartexto Call MsgBox("Verifique su nombre y contraseña", vbInformation, "I.T.E.S.U") Exit Sub End If Call Module2.DESconectartexto Module1.usuario = Text1 Module1.clave = Text2 Module1.sucursal = Text3 MDIForm1.Show Unload Me End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Command3_Click() dsn.Show End Sub Formulario dsn: Cuando se desea realizar modificaciones en los parámetros de conexión al servidor mysql es necesario recurrir a este formulario ya que en el se puede realizar esta operación. Bajo el siguiente código: Private Sub Command1_Click() Call creaelarchivodeclaveaceptada End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Command3_Click() Call Command1_Click If conectar1() = True Then Call MsgBox("La prueba fué exitosa", vbInformation, "I.T.E.S.U") Else Call MsgBox("No se pudo conectar con el servidor", , "I.T.E.S.U") End If End Sub Private Sub Form_Load() Call Module1.enelcentro(Me) Dim NUMERITO As ARCHIVODSN Dim canal As Integer Dim leido As String canal = FreeFile Open App.Path & "\" & "dsnwin32.dll" For Random As canal Len = Len(NUMERITO) Get #canal, 1, NUMERITO Close Text1 = Trim(NUMERITO.dsnname) Text1 = (Text1) Text2 = Trim(NUMERITO.hostorip) Text2 = (Text2) Text3 = Trim(NUMERITO.namedatabase) Text3 = (Text3) Text4 = Trim(NUMERITO.user) Text4 = (Text4) Text5 = Trim(NUMERITO.Password) Text5 = (Text5) Text6 = Trim(NUMERITO.port) Text6 = (Text6) End Sub Private Sub creaelarchivodeclaveaceptada() 'se hace el archiv Dim NUMERITO As ARCHIVODSN Dim canal As Integer canal = FreeFile Open App.Path & "\" & "dsnwin32.dll" For Random As canal Len = Len(NUMERITO) NUMERITO.dsnname = Text1 NUMERITO.hostorip = Text2 NUMERITO.namedatabase = (Text3) NUMERITO.user = (Text4) NUMERITO.Password = (Text5) NUMERITO.port = (Text6) Put #canal, 1, NUMERITO Close Call MsgBox("Sus datos fueron guardados correctamente", vbExclamation, "I.T.E.S.U") Unload Me End Sub Formulario MDIFORM1 Este formulario tiene la tarea de dar la posibilidad al usuario de seleccionar dentro del menú la tarea que desea realizar. Bajo el siguiente código. Private Sub estadodecuentaaa_Click() estadodecuenta.Show End Sub Private Sub mov_cuenta_Click() pruebaprocedure.Show End Sub Private Sub salirrrr_Click() End End Sub Formulario pruebaprocedure: Este formulario tiene la tarea de proporcionar la información de las cuentas al usuario, tanto cuenta origen como la destino, y le proporciona una caja de texto para teclear la cantidad del movimiento, en el caso de que un cliente llegue a realizar solamente un retiro o un deposito en efectivo o una cuenta que no sea del banco lo que se hace es que se teclea una cuenta predispuesta con el número cero. Bajo el siguiente código: Private Sub Command1_Click() Dim sql As String Dim comillas As String comillas = Chr(39) Dim mirecordset As Recordset If IsNumeric(Text1) = False Then Call MsgBox("Es necesario que el dato ingresado sea numérico", vbInformation, "I.T.E.S.U") Text1 =
Text1.SetFocus
Exit Sub
End If
Call Module2.conectar1
sql = "call informacion(" & Text1 & ",'" & Module1.usuario & "','" & Module1.clave & "')"
Set mirecordset = MiConexion.Execute(sql)
If mirecordset.BOF And mirecordset.EOF Then
Call Module2.DESconectartexto
Call MsgBox("No se encontró ninguna cuenta bajo este número", vbInformation, "I.T.E.S.U")
Text1 = Text1.SetFocus Exit Sub End If Text2 = mirecordset("id_cliente") Text3 = mirecordset("paterno") Text4 = mirecordset("mateno") Text5 = mirecordset("nombre") Text6 = mirecordset("idsucursal") Text7 = mirecordset("municipio") & " " & mirecordset("entidad") Text8 = mirecordset("descripcion") Text9 = mirecordset("quetipo") DTPicker1.Value = mirecordset("apertura") Call Module2.DESconectartexto Text1.Locked = True Text10.SetFocus End Sub Private Sub Command2_Click() Dim sql As String Dim comillas As String comillas = Chr(39) Dim mirecordset As Recordset If Text1.Locked = False Or Text10.Locked = False Then Call MsgBox("Es necesario que selecciones alguna cuenta", vbInformation, "I.T.E.S.U") Exit Sub End If If IsNumeric(Text19) = False Then Call MsgBox("Es necesario que el dato monetario sea numérico", vbInformation, "I.T.E.S.U") Exit Sub End If Dim respuesta As Integer Call Module2.conectar1 respuesta = 0 sql = "call ingresa_retiro_deposito('" & Module1.usuario & "','" & Module1.clave & "'," & Module1.sucursal & "," & Text1 & "," & Text10 & " ," & Text19 & ")" MiConexion.Execute (sql) Module2.DESconectartexto Call MsgBox("Sus cambios se han realizado correctamente", vbInformation, "I.T.E.S.U") Text1.SetFocus Call limpiartext End Sub Private Sub Command3_Click() Unload Me End Sub Private Sub Command4_Click() Dim sql As String Dim comillas As String comillas = Chr(39) Dim mirecordset As Recordset If IsNumeric(Text10) = False Then Call MsgBox("Es necesario que el dato ingresado sea numérico", vbInformation, "I.T.E.S.U") Text10 =
Text10.SetFocus
Exit Sub
End If


Call Module2.conectar1

sql = "call informacion(" & Text10 & ",'" & Module1.usuario & "','" & Module1.clave & "')"
Set mirecordset = MiConexion.Execute(sql)
If mirecordset.BOF And mirecordset.EOF Then
Call Module2.DESconectartexto

Call MsgBox("No se encontró ninguna cuenta bajo este número", vbInformation, "I.T.E.S.U")
Text10 = Text10.SetFocus Exit Sub End If Text11 = mirecordset("id_cliente") Text12 = mirecordset("paterno") Text13 = mirecordset("mateno") Text14 = mirecordset("nombre") Text15 = mirecordset("idsucursal") Text16 = mirecordset("municipio") & " " & mirecordset("entidad") Text17 = mirecordset("descripcion") Text18 = mirecordset("quetipo") DTPicker2.Value = mirecordset("apertura") Call Module2.DESconectartexto Text10.Locked = True Text19.SetFocus End Sub Private Sub Form_Load() Call Module1.enelcentro(Me) Call limpiartext End Sub Private Sub limpiartext() Text1.Locked = False Text10.Locked = False Text19 =
Text1 = Text2 =
Text3 = Text4 =
Text5 = Text6 =
Text7 = Text8 =
Text9 = Text10 =
Text11 = Text12 =
Text13 = Text14 =
Text15 = Text16 =
Text17 = Text18 =


End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If


End Sub

Private Sub Text10_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command4.SetFocus

End If
End Sub

Private Sub Text11_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command2.SetFocus
End If
End Sub

Private Sub Text19_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command2.SetFocus
End If
End Sub


Formulario : estadodecuenta

El mostrar los diferentes movimientos que han sido realizados con el formulario pruebaprocedure es la tarea principal de esta interfaz y los controles utilizados para esta tarea se muestran a continuación.




Bajo el siguiente código.

Private Sub limpiartext()
Text1.Locked = False
Text1 = Text2 =
Text3 = Text4 =
Text5 = Text6 =
Text7 = Text8 =
Text9 = MSFlexGrid1.Clear Call formatoflex End Sub Private Sub Command1_Click() Dim sql As String Dim comillas As String comillas = Chr(39) Dim mirecordset As Recordset If IsNumeric(Text1) = False Then Call MsgBox("Es necesario que el número de cuenta sea un dato numérico", vbInformation, "I.T.E.S.U") Text1 =
Text1.SetFocus
Exit Sub
End If
MSFlexGrid1.Clear
Call formatoflex
Call Module2.conectar1

sql = "call informacion(" & Text1 & ",'" & Module1.usuario & "','" & Module1.clave & "')"
Set mirecordset = MiConexion.Execute(sql)
If mirecordset.BOF And mirecordset.EOF Then
Call Module2.DESconectartexto

Call MsgBox("No se encontró ninguna cuenta bajo este número", vbInformation, "I.T.E.S.U")
Text1 = Text1.SetFocus Exit Sub End If Text2 = mirecordset("id_cliente") Text3 = mirecordset("paterno") Text4 = mirecordset("mateno") Text5 = mirecordset("nombre") Text6 = mirecordset("idsucursal") Text7 = mirecordset("municipio") & " " & mirecordset("entidad") Text8 = mirecordset("descripcion") Text9 = mirecordset("quetipo") DTPicker1.Value = mirecordset("apertura") Call Module2.DESconectartexto Text1.Locked = True Call Module2.conectar1 sql = "call estado_cuenta('" & Module1.usuario & "','" & Module1.clave & "'," & Text1 & ")" Set mirecordset = MiConexion.Execute(sql) If mirecordset.BOF And mirecordset.EOF Then Call Module2.DESconectartexto Call MsgBox("No se encontró ningún movimiento de esta cuenta", vbInformation, "I.T.E.S.U") Text1 =
Text1.SetFocus

Exit Sub
End If
Dim tantos As Integer

MSFlexGrid1.Rows = 2
While mirecordset.EOF = False

tantos = Module1.cuantosdatostieneelflexencolumnas(MSFlexGrid1)
tantos = tantos + 1
MSFlexGrid1.Rows = tantos + 4

MSFlexGrid1.TextMatrix(tantos, 0) = mirecordset("idoperacion")
MSFlexGrid1.TextMatrix(tantos, 1) = mirecordset("fecha")
MSFlexGrid1.TextMatrix(tantos, 2) = mirecordset("idsucursal")
MSFlexGrid1.TextMatrix(tantos, 3) = mirecordset("direccion")
MSFlexGrid1.TextMatrix(tantos, 4) = mirecordset("num_ref")
MSFlexGrid1.TextMatrix(tantos, 5) = mirecordset("retiro")
MSFlexGrid1.TextMatrix(tantos, 6) = mirecordset("deposito")



mirecordset.MoveNext
Wend
Call Module2.DESconectartexto

Command3.SetFocus

End Sub

Private Sub Command2_Click()
Call limpiartext
Text1.SetFocus


End Sub


Private Sub Command3_Click()
Unload Me

End Sub

Private Sub Form_Load()
Call Module1.enelcentro(Me)
Call limpiartext
Call formatoflex

End Sub
Private Sub formatoflex()
MSFlexGrid1.TextMatrix(0, 0) = "Operación Num"
MSFlexGrid1.ColWidth(0) = 1770
MSFlexGrid1.TextMatrix(0, 1) = "Fecha"
MSFlexGrid1.ColWidth(1) = 2880
MSFlexGrid1.TextMatrix(0, 2) = "Suc Num"
MSFlexGrid1.ColWidth(2) = 1035
MSFlexGrid1.TextMatrix(0, 3) = "Direcc"
MSFlexGrid1.ColWidth(3) = 3180
MSFlexGrid1.TextMatrix(0, 4) = "Referencia"
MSFlexGrid1.ColWidth(4) = 1230
MSFlexGrid1.TextMatrix(0, 5) = "Retiro"
MSFlexGrid1.ColWidth(5) = 1650
MSFlexGrid1.TextMatrix(0, 6) = "Depósito"
MSFlexGrid1.ColWidth(6) = 2685

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.SetFocus
End If
End Sub



Modulo: module1

Este módulo almacena algunas funciones simples utilizadas por el sistema, así como algunas variables de tipo global.

Bajo el siguiente código.


Public usuario As String
Public clave As String
Public sucursal As Double

Public Type ARCHIVODSN
dsnname As String * 500
hostorip As String * 500
namedatabase As String * 500
user As String * 500
Password As String * 500
port As String * 500
End Type

Public Sub enelcentro(formulario As Form)
formulario.Top = 0
formulario.Left = 0
End Sub

Public Function cuantosdatostieneelflexencolumnas(flexito As MSFlexGrid)
Dim numrenglones As Integer
Dim resputa As Integer
Dim X As Integer
numrenglones = flexito.Rows
For X = 1 To numrenglones - 1

If flexito.TextMatrix(X, 0) = Then resputa = X X = numrenglones - 1 End If Next resputa = resputa - 1 cuantosdatostieneelflexencolumnas = resputa End Function Modulo: module2 Este módulo realiza solamente dos funciones, la de realizar la conexión con el servidor y la desconexión del mismo. Bajo el siguiente código. Public MiConexion As Connection Public MiConexionaccess As Connection Public manejador As String Public Function DESconectartexto() If MiConexion.State = 1 Then MiConexion.Close End If End Function Public Function conectar1() As Boolean Dim dsname As String Dim DATABASE As String Dim host As String Dim usuario As String Dim puerto As String Dim clave As String Set MiConexion = New ADODB.Connection Dim X As Integer Dim NUMERITO As ARCHIVODSN Dim canal As Integer Dim leido As String canal = FreeFile Open App.Path & "\" & "dsnwin32.dll" For Random As canal Len = Len(NUMERITO) Get #canal, 1, NUMERITO Close canal = Len(NUMERITO.dsnname) DATABASE = Trim(NUMERITO.namedatabase) DATABASE = (DATABASE) usuario = Trim(NUMERITO.user) usuario = (usuario) clave = Trim(NUMERITO.Password) clave = (clave) puerto = Trim(NUMERITO.port) puerto = (puerto) On Error Resume Next MiConexion.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _ & "SERVER=" & host & ";" _ & "DATABASE=" & DATABASE & ";" _ & "UID=" & usuario & ";" _ & "PWD=" & clave & ";" MiConexion.CursorLocation = adUseServer MiConexion.Open If Err.Number Then Call MsgBox("No fué Posible El Conectarse Con El Servidor De Base De Datos" & vbCrLf & "Favor De Verificar Que El Servidor Esté Activo" & vbCrLf & , vbExclamation, "I.T.E.S.U")
conectar1 = False
Else
conectar1 = True
End If
Err.Clear

End Function




[editar]

2 opiniones

MUY CLARO

ME ACLARÓ MUCHAS DUDAS, EL EJEMPLO DADO ME SIRVIÓ MUCHO, GRACIAS
Más teórico e histórico

Parece que está bien, aunque no es lo que buscaba, pues es un documento que tiene más de teoría e historia que de enseñanza y práctica.

Monografías relacionados con 'Procedimientos Almacenados MySQL 5'