Guia Avanzada Del Programador

30
1 MyBusiness POS Curso de Programador Avanzado Septiembre de 2006

Transcript of Guia Avanzada Del Programador

  • 1

    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 = " & _ 34 fechaSQL( ParamData.FechaInicial ) & _ 35 " AND fecha 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

  • 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 = " & _ 30 fechaSQL( ParamData.FechaInicial ) & _ 31 " AND fecha 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