Guia Avanzada Del Programador
Guia Avanzada Del Programador
Guia Avanzada Del Programador
MyBusiness POS
Curso de Programador Avanzado
Septiembre de 2006
2
3
DINTELSIS, S.A. DE C.V.
MyBusiness DELTA
Apuntes del curso de programador avanzado
1.- Ejemplo de cmo exportar datos a un archivo de texto
Los siguientes ejemplos se ejecutan desde rutinas o procedimientos de usuario.
01 Sub Main()
02 Dim rstProductos, a, c
03
04 a = c:\test.cvs
05
06 If ExisteArchivo( a ) Then
07 EliminaArchivo a
08 End If
09
10 Set rstProductos = CreaRecordSet( _
11 SELECT artiulo, descrip, existencia FROM prods, _
12 Ambiente.Connection )
13
14 While Not rstProductos.EOF
15 c =
16 c = c & rstProductos(articulo) & ,
17 c = c & rstProductos(descrip) & ,
18 c = c & rstProductos(existencia) & vbCrLf
19
20 OutLine a, c
21
22 rstProductos.MoveNext
23 Wend
24
25 MyMessage Procesamiento de exportacin completado
26
27 End Sub
4
Anlisis del ejemplo:
01 la instruccin Sub Main( ) es obligatoria e indica el inicio del programa o punto de entrada
del programa.
02 Declaramos las variables que vamos a ocupar dentro del programa con el comando DIM
esto le dice al mtodo que estas variables y el espacio en memoria que ocupan sean
destruidos al llegar a la instruccin End Sub.
04 En la variable a colocamos el nombre del archivo que vamos a usar en todo el programa.
06 Aqu usamos la funcion ExisteArchivo( a ) esto devuelve un valor Falso si el archivo no fue
localizado.
07 Si el archivo fue localizado entonces eliminamos el archivo con la instruccin
EliminaArchivo( a ).
10 Creamos un RecordSet del catalogo de productos.
Un RecordSet es un subconjunto de una o varias tablas de una base de datos, esto se debe
de imaginar como una tabla o matriz en la memoria de la computadora.
La funcin CreaRecordSet tiene dos parmetros, el primero es una cadena de caracteres
que representa una instruccin del SQL (Structred Query Language), el segundo es un
objeto que representa la conexin fsica con la base de datos.
14 Iniciamos un ciclo While (mientras) nos sea fin de archivo, la propiedad EOF indica si ya
estamos en el final de la matriz o RecordSet.
15 Inicializamos la variable c con un cadena vaca.
16 Concatenamos el valor de la columna o campo articulo a la variable c y le agregamos al
final una coma.
17 Concatenamos el valor de la columna o campo descrip a la variable c y le agregamos al
final una coma.
18 Concatenamos el valor de la columna o campo existencia la variable c y le agregamos al
final una coma, al final le agregamos, al final le agregamos la constante vbCrLf que es una
constante de vbScript que representan los caracteres 10 y 13 que la los programas interpretan
como una lnea nueva y salto de carro.
20 Utilizamos la funcin OutLine que utiliza los siguientes parmetros:
1.- El nombre del archivo donde deseamos agregar los datos
2.- El dato que deseamos agregar al archivo
La funcin OutLine crea el archivo si este no existe, y si el archivo no existe agrega los datos al
final de este.
22 El mtodo MoveNext mueve el cursor de la matriz o RecordSet al siguiente rengln o
registro, as nos aseguramos que en algn momento este va a llegar al final, cuando se usa un
ciclo es importante colocar esta instruccin o el programa se puede trabar (ciclar).
23 Wend Indica el fin de la estructura While (mientras).
25 MyMessage es un mtodo o rutina que despliega mensajes en la pantalla se puede usar en
lugar de MsgBox, esta rutina despliega los mensajes con fuentes grandes lo que permite su
mejor visualizacin.
27 End Sub indica el final de la rutina Main().
5
2.- Ejemplo de cmo exportar a *EXCEL
01 Sub Main()
02 Dim oXLS, oWB, oSheet, rstTemp
03 Set oXLS = CreateObject( "Excel.Application" )
04 oXLS.UserControl = True
05 oXLS.Visible = True
06
07 Set oWB = oXLS.WorkBooks.Add
08 Set oSheet = oWB.Sheets("hoja1")
09
10 oSheet.Cells( 1, 1 ).Value = "Hola Mundo"
11 oSheet.Cells( 1, 1 ).Font.Name = "Arial"
12 oSheet.Cells( 1, 1 ).Font.Size = 24
13 oSheet.Cells( 1, 1 ).Font.Bold = True
14
15 oSheet.Range( "A2:Z1000" ).NumberFormat = _
16 "##,##0.00"
17
18 Set rstTemp = CreaRecordSet( _
19 "SELECT vend, nombre FROM vends", _
20 Ambiente.Connection )
21
22 For n = 0 To rstTemp.Fields.Count - 1
23 oSheet.Cells( 2, n + 1 ).Value = _
24 rstTemp.Fields(n).Name 'Indica el nombre de la columna
25 Next
26
27 oSheet.Cells( 3, 1 ).CopyFromRecordSet rstTemp
28
29 End Sub
Dentro de Windows existe una forma de usar todos sus recursos por medio de programacin,
para esto todos los programas ofrecen una capa que permite visualizar sus propiedades y
mtodos a esta interfase le llamamos API o Interfase para el programador de la aplicacin,
aunque en este caso vamos a ver un ejemplo que utiliza una interfase simplificada llamada
OLE.
03 Utilizamos la funcin CreateObject esta funcin crea cualquier objeto que acepte una
interfase para programacin, en este caso creamos una aplicacin de *Excel y lo asignamos
a una variable llamada oXLS, cuando se asignan objetos a variables es necesario iniciar con el
comando Set.
04 La propiedad UserControl si es verdadera permite que el usuario pueda usar la aplicacin
de *Excel que hemos activado (Instanciado).
05 La propiedad Visible cuando tiene el valor verdadero muestra la ventana de *Excel y un
valor falso la oculta.
07 Aqu asignamos al variable oWB una hoja de trabajo de *Excel esto lo hacemos con el
Metodo oXLS.WorkBooks.Add.
08 Tomamos el control de una de las tres hojas que se crean cuando agregamos el libro de
trabajo a la variable oSheet con la instruccin oWb.oSheets(hoja1) donde entre comillas se
indica el nombre de la hoja, recuerde que si su *Excel esta en ingls este es Sheet1.
10 Una vez que tomamos el control de una hoja podemos trabajar con cada una de las celdas
de la hoja, por medio de la propiedad Cells, esta propiedad funciona igual que una matriz ya
6
que tenemos que indicar el rengln y la columna con la que queremos trabajar, la propiedad
Value indica el dato que deseamos guardar en la celda de *Excel.
11 Podemos cambiar el nombre de la fuente de la celda por medio de Font.Name, donde el
nombre es una cadena de texto que indica el nombre de cualquier fuente disponible para
Windows.
12 Font.Size el tamao de la fuente.
13 Font.Bold Si la fuente va a estar en negritas o no.
15 Tambin existe la opcin para manejo de rangos de celdas que es la propiedad
oSheet.Range donde se indica el rango por medio de una cadena de texto al igual como se
hara en las funciones que maneja *Excel de manera predeterminada, a Range se le pueden
asignar las misma propiedades y mtodos que Cells.
18 Creamos un RecordSet de la tabla de vendedores.
22 Creamos un ciclo para todas las columnas o campos dentro del RecordSet para colocarlas
como titulo de la columna en la hoja de *Excel, para esto el RecordSet tiene un propiedad
llamada Fields que indica las propiedades de las columnas del RecordSet y la cual a su vez
contiene la propiedad Count que indica el total de columnas que tiene nuestro RecordSet, los
RecordSets comienzan en la columna cero por lo que esta lnea debe de leerse de n = 0 hasta
el total de columnas del RecordSet.
23 Las columnas en Excel comienzan su conteo en uno por lo que tenemos que indicar n + 1
cuando hacemos referencia de la columna en la propiedad Cells, el valor que colocamos en la
celda es igual a la propiedad Name de la Fields donde el subndice que usamos es n.
25 Cerramos el ciclo For con al Instruccin NEXT.
26 CopyFromRecordSet es un mtodo de Cells que permite copiar un RecordSet
directamente en la hoja de *Excel.
7
3.- Ejemplo de cmo importar datos a un archivo de *Excel
01 Sub Main()
02 Dim oXLS, oWB, a, Query, rstCliente
03
04 a = "c:\miarchivo.xls"
05
06 If Not ExisteArchivo( a ) Then
07 MyMessage "No Existe el archivo: " & a
08 Exit Sub
09 End If
11
12 Set oXLS = CreateObject( "Excel.Application" )
13 Set oWB = oXLS.WorkBooks.Open( a )
14 Set oSheet = oWB.Sheets( "hoja1" )
15
16 Set Query = NewQuery()
17 Set Query.Connection = Ambiente.Connection
18
19 For n = 2 To 65536
20
21 If clEmpty( oSheet.Cells( n, 1 ).Value ) = True Then
22 Exit For
23 End If
24
25 Set rstCliente = CreaRecordSet( _
26 "SELECT cliente FROM clients WHERE cliente = '" & _
27 oSheet.Cells( n, 1 ).Value & "'", Ambiente.Connection )
28
29 Query.Reset
30
31 If rstCliente.EOF Then
32 Query.strState = "INSERT"
33 Else
34 Query.strState = "UPDATE"
35 Query.Condition = _
36 "cliente = '" & oSheet.Cells( n, 1 ).Value & "'"
37 End If
38
39 Query.AddField "clients", "cliente", _
40 oSheet.Cells( n, 1 ).Value
41 Query.AddField "clients", "nombre", _
42 oSheet.Cells( n, 2 ).Value
43 Query.Exec
44 Next
45
46 oWB.Close
47
48 MyMessage "Proceso de importacin terminado"
49
50 End Sub
8
13 En este momento abrimos un archivo de *Excel con la instruccin
oXLS.WorkBooks.Open( a ).
16 En este ejemplo vemos el uso del Objeto Query que es el que usa MyBusiness POS para
todo proceso de Actualizacin o Insercin de datos, aqu la instruccin
Set Query = NewQuery() se utiliza nicamente para crear este objeto (instanciar).
17 El objeto Query necesita saber con que base de datos va a trabajar por lo que le asignamos
este valor con la instruccin Set Query.Connection = Ambiente.Connection.
19 Creamos un ciclo que va a recorrer toda la hoja desde la celda 1 hasta la 65536 que es el
total de celdas que puede contener una hoja.
21 La funcin clEmpty es una funcin que devuelve verdadero si el valor que pasamos esta
vaci o contiene solo espacios en blanco, en este caso la usamos para determinar si la celda
donde estamos trabajando ya esta vaca para asumir que hemos llegado al final de la captura
en la hoja de *Excel.
22 La instruccin Exit For rompe el ciclo For sin llegar al final.
23 Creamos un RecordSet para buscar en la tabla de clientes el dato que estamos leyendo de
la celda de *Excel ya que si el dato existe en la tabla solo tenemos que actualizar los datos y
si no existe los insertamos.
29 Query.Reset es un mtodo que limpia el Objeto de su estado y de la lista de campos que le
agregamos, este mtodo es mas rpido que crear un objeto vaci.
31 Si el RecordSet nos devuelve EOF quiere decir que el cliente no existe en la base de datos.
32 Si el cliente no existe en el catalogo nuestro Objeto Query entra en modo de insercin por
medio de la instruccin Query.strState = "INSERT".
34 Si el cliente existe entonces solo actualizamos los datos basados en la clave del cliente,
esto lo hacemos indicando que se va a hacer un UPDATE con la instruccin Query.strState =
"UPDATE".
35 Cuando hacemos una actualizacin (UPDATE) es muy importante indicar el rango de datos
que deseamos afectar, por medio de la propiedad Condition del objeto Query, la condicin es
una cadena de texto que indica una condicin que sigue las mismas reglas del comando
WHERE de SQL, ntese que estamos concatenando el valor de la celda de Excel una comilla
sencilla al principio y al final esto se debe a que en SQL la comilla sencilla se usa como
delimitador de las constantes de texto.
39 El mtodo AddField de Query se usa para indicar las columnas o campos que se van a
afectar con la insercin o la actualizacin, los parmetros de AddField son:
1.- El nombre de la tabla que vamos a afectar
2.- El nombre del campo que deseamos afectar
3.- El valor que vamos a insertar o actualizar
43 El mtodo Exec del Objeto Query es el encargado de enviar la orden de SQL y ejecutarla en
el servidor de la base de datos.
46 El mtodo Close cierra el archivo de Excel que abrimos previamente.
9
4. Ejemplo de cmo realizar un reporte con parmetros
01 Sub Main()
02 Dim condicion
03
04 ParamData.ParametrosRequeridos _
05 "Pacientes", _
06 "Paciente inicial", _
07 "Pacientes", _
08 "Paciente final" _
09 , _
10 , _
11 , _
12 , _
13 , True
14
15
16 Rangos Ambiente, False
17
18
19 If Cancelado Then
20 Exit Sub
21 End If
22
23 condicion = ""
24
25 If Not ParamData.Todos1 Then
26 condicion = _
27 " AND paciente >= " & ParamData.BusquedaIni & _
28 " AND paciente <= " & ParamData.BusquedaFin
29 End If
30
31
32 If Not ParamData.TodasLasFechas Then
33 condicion = condicion & " AND fecha >= " & _
34 fechaSQL( ParamData.FechaInicial ) & _
35 " AND fecha <= " & _
36 fechaSQL( ParamData.FechaFinal )
37 End If
38
39 iniciaDocumento
40 Reporte.SQL = "SELECT * FROM imc WHERE paciente > 0 " & condicion
41 Reporte.SQL = "SELECT * FROM imc WHERE paciente = 1"
42 Reporte.RetrieveColumns
43 Reporte.ImprimeReporte
44
45 finDocumento
46 End Sub
04 ParamData es un objeto que abre una ventana para la seleccin de rangos de datos, o
rangos de fechas, sus parmetros son:
Parmetro 1 nombre de la primera bsqueda, las comas que se encuentran en seguida indican
parmetros que pueden incluir una segunda bsqueda pero que en este momento no se
ocupan pero es necesario indicarlas como parte de la instruccin.
16 n este momento se muestra una ventana de rangos con el mtodo Rangos que tiene dos
parmetros:
Parmetro 1 Ambiente, Parametro2 el valor que se le otorga
10
21 Validamos si se presion el CANCELADO de la ventana de rangos, si es verdadera
entonces con la instruccin ExitSub nos salimos de la aplicacin.
23 Aqu inicializamos la variable condicin que nos servir para guardar los datos que se
seleccionen en la ventana de rangos.
27 Esta parte valida si se utilizara el primer parmetro de rangos establecidos en
ParamData , con la propiedad ParamData.Todos1
28 Si la condicin es verdadera entonces le asignamos los datos de la ventana de rangos a la
variable condicion.
35 " AND paciente >= " & ParamData.BusquedaIni & con esta instruccin estamos
indicando que agregue a la bsqueda el dato seleccionado y se tomar como parmetro inicial.
36 " AND paciente <= " & ParamData.BusquedaFin con esta instruccin estamos indicando
que se agruegue a la bsqueda el dato seleccionado, tomndolo como parmetro final.
32 En este momento validamos si se requiere el filtro de las fechas tomando la propiedad
ParamData.TodasLasFechas. Si la condicin fue verdadera entonces se le asigna a la
variable condicion los parmetros inicial y final que se tomaran de referencia para la
bsqueda.
40 SQL es una propiedad del objeto Reporte a la que se le puede asignar una consulta a la
base de datos concatenando los rangos seleccionados.
42 Retrievecolumns ejecuta la consulta para obtener los datos.
43 ImprimeReporte es una funcin que permite ver los datos generados del reporte en
pantalla.
45 FinDocumento cierra la impresin de datos en pantalla.
11
Ambiente de Desarrollo
El Ambiente de Desarrollo es un Entorno de Desarrollo Integrado (IDE) compuesto por un
conjunto de herramientas tiles para el programador.
Para ingresar al Ambiente de Desarrollo debemos dar clic en el men Configuracin, Ambiente
de Desarrollo.
El Ambiente de Desarrollo presenta la siguiente ventana:
Las partes de la ventana del rea de desarrollo son:
Barra de mens
12
Barra de herramientas
Barra de identificacin
En esta barra podemos ingresarle un nombre a la forma que estamos diseando, as como
establecerle una descripcin a la misma. Tambin podemos acceder a los controles y a
algunos de sus eventos. Los controles son objetos con los que pueden interactuar los usuarios
para escribir o manipular datos. Los eventos son notificaciones que hacen que se ejecute un
procedimiento.
Barra de Controles
En esta barra se encuentran los controles con los cuales podemos trabajar e
implementarlos en el diseo de una forma.
Barra de Herramientas adicionales
En esta barra se encuentran herramientas que nos permiten eliminar un control del
formulario, acceder a las propiedades de un control, bloquear los controles del
formulario para que no se muevan por descuido cuando estamos diseando una forma y
tambin un icono para ejecutar la forma previamente diseada.
rea de diseo
Para acceder a esta parte de la ventana del Ambiente de Desarrollo solamente debemos dar
clic en la pestaa Diseo, esta rea nos sirve para poder agregar controles a nuestra forma.
Para colocar un control a la forma solo debemos arrastrar el control dentro de la misma,
pulsando un clic izquierdo sobre el control deseado (etiqueta, caja de texto, botn, etc) sin
soltarlo hasta que estemos posicionados en el formulario.
13
Si deseamos hacer ms grandes los controles basta con darles un clic derecho arrastrando y
cuando tengan el tamao deseado soltamos el botn del mouse.
Para poder establecer nombre, alto, ancho, posicin superior e izquierda, texto y orden de cada
uno de los controles que usamos solo debemos dar un clic en la herramienta Propiedades de la
barra de herramientas adicionales.
Editor de cdigo
Otra de las partes que se requieren para la creacin de una forma es el cdigo o conjunto de
instrucciones que la computadora entiende para hacer determinadas acciones. Accedemos a
esta rea del Ambiente de Desarrollo dando un clic en la pestaa Cdigo.
Debemos tener claro que aqu es donde programamos los eventos de los controles, subrutinas
y estructuras de control necesarias para que una forma funcione adecuadamente de acuerdo a
nuestros requerimientos.
14
Realizando un ejercicio
Ahora seguiremos paso a paso la manera de elaborar una forma de principio a fin. El ejemplo
nos permitir agregar, modificar y eliminar registros de una tabla que contiene los campos:
paciente, nombre y telfono.
1. Arrastraremos tres etiquetas, tres cajas de texto y tres botones de tal modo que el
diseo de la forma se parezca a la siguiente.
Como podemos darnos cuenta todas las etiquetas se diferencian porque tienen como texto
Label, las cajas de texto; Fields y los botones Command.
2. Ahora procederemos a modificar los textos y los nombres de nuestros controles
(etiquetas, cajas de texto y botones), para realizar esto debemos dar clic a la
herramienta propiedades que se encuentra debajo de la barra de controles.
Para colocar un texto que queremos que se muestre en una etiqueta solo debemos modificar lo
que dice en Texto, como lo muestra la siguiente imagen:
15
En el caso de la ventana anterior a la etiqueta que insertamos primero le dimos por texto
Paciente.
3. Ahora procederemos a establecer texto a las etiquetas dos y tres, respectivamente,
quitarle lo que tiene en texto a las cajas de texto y colocarles texto a los botones, de tal
modo que nuestra ventana quede como la que mostramos en la imagen.
Hasta este momento solo hemos trabajado con la opcin Texto de la ventana de
propiedades de los controles. Ahora utilizaremos la opcin Nombre que nos servir para
identificar que control desencadena un evento.
4. En la misma ventana de propiedades de los controles vamos a cambiar el Nombre de
los mismos, por default, cuando insertamos una etiqueta, el nombre que se coloca es
lblLabel0, lblLabel1, lblLabeln, cuando insertamos una caja de texto, el nombre que
tienen es txtFields0, txtFields1, txtFieldsn y los botones llevan por nombre
cmdButton0, cmdButton1, cmdButtonn.
A las etiquetas no es tan comn modificarles el nombre que traen por default, en este
ejemplo las dejaremos como estn, solo a las cajas de texto y a los botones le
cambiaremos el nombre siendo para las primeras txtPaciente, txtNombre y txtTelefono
respectivamente, en cuanto a los botones les colocaremos de nombre cmdGuardar,
cmdEliminar y cmdSalir.
16
Con esto terminamos el Tiempo de diseo de nuestra forma.
17
Programando una forma de MyBusiness POS
Windows es un sistema operativo que maneja eventos esto es que no hace nada hasta que
algo externo lo altera como un clic del Mouse, el presionar una tecla o una solicitud de la tarjeta
de red, etc, para esto dentro de las ventanas existen eventos predefinidos que se ejecutan
segn su nombre.
Para agregarle eventos a nuestra ventana es necesario seleccionar el control o la ventana a la
que deseamos programar el evento, de un clic en un rea vaca de la ventana y en la parte
superior donde dice Eventos seleccione Form_Load() este evento es el primero en ejecutarse
antes incluso de que la ventana sea visible.
Evento Load
01 Sub Form_Load()
02
03 Me.Caption = "Calculo del ndice de masa corporal"
04 txtEstatura.TabIndex = 0
04 txtPeso.TabIndex = 1
05 cmdCalcular.TabIndex = 2
06 cmdSalir.TabIndex = 3
07 cmdSalir.Cancel = True
08
09 End Sub
01 Dentro del evento Load colocamos el cdigo que necesitamos que se ejecute antes de que
la ventana sea visible por ejemplo:
03 Me.Caption = Clculo del ndice de masa corporal .
En la instruccin cambiamos la propiedad Caption de la ventana que diseamos previamente
el objeto Me se refiere a esta ventana.
18
04 TabIndex indica el orden que van a seguir los controles para tomar el foco cuando se
presiona la tecla TAB.
07 Cancel es una propiedad que tienen los botones esta propiedad indica que el cdigo que
tenga el botn se va a ejecutar cuando se presione la tecla ESCAPE.
Evento Click
Otro evento que usamos en prcticamente todos los formularios es el Button_Click. El cual se
dispara o entra en funcionamiento cuando damos un click sobre algn control que acepte el
evento clic como botones, cajas de texto, etc.
01 Sub Button_click()
02
03 If ControlEvento.Tag = "cmdCalcular" Then
04 txtIMC = _
05 Val2( txtPeso ) / ( Val2(txtEstatura) * _
06 Val2(txtEstatura) )
07 End If
08
09 If ControlEvento.Tag = "cmdSalir" Then
10 descargaForma
11 End If
12
13 If ControlEvento.Tag = "cmdAlta" Then
14 Script.RunForm "CGDL008", Me, Ambiente,, True
15 End If
16
17 End Sub
01 Dentro del evento click de un botn colocamos el cdigo que se va a ejecutar cuando
pulsemos un clic sobre el mismo.
03 ControlEvento.Tag sirve para validar que control dispar el evento click, en este caso la
condicin If verifica si el botn fue el que tiene el nombre cmdCalcular.
04 a 06 Realiza el clculo del ndice de Masa Corporal el cual se vera reflejado en la caja de
texto llamada txtIMC.
07 End If Cierra la condicional de la lnea 03.
10 descargaForma sirve para descargar el formulario activo o para cerrarlo.
14 Script.RunForm sirve para ejecutar una forma que hayamos diseado, los parmetros son:
1. Nombre de la forma: "CGDL008"
2. Objeto Padre: Me
3. Objeto Ambiente: Ambiente
4. Valores que se pasan
5. Si es modal o no, si es Modal le colocamos Trae
Evento LostFocus
El evento LostFocus se produce cuando un objeto pierde el enfoque. Un control pierde el
enfoque por la accin del usuario, por ejemplo, cuando se hace una tabulacin o un clic en otro
control.
19
01 Sub Text_LostFocus()
02
03 If ControlEvento.Tag = "txtPaciente" Then
04
05 If clEmpty(txtPaciente) = False Then
06 Dim rstPaciente
07
08 Set rstPaciente = CreaRecordSet("SELECT paciente FROM " & _
09 "pacientesgdl WHERE paciente = " & txtPaciente & "", _
10 Ambiente.Connection)
11
12 If rstPaciente.EOF Then
13 MyMessage "El paciente no esta registrado"
14 cmdAlta.SetFocus
15 End If
16 Else
17
18 MyMessage "Escribe la clave del paciente"
19 txtPaciente.SetFocus
20
21 End If
22
23 End If
24
25
26 End Sub
01 Dentro del evento LostFocus de una caja de texto colocamos el cdigo que se ejecutar
cuando una caja de texto pierda el enfoque o foco.
14 SetFocus es un mtodo que asigna el enfoque a un control, en nuestro ejemplo se le
asigna el enfoque o foco al botn llamado cmdAlta.
Evento DblClick
Este evento se dispara cuando damos doble clic sobre un control, este evento lo podremos
encontrar en el control caja de texto o textBox.
01 Text_DblClick()
02
03 Label0.caption = "Nombre"
04
05 End Sub
Este cdigo nos indica que al dar doble clic sobre la caja de texto el titulo de nuestra etiqueta
lblLabel0 cambiara a Nombre. As tambin podemos colocar las sentencias que deseemos se
realicen al dar doble clic sobre ele control.
Eventos KeyDown y KeyUp
Para tener un mayor control en las teclas pulsadas, se suelen comprobar en los eventos
KeyDown y KeyUp, la principal diferencia con el evento KeyPress es que en este caso no son
cdigos ASCII, sino cdigos de teclado.
20
KeyCode es el cdigo de la tecla, no el cdigo ASCII, aunque en la mayora de los casos
coincide, aunque no en todos.
Entre otras teclas, adems de las normales, se pueden detectar las teclas de funcin (F1, F2,
etc), las teclas de bloqueo de maysculas, bloque numrico, etc.
Debemos tener en cuenta que el evento KeyDown se produce cuando se presiona la tecla y
KeyUp cuando se suelta.
Uso de MySQL Front
Mysql es un Sistema manejador de base de datos o como su nombre en ingles indica
(DataBase Managment System). El DBMS es conocido tambin como Gestor de Base de
datos.
Su funcin es manejar los datos de acuerdo a las peticiones de los usuarios.
MySQL es un sistema de administracin de bases de datos. Una base de datos es una
coleccin estructurada de datos.
MySQL Front es una herramienta para visualizar los datos almacenados en las tablas de una
base de datos de MyBusiness POS, aqu podemos trabajar de manera directa con dichos datos
sin que MyBusiness POS intervenga, sin embargo es de vital importancia que los usuarios
comunes no hagan modificacin alguna de los datos, ya que si llegar a hacerlo, la base de
datos usada en MyBusiness POS podra perder integridad, por tal motivo, es recomendable
que solamente utilicen este Front personas que tengan conocimiento y la responsabilidad para
hacerlo.
MySQL Front se encuentra en el disco de instalacin de MyBusiness POS, lo podemos
encontrar en una carpeta comprimida en formato zip llamada MySQL Front.zip, para poder
utilizarla basta con descomprimir dicha carpeta en cualquier ubicacin de nuestro disco duro y
dar doble clic sobre el archivo ejecutable llamado mysqlfront.exe.
Al haber dado doble clic sobre el icono anteriormente mencionado aparecer la siguiente
ventana:
Procederemos ahora a crear una conexin que nos permitir ver las bases de datos de MYSQL
que se encuentran en nuestro disco duro, para tal efecto, debemos pulsar el botn New de la
ventana Connection to MySQL Host
21
En la casilla de Description podemos establecer cualquier nombre que nosotros deseemos
para identificar la conexin.
Siempre que queramos utilizar MySQL deberemos hacer login como usuarios en el servidor.
Ahora solo debemos indicar los datos de la conexin como nombre del servidor o host al que
nos conectaremos, esto es, si la base de datos se encuentra en nuestra mquina el dato que
capturaremos es localhost, si fuese la conexin remota es necesario que en el campo se ecriba
el nombre de la mquina o bien su direccion IP (Una direccin IP es un nmero que identifica
de manera lgica y jerrquicamente a una interfaz de un dispositivo (habitualmente una
computadora) dentro de una red que utilice el protocolo IP (Internet Protocol). Dnde la puede
encontrar? Puede entrar al smbolo del sistema (MS-DOS) y teclear el comando ipconfig, el
cual le desplegara las siguientes lneas:
22
El siguiente dato que debemos capturar es el nombre del servidor de base de datos, al instalar
MySQL, por defecto se crea el usuario root, sin ninguna contrasea. Este el usuario ms
importante, ya que posee total control sobre las bases de datos, por lo que lo primero que
debemos hacer es proporcionarle una contrasea(es solo recomendable para conexiones
remotas).
El puerto de comunicacin siempre ser el 3306. El ltimo dato es el nombre de la base de
datos.
Al dar aceptar nos aparecer la siguiente ventana:
Tenemos una barra de mens en los cuales podremos encontrar opciones para guardar
informacin, copiar, pegar, hacer un diagnostico de las tablas, ayuda, etc.
La segunda es la barra de herramientas con lo que podremos verificar operaciones, actualizar
datos, etc.
Del lado derecho podemos ver el nombre de la base de datos a la que nos conectamos, si
queremos ver las tablas que contiene debe dar clic sobre el signo (+). Al dar doble clic sobre
cualquiera nos aparecer la informacin que a continuacin se presenta:
Como podemos observar aparecen 5 pestaas con los encabezados de Host, DataBase,Table,
Data, Query al dar clic a cualquiera de ellas nos desplegar la informacin que le corresponde,
esto es, la pestaa Tabla como se muestra contiene el nombre de cada campo, longitud ,etc.
23
En Data encontraremos los registros almacenados y en Query podremos realizar consultas a la
base de datos (entiendase como consulta a aquella instruccin que utiliza el lenguaje de
programacin estructurado SQL) de la siguiente manera:
En la parte derecha tenemos un botn que dice Run(F9) con el cual podremos checar la
consulta que escribimos, si no tiene errores debe mostrarnos informacin como se muestra en
la parte inferior de la ventana. Esta parte es muy til ya que podremos hacer las pruebas
necesarias hasta obtener los resultados esperados.
Tipos de tablas en MySQL
1. ISAM.- es el formato de almacenaje mas antiguo, y posiblemente pronto desaparecer.
Presentaba limitaciones (los ficheros no eran transportables entre mquinas con distinta
arquitectura, no poda manejar ficheros de tablas superiores a 4 gigas). Si aun tienes tablas
tipo ISAM, cambialas a MYISAM ya!
2. MYISAM.- es el tipo de tabla por defecto en MySQL desde la versin 3.23. Optimizada
para sistemas operativos de 64 bits, permite ficheros de mayor tamao que ISAM. Adems los
datos se almacenan en un formato independiente, con lo que se pueden copiar tablas de una
mquina a otra de distinta plataforma. Posibilidad de indexar campos BLOB y TEXT
3. HEAP.- Crea tablas en memoria. Son temporales y desaparecen cuando el servidor se
cierra; a diferencia de una tabla TEMPORARY, que solo puede ser accedida por el usuario que
la crea, una tabla HEAP puede ser utilizada por diversos usuarios.
4. BDB.- Base de datos Berkeley. TST. Solo en MySQL MAX
5. INNODB.- TST, ACID, con posibilidad de commit, rollback, recuperacin de errores y
bloqueo a nivel de fila.
6. MERGE mas que un tipo de tabla es la posibilidad de dividir tablas MYISAM de gran
tamao (solo til si son verdaderamente de GRAN tamao) y hacer consultas sobre todas ellas
con mayor rapidez. Las tablas deben ser myisam e idnticas en su estructura.
Tipos de datos
Al disear nuestras tablas tenemos que especificar el tipo de datos y tamao que podr
almacenar cada campo.
Una correcta eleccin debe procurar que la tabla no se quede corta en su capacidad, que
destine un tamao apropiado a la longitud de los datos, y la mxima velocidad de ejecucin.
24
Bsicamente mysql admite dos tipos de datos: nmeros y cadenas de carcteres. Junto a estos
dos grandes grupos, se admiten otros tipos de datos especiales: formatos de fecha, etc.
datos numricos
En este tipo de campos solo pueden almacenarse nmeros, positivos o negativos, enteros o
decimales, en notacin hexadecimal, cientifica o decimal.
Los tipos numricos tipo integer admiten los atributos SIGNED y UNSIGNED indicando en el
primer caso que pueden tener valor negativo, y solo positivo en el segundo.
Tipos ms usados por MyBusiness
TINYINT es un nmero entero con rango de valores vlidos desde -128 a 127. Si se configura
como unsigned (sin signo), el rango de valores es de 0 a 255.
INT para almacenar nmeros enteros, en un rango de -2147463846 a 2147483647. Si
configuramos este dato como unsigned, el rango es 0 a 4294967295.
DOUBLE Nmero de coma flotante de precisin doble.( (m,d) representa nmeros decimales.
Podemos especificar cuantos dgitos (m) pueden utilizarse (trmino tambin conocido como
ancho de pantalla), y cuantos en la parte decimal (d). Mysql redondear el decimal para
ajustarse a la capacidad).
CHAR Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca desde 1
a 255 caracteres.
VARCHAR Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1-
255 caracteres, pero en este caso, de longitud variable. Un campo CHAR ocupar siempre el
mximo de longitud que le hallamos asignado, aunque el tamao del dato sea menor
(aadiendo espacios adicionales que sean precisos). Mientras que VARCHAR solo almacena
la longitud del dato, permitiendo que el tamao de la base de datos sea menor. Eso si, el
acceso a los datos CHAR es mas rpido que VARCHAR.
LONGTEXT hasta mximo de 4.294.967.295 caracteres
Varios
DATE para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a
9999 12 31.
DATETIME Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del 1001
a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y
59 segundos. El formato de almacenamiento es de ao-mes-dia horas:minutos:segundos
TIME almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a
838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'
YEAR almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155. El
campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el ao con
dos o cuatro dgitos.
INDICES
Un ndice (o KEY, o INDEX) es un grupo de datos que MySQL asocia con una o varias
columnas de la tabla. En este grupo de datos aparece la relacin entre el contenido y el
nmero de fila donde est ubicado.
Los ndices -como los ndices de los libros- sirven para agilizar las consultas a las tablas,
evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado.
para que sirven ?
25
Los index permiten mayor rpidez en la ejecucin de las consultas a la base de datos tipo
SELECT ... WHERE
La regla bsica es pues crear tus ndices sobre aquellas columnas que vayas a usar con una
clusula WHERE, y no crearlos con aquellas columnas que vayan a ser objeto de un SELECT:
SELECT texto from tabla_libros WHERE autor = Vazquez; En este ejemplo, la de autor es una
columna buena candidata a un indice; la de texto, no.
Otra regla bsica es que son mejores candidatas a indexar aquellas columnas que presentan
muchos valores distintos,
Tipos de indice
En algunas bases de datos existen diferencias entre KEY e INDEX. No as en MySQL donde
son sinnimos.
Un ndice que s es especial es el llamado PRIMARY KEY. Se trata de un ndice diseado para
consultas especialmente rpidas. Todos sus campos deben ser UNICOS y no admite NULL
Un indice UNIQUE es aquel que no permite almacenar dos valores iguales.
Los indices FULL TEXT permiten realizar bsquedas de palabras. Puedes crear indices
FULLTEXT sobre columnas tipo CHAR, VARCHAR o TEXT.
Haciendo una tabla en Mysql
Para empezar hay que dar clic sobre la barra de herramientas en el botn crear tabla,
enseguida aparecer lo siguiente:
En el primer campo debemos capturar una clave nica para la tabla y a continuacin su
descripcin. Es importante que los nombres que se escojan sean claros y relacionados a los
campos que se almacenarn, con el fin de que sea entendible para cualquier usuario.
Agregamos las columnas en el campo fields, colocando el nombre, tipo de dato, longitud,
indice,etc.
Para terminar damos clic sobre el botn Create.
Como comentario, en la parte inferior de la ventana aparece un cuadro en blanco con algunas
instrucciones SQL, las cuales se generan cada vez que damos clic sobre alguna tabla para ver
sus campos, o bien cuando mostramos la informacin que contiene la base de datos. Sirven
como referencia si quisiramos realizar esas operaciones de forma directa usando cdigo y no
con la ayuda de la aplicacin grfica mysqlfront.
26
Para visualizar los cambios efectuados en nuestra base de datos presionamos la tecla F5.
Algunas reglas que debemos tomar en cuenta al crear tablas son las siguientes:
Algunas reglas a recordar son las siguientes:
1.- longitud: es opcional SALVO para los campos tipo DECIMAL NUMERIC CHAR y
VARCHAR.
Por ejemplo, CREATE TABLE mi_tabla (id_field INT(4));
Como sabemos, las columnas tipo INT pueden albergar desde -2147463846 a
2147483647 (unsigned). Al fijar el rango en 4, lo limitamos desde -999 a 9999.
NOTA: MySQL guardar correctamente el dato fuera del rango especificado,
siempre que no est, adems, fuera del rango para ese tipo de columna.
Para datatypes no numricos, el rango determina el nmero fijo de carcteres
almacenados en cada caso (CHAR) o el nmero mximo permitido (p.e.
VARCHAR).
2.-decimal: mximo nmero de decimales para aquellos datatypes que admiten
decimales. Si el nmero a almacenar tiene mas, ser redondeado:
FLOAT (5,2)
=> 2.14 se almacena como 2.14
=> 32.147 se almacena como 32.15 (5 caracteres en total)
=> 232.14 se almacena como 232.1
Es decir, un nmero mximo de 5 caracteres, un nmero mximo (si caben en el
total) de 2 decimales.
El atributo BINARY puede usarse con CHAR y VARCHAR, con el nico efecto de
que en caso de bsqueda distinguir maysculas y minsculas.
3.- El atributo ZEROFILL solo puede emplearse con datos tipo numrico. El atributo
UNSIGNED solo puede emplearse con datos del tipo numrico entero.
4.- Cada columna (independientemente de su tipo) puede ser NULL o NOT NULL. Si
no especificas nada, se asume que la columna es NULL
5.- Las columnas (salvo que sean AUTO_INCREMENT) siempre tienen un valor por
defecto. Si la columna es tipo NULL el valor por defecto es justamente ese, NULL.
Si es NOT NULL, y la columna numrica, el valor por defecto es 0. Si la columna
no es tipo numrica el valor por defecto ser "" (cadena vacia). Puede establecerse
un valor por defecto propio con DEFAULT.
6.- Solo puede existir una columna AUTO_INCREMENT por tabla, que debe ser del
tipo entero, y adems NOT_NULL
7.- La columna AUTO_INCREMENT siempre ser considerada como ndice primario
(PRIMARY KEY).
27
Ejemplo de reportes con Parmetros
01Sub Main()
02 Dim condicion
03
04
05 ParamData.ParametrosRequeridos _
06 "Pacientes", _
07 "Paciente inicial", _
08 "Pacientes", _
09 "Paciente final" _
10 , _
11 , _
12 , _
13 , _
14 , True
15 Rangos Ambiente, True
16 If Cancelado Then
17 Exit Sub
18 End If
19
20 condicion = ""
21
22 If Not ParamData.Todos1 Then
23 condicion = _
24 " AND paciente >= " & ParamData.BusquedaIni & _
25 " AND paciente <= " & ParamData.BusquedaFin
26 End If
27
28 If Not ParamData.TodasLasFechas Then
29 condicion = condicion & " AND fecha >= " & _
30 fechaSQL( ParamData.FechaInicial ) & _
31 " AND fecha <= " & _
32 fechaSQL( ParamData.FechaFinal )
33 End If
34
35 iniciaDocumento
36 Reporte.SQL = "SELECT * FROM imc WHERE paciente > 0 " & condicion
37 'Reporte.SQL = "SELECT * FROM imc WHERE paciente = 1"
38 Reporte.RetrieveColumns
39 Reporte.ImprimeReporte
40
41 finDocumento
05 ParamData es un objeto que abre una ventana para la seleccin de rangos de datos, o bien
rangos de fechas. Contiene los siguientes parmetros:
1.-Nombre de la primera bsqueda, la cual fue previamente registrada en el sistema desde el
asistente de bsquedas en la pestaa Programacin (vease el apartado Editor de bsquedas).
2.-El ttulo que parecer en la ventana.
3.-nombre de la bsqueda.
4.- Titulo que aparecer en la ventana.
Los parmetros 5, 6, 7,8 son para desplegar los rangos de fechas, la palabra reservada trae
hace referencia a estos rangos.
15 Rangos Ambiente,True es un mtodo que muestra la ventana de rangos.
28
En este momento validamos que el usuario cierre la ventana y no realice ninguna bsqueda. Es
importante incluirla ya que de lo contrario marcara un error al cancelar la bsqueda.
22 ParamData.Todos1 indica si se va a utilizar el primer rango o no, si la condicin se cumple
entonces vamos a asignar el valor de los datos que el usuario haya seleccionado para tomarlos
como referencia para mostrar la informacin.
28 ParamData.TodasLasFechas Indica si se requiere el filtro de fechas o no, es decir, si
nosotros queremos ver informacin que incluya todas las fechas o si queremos utilizar un filtro
para seleccionar slo un rango. Es por ello que la condicin inicia con IF NOT
que significa si no se cumple la condicin.
35 iniciaDocumento() es un mtodo con el cual siempre iniciamos la salida de informacin en
pantalla.
El objeto Reporte solo es visible dentro de un Script del tipo reporte, el cual contiene diferentes
propiedades que nos ayudarn a darle formato a nuestro documento.
36 La primer propiedad que veremos es Reporte.SQL, a la cual se le puede asignar cualquier
consulta SQL (Lenguaje de Consulta Estructurado) que utilizaremos para generar el reporte.
38 Reporte.RetrieveColumns es un mtodo del objeto Reporte, el cual nos permite obtener la
informacin que se haya obtenido de la consulta a la base de datos (Reporte.SQL).
39 Reporte.ImprimeReporte es un mtodo del objeto Reporte que nos permite visualizar la
informacin en la pantalla.
41 FinDocumento Indica el fin para mostrar los datos en pantalla.
29
Ejemplo de grficos
01 Sub Main()
02 Dim rstIMC
03
04 Grafica.Header.Text(0) = "Comportamiento del IMC"
05
06 Set rstIMC = CreaRecordSet( _
07 "SELECT * FROM imc WHERE paciente = 1", _
08 Ambiente.Connection )
09
10 Grafica.AddSeries 6
11 Grafica.AddSeries 6
12
13 While Not rstIMC.EOF
14 Grafica.Series(0).Add _
15 rstIMC("imc"), rstIMC("imc"), vbRed
16
17 Grafica.Series(1).Add 26, "", vbYellow
18
19 rstIMC.MoveNext
20 Wend
21 Me.Grafica.Panel.BackImageLoad "d:\xenical.jpg"
22 End Sub
02 Declaramos la variable a la que se le asignara el recordset de la base de datos.
04 Esta instruccin le asigna la cadena Comportamiento del IMC al encabezado de la
ventana del grafico, asignada al objeto Grafica con la propiedad Header (encabezado).
06 Creamos el recordset para obtener la informacin que resulte de la consulta a la base de
datos. La palabra reservada set nos permite asignarle un valor a la variable rstIMC y
CreaRecordSet es la funcin que crea el recorset, esta se puede sustituir por la palabra rst.
10 En este momento definimos el tipo de grafico a utilizar, es decir podemos seleccionar entre
6 diferentes tipos preestablecidos en MyBusiness. Hacemos la asignacin cambiando el valor
numrico de la sentencia Grafica.AddSeries 6.
Valores:
0: Lnea recta en tercera dimensin
1: Barras verticales
2: Barras horizontales
3: Tringulos
4: Intersecciones con rectngulos
5: En forma de pastel
6: Lnea recta
Nota: Por cada grafico que deseemos ver en pantalla necesitamos incluir la lnea de cdigo
Grafica.AddSeries 6 con el tipo de grafico.
13 Recorremos los registros del recordset y mientras no sea fin de archivo que realice la
operacin.
14 Le agregamos a la grafica los datos del recordSet para que se muestre en pantalla, con la
sentencia Grafica.Series(0).Add rstIMC("imc"), rstIMC("imc"), vbRed que contiene los
siguientes parmetros:
30
1._El valor del grafico
2._El encabezado
3._La variable que hace referencia al color
Nota: Es muy importante que depende de los grficos que deseemos desplegar en pantalla le
asignemos un nmero consecutivo como ndice como sigue: Grafica.Series (0) y el primero
siempre iniciara en cero.
19 Nos dirigimos al siguiente registro del recordset.
21 Aqu llamamos una imagen como fondo del grfico con la propiedad Panel.BackImageLoad
del objeto grafica, como argumento solo se coloca la ruta de la ubicacin de la imagen que
pondremos en el grafico, todo entre comillas.
20 Terminamos el ciclo While con la instruccin Wend