capítulo i antecedentes

Anuncio
Universidad
Tecnologica de
Queretaro
Digitally signed by Universidad Tecnologica de
Queretaro
DN: cn=Universidad Tecnologica de Queretaro,
c=MX, o=Universidad Tecnologica de Queretaro,
ou=UTEQ, [email protected]
Date: 2007.08.06 14:44:00 -06'00'
UNIVERSIDAD TECNOLÓGICA DE QUERÉTARO
Voluntad ● Conocimiento ● Servicio
BASE DE DATOS
INDUCCIÓN TEMPLE Y MANTENIMIENTO
Reporte de Estadía para obtener el
Título de Técnico Superior Universitario
en Electrónica y Automatización
RODOLFO CASILLAS VILLA
Santiago de Querétaro, Qro.
Agosto de 2006
2
UNIVERSIDAD TECNOLÓGICA DE QUERÉTARO
Voluntad ● Conocimiento ● Servicio
BASE DE DATOS
INDUCCIÓN TEMPLE Y MANTENIMIENTO
Reporte de Estadía para obtener el
Título de Técnico Superior Universitario
en Electrónica y Automatización
ASESOR DE LA EMPRESA
ING. ELOY E. DURÁN RODRÍGUEZ
ASESOR DE LA ESCUELA
ING. DAVID VÁZQUEZ RAZO
ALUMNO
RODOLFO CASILLAS VILLA
Santiago de Querétaro, Qro.
Agosto de 2006
3
AGRADECIMIENTOS
En primer lugar me gustaría agradecer a mis padres, Luz Francisca Villa Pérez y Rodolfo
Casillas Suárez, por el apoyo que siempre he tenido de ellos y los valores que me
inculcaron, los cuales me han servido para alcanzar metas que son difíciles de alcanzar;
pero, no imposibles. Y a toda mi familia que me apoyaron para que yo siguiera estudiando
aunque tuviéramos que estar separados, ya que toda mi familia se encuentra en Hermosillo,
Sonora.
Les agradezco a todos los maestros de la carrera de Electrónica y Automatización por todos
los conocimientos que he obtenido a través de ellos, ya que muchas veces contaban sus
experiencias laborales, sus consejos y preocupaciones, así como la que me brindaron. Le
agradezco a mi asesor de escuela el Ing. David Vázquez Razo por ayudarme en mi estadía.
A mi tutor Ubaldo Flora, le agradezco su apoyo en todo momento y a mis compañeros del
grupo E-39, ya que mantuvimos una amistad y el grupo nunca se desintegro, siempre fue el
mismo.
Agradezco al Ing. Eloy E. Durán Rodríguez por haberme permitido realizar la estadía en su
empresa ITM y el apoyo que me proporcionó en el transcurso de ésta.
4
ÍNDICE
AGRADECIMIENTOS
ÍNDICE
INTRODUCCIÓN
CAPÍTULO I. ANTECEDENTES GENERALES DE LA EMPRESA
Pág.
1.1 Antecedentes de la empresa .......................................................11
1.2 Misión .........................................................................................12
1.3 Visión..........................................................................................12
1.4 Política de calidad.......................................................................12
1.5 Organización...............................................................................13
1.6 Campo de desarrollo nacional ...................................................14
1.7 Proceso general de producción ...................................................15
CAPÍTULO II. EL PROYECTO
2.1 Antecedentes...............................................................................17
2.2 Definición del proyecto .............................................................17
2.3 Objetivo ......................................................................................17
2.4 Alcance .......................................................................................18
5
2.5 Plan de trabajo ...........................................................................18
2.5.1 Separación de actividades.........................................18
2.5.2 Secuencia de actividades ..........................................19
2.5.3 Asignación de tiempos .............................................19
2.5.4 Gráfica de Gantt ......................................................20
CAPÍTULO III. MARCO TEÓRICO
3.1 Base de datos ..............................................................................22
3.1.1 Origen de la base de datos ...........................................22
3.1.2 Ventajas de la base de datos en la organización. .........23
3.2 Visual Basic................................................................................24
3.2.1 Métodos directos de base de datos...............................25
3.2.2 Actualización de la base de datos ................................27
3.2.3 Cadenas de conexión...................................................27
CAPÍTULO IV. DESARROLLO DEL PROYECTO
4.1 Adquisición de datos ..................................................................30
4.1.1 Archivos ......................................................................30
4.2 Tablas, registros y campos .........................................................31
4.2.1 Índices..........................................................................32
4.2.2 Procedimientos almacenados.......................................33
4.3 Vistas ..........................................................................................33
4.3.1 Triggers........................................................................34
4.3.2 Diagramas de bases de datos .......................................34
6
4.3.3 Usuarios .......................................................................35
4.4 Programación..................................................................35
4.5 Ventanas del programa ...............................................................38
CAPÍTULO V. ACTIVIDADES DIVERSAS
5.1 Introducción................................................................................50
5.2 Actividades .................................................................................50
CAPÍTULO VI. EVALUACIÓN ECONÓMICA Y RESULTADOS OBTENIDOS
6.1 Evaluación económica................................................................52
6.2 Resultados obtenidos ..................................................................52
CONCLUSIONES
Conclusiones.....................................................................................54
BIBLIOGRAFÍA
Bibliografía.......................................................................................56
GLOSARIO
Glosario ............................................................................................58
ANEXO
Anexo código fuente.........................................................................60
7
INTRODUCCIÓN
Una base de datos es un sistema de almacenamiento de información. Esta definición es
válida, sin embargo no se ajusta a la realidad, una base de datos es algo más que el "lugar"
donde se almacenan nuestros datos. En ellas, almacenamos no sólo información, sino
también una serie de objetos, procedimientos y reglas, que garantizan la integridad y la
fiabilidad de los datos, para cubrir las necesidades requeridas por una empresa.
Es muy importante y obligatorio, que en el momento de diseñar una base de datos, se
estudie de qué modo se va a obtener el máximo rendimiento a la hora de procesar la
información. Para ello, contamos con una serie de estructuras y herramientas que garantizan
la velocidad de acceso a datos, como por ejemplo los índices.
En SQL SERVER, se almacena en la propia base de datos los credenciales de usuarios,
donde se gestionan los permisos de acceso. Para limitar el uso que pueda hacer un
determinado usuario sobre nuestros datos.
El propósito de crear una base de datos es desarrollar ésta utilizando Microsoft Visual
Studio 2005, Microsoft SQL Server 2000 como motor de bases de datos.
8
En el capítulo I, se mencionan los antecedentes de la empresa, donde se relata como surgió
la empresa y en que se especializa, que en este caso es en elaborar inductores.
El capítulo II, muestra como surge la necesidad del proyecto, el plan de trabajo y la
separación de actividades que se realizó para poder obtener la asignación de tiempos, y así
elaborar la gráfica de Gantt.
En el capítulo III, el marco teórico, se explican brevemente los conceptos teórico-práctico
que se utilizaron en el proyecto como referencia, que ayudaron en la realización de la base
de datos.
El capítulo IV, muestra el desarrollo del proyecto mostrando a detalle la base de datos.
En el capítulo V, trata de las actividades diversas que se realizaron en el trayecto de estadía
que no necesariamente tienen que estar relacionadas con el proyecto. Y por último el
capítulo IV muestra los resultados del proyecto, en el cual se menciona como funciona la
base de datos.
9
CAPÍTULO I
ANTECEDENTES
GENERALES DE LA
EMPRESA
10
1.1 Antecedentes de la empresa
La empresa lleva por nombre I.T.M. S. A. de C.V. (Inducción Temple y
Mantenimiento). Su giro principal es la maquila y temple por inducción y la
fabricación de herramientas para equipos de inducción. Se encuentra ubicada en San
José el Alto, Querétaro, Qro. Surgió en octubre de 1997. Las personas directamente
involucradas con la compañía son el Ing. Eloy Durán Rodríguez y el Ing. Rubén
Escobedo Amescua.
Nace debido a que en aquellos tiempos no existían muchas empresas que se dedicaran
al mismo sector y las pocas que había eran de origen extranjero. Una de las
principales ventajas que I.T.M. tiene contra su competencia es el precio, calidad y el
trato que tiene con sus clientes.
Su proceso primordial estriba en el calentamiento por inducción, ya que es una
tecnología que tuvo sus comienzos hace ya muchos años. En nuestro país esta
tecnología es poco conocida y se utiliza en forma muy limitada debido a su poca
promoción, sin embargo, haciendo un comparativo entre los distintos métodos de
calentamiento se puede apreciar que el calentamiento por inducción tiene algunas
ventajas que lo hacen muy competitivo.
11
1.2 Misión
“Reparar y modernizar equipos de inducción, fabricar herramental y manipular
tratamiento térmico que asegure la satisfacción de nuestros clientes y la superación de
la competencia.”
1.3 Visión
“Ser una organización netamente nacional capaz de suministrar productos y servicios
de calidad de clase mundial a precios justos para superar las expectativas de nuestros
clientes, con el objetivo de que siempre seamos su primera opción.”
1.4 Política de Calidad
“Ser la primera compañía cien por ciento mexicana, incursionando en el campo del
calentamiento por inducción, con experiencia, excelencia en el servicio, precios y
calidad de clase mundial.”
12
1.5 Organización
La empresa está constituida por siete personas.
-
Gerente general: Encargado de procesos administrativos como venta,
compras, etc.
-
Gerente de operación: Encargado de supervisar todas las operaciones
productivas como maquinados, soldadura, maquila, además establece
procesos, ingeniería, etc.
-
Técnico: programación de equipos, elaboración de tableros.
-
Jefe de taller: responsable de facilitar la operación del taller mediante el
requerimiento de herramientas, materiales y la asignación de tareas.
-
Mecánico: opera las diferentes maquinas, herramientas, etc. para la
fabricación de los diferentes componentes requeridos en la manufactura
de los diferentes productos que se elaboran.
-
Ayudantes: son auxiliares que facilitan las labores del jefe de taller y el
mecánico.
El organigrama de la empresa se muestra a continuación en la figura 1.1
13
Inducción Temple y
Mantenimiento S.A. de C.V.
Gerente de operación
Técnico
Gerente general
Administradora
Jefe de taller
Mecánico
Ayudante general
Ayudante general
Figura 1.1 Organigrama de I.T.M.
1.6 Campo de desarrollo nacional o internacional
El campo de la empresa es principalmente la industria automotriz nacional y algunas
compañías extranjeras del mismo ramo. Con respecto al mercado nacional lo integran
compañías como DELPHI, CARDANES, FORJAS SPICER, Dana, TRW FOMASA,
PRINVER, REMY Alternadores, RAIMSA, etc. En cuanto a compañías extranjeras
14
con relación comercial tienen a DELPHI y varias compañías INTEGRANTEL del
grupo INDUCTOHEAT.
1.7 Proceso general de producción
Los servicios que ofrece I.T.M. son:
-
Fabricación de inductores y reparación de herramental para calentamiento por
inducción.
-
Reparación y modernización del equipo de inducción.
-
Compra, venta y reacondicionamiento de equipo de inducción usado.
-
Maquila de temple por inducción.
-
Desarrollo de proceso para tratamiento térmico por inducción.
-
Entre otros.
15
CAPÍTULO II
EL PROYECTO
16
2.1 Antecedentes
El proyecto (base de datos) nace porque desde que la empresa inicio actividades se ha
llevado un sistema de registro de administración no muy eficaz y esto influye de
manera ineficiente al momento de negociar con los clientes. Algunos aspectos
importantes que se desconocen son: como se lleva a cabo el proceso de fabricación o
reparación, la negociación con el cliente y su resultado poco difuso y la falta de un
buen control de tiempo, lo que genera algunas perdidas.
2.2 Definición del proyecto
La base de datos consiste en elaborar un formato en archivo electrónico donde se
registren los datos del cliente, el trabajo que se le está realizando, los tiempos de
maquinado, el historial del producto, lista de materiales, costos e imágenes del
producto; así como, transporte (traslados del equipo del cliente al taller y del taller al
cliente).
2.3 Objetivo
El proyecto ayudara a:
-
Facilitar la cotización
-
Facilitar el control de garantía
-
Estimar tiempos de entrega
17
2.4 Alcance
La importancia de una buena base de datos consiste en poder tener la información de
todos los productos o datos, para tener acceso en el momento que sean requeridos por
alguien, pudiendo agregar imágenes fotográficas de las piezas o cualquier cosa que
sea necesaria.
Esto cambiará muchas cosas de la empresa, ya que se podrá apreciar el tiempo que
tarda en hacer las cosas y poder mejorar muchas actividades. Para que todo salga
mejor es necesario tener una buena administración en lo que la empresa produce y lo
que vende.
2.5 Plan de trabajo
A continuación se detallarán las diversas actividades a través de las cuales se realizará
el proyecto, asignación de tiempos y gráfica de Gantt.
2.5.1 Separación de actividades
1. Obtener los datos necesarios para la base de datos.
2. Elaborar el programa con un fácil manejo.
3. Plantear el desarrollo del proyecto.
4. Empezar la programación.
5. Almacenar los datos que tienen desde el año 2000.
18
6. Pruebas de programación.
7. Aprobación.
2.5.2 Secuencia de actividades
1. Desarrollo de ideas para el proyecto.
2. Investigación de los productos que se almacenan.
3. Los datos requeridos por las empresas.
4. Elaboración del formato para la colocación de los datos.
5. Empezar la programación.
6. Almacenar los datos que sean requeridos
7. Probar el programa.
8. Aprobación.
2.5.3 Asignación de tiempos
1. Desarrollo de ideas para el proyecto.
2 días
2. Investigación de los productos que se almacenan.
5 días
3. Los datos requeridos por las empresas.
2 días
4. Elaboración del formato para la colocación de los datos.
1 día
5. Empezar la programación.
40 días
6. Almacenar los datos que sean requeridos
10 días
7. Probar el programa.
1 día
8. Aprobación.
2 días
19
2.5.4 Gráfica de Gantt
La siguiente gráfica de Gantt nos muestra las actividades contra tiempos programados
que ayudaran al logro del proyecto, como se muestra a continuación en la figura 2.1
8-11 Mayo 12-18 Mayo 19-22 Mayo 23 Mayo 24Mayo-18Julio 19Julio-2Agosto 3 Agosto 5Agosto
1
2
3
4
5
6
7
8
Figura 2.1 Gráfica de Gantt
20
CAPÍTULO III
MARCO TEÓRICO
21
3.1 Base de datos
Definición de base de datos.- Conjunto de información almacenada en memoria
auxiliar que permite acceso directo y un conjunto de programas que manipulan esos
datos.
Base de datos es un conjunto exhaustivo no redundante de datos estructurados
organizados independientemente de su utilización y su implementación en máquina
accesibles en tiempo real y compatibles con usuarios concurrentes con necesidad de
información diferente y no predicable en tiempo.
3.1.1 Origen de la base de datos
La historia de las bases de datos surge desde mediados de los años sesenta, en 1970
Codd propuso el modelo relacional; este modelo es el que ha marcado la línea de
investigación por muchos años, ahora se encuentran los modelos orientados a objetos.
22
3.1.2 Ventajas del uso de la base de datos en la organización
1. Independencia de datos y tratamiento.
-
Cambio en datos no implica cambio en programas y viceversa (menor
coste de mantenimiento).
2. Coherencia de resultados.
-
Reduce redundancia.
-
Acciones lógicamente únicas.
-
Se evita inconsistencia.
3. Mejora en la disponibilidad de datos.
-
No hay dueño de datos (no igual a ser públicos).
-
Ni aplicaciones ni usuarios.
-
Guardamos descripción (idea de catálogos).
4. Cumplimiento de ciertas normas.
-
Restricciones de seguridad.
-
Accesos (usuarios a datos).
-
Operaciones (operaciones sobre datos).
23
3.2 Visual Basic
El fundador y CEO de Microsoft, Bill Gates, fue el primero en articular la visión del
concepto de «aplicaciones personalizables» en su artículo «Beyond Macro
Processing» («más allá del procesamiento de macros»), publicado hace ya más de diez
años en la revista Byte. En él, Gates afirmaba estar convencido de la necesidad de
contar con un entorno sofisticado que pudiera compartirse e incluirse en el software de
aplicaciones productivas. Si, según pensaba, los programadores pudieran contar con
herramientas de desarrollo integradas directamente en una aplicación, podrían
optimizar sus conocimientos, llevar los paquetes de aplicaciones «más allá del
procesamiento de macros» y crear potentes soluciones a partir de la capacidad
funcional de las aplicaciones existentes.
La programación visual evoluciona al surgir la pregunta de por qué se persiste en
comunicarse con las computadoras usando lenguajes de programación textual, tan solo
si pudiéramos ser más productivos y el campo de las computadoras estuviese más
accesible a una gran cantidad de personas, simplemente dibujaríamos las imágenes que
nos vienen a la mente cuando consideramos soluciones a algún problema en particular.
Visual BASIC es un producto hecho por Microsoft que permite al usuario crear
fácilmente programas (para Windows) poderosos y completos, por ejemplo,
programas para bases de datos, controles “Active X”, y programas cliente/servidor
para redes.
24
En Visual Studio 2003, los desarrolladores tenían un determinado número de
componentes de acceso a datos. Sin embargo, combinar estos componentes era a
menudo tedioso y no fomentaba una buena reutilización de los objetos. En Visual
Studio 2005, se ha ampliado el acceso a datos con tipo mediante un nuevo objeto
llamado TableAdapter. Con los TableAdapters, interactuar con los objetos de datos en
el equipo cliente y enviar actualizaciones a una base de datos, resulta mucho más
sencillo. Los TableAdapters encapsulan los objetos necesarios para comunicarse con
una base de datos y proporcionar métodos para realizar el acceso a los datos con tipos
seguros.
3.2.1 Métodos directos de base de datos
Además de los métodos de actualización de DataTable que ofrecen los TableAdapters,
tiene también la posibilidad de generar métodos que escriban directamente en la base
de datos, sin necesidad de modificar una DataTable y enviarla a la base de datos. Esta
opción se controla mediante la propiedad GenerateDBDirectMethods del objeto
TableAdapter del diseñador de Dataset. Los métodos DBDirect que se generan son
Insert, Delete y una sobrecarga de Update que admite un parámetro de tipo seguro
para cada campo de la DataTable. A continuación se muestra la tabla de referencia
para TableAdaprter en la figura 4.1
25
Referencia rápida de las propiedades de TableAdapter
.
Generación de código
Base Class
Clase de la que heredará el TableAdapter. Es importante que
los TableAdapters hereden de
System.Component.ComponentModel para que se puedan
arrastrar al Form Designer.
ConnectionModifier
Visibilidad externa del objeto de conexión que utiliza el
TableAdapter
Modifier
Visibilidad externa del TableAdapter
Nombre
Nombre del TableAdapter.
.
Datos
Connection
Información utilizada para generar el objeto de conexión de
la conexión de la base de datos. Aquí es donde se establece
la cadena de conexión.
GenerateDBDirectMethods
Propiedad booleana que indica si se deben generar métodos
que permitan enviar comandos directamente a la base de
datos, sin utilizar las DataTables.
InsertCommand, SelectCommand,
Configuración para los objetos System.Data.DbCommand
UpdateCommand,
subyacentes que se utilizan para obtener los datos y enviar
DeleteCommand
los cambios a la base de datos.
CommandText
Texto del comando que se ejecutará en la base de datos.
Según el tipo de comando, este texto puede ser una
instrucción SQL, un nombre de procedimiento almacenado o
un nombre de función.
CommandType
Tipo de comando que representa el texto del comando. Esta
propiedad puede ser Text, Stored Procedure o TableDirect.
Parámetros
Colección de parámetros que debe utilizarse al llamar al
comando.
Figura 4.1 TableAdapter
26
3.2.2 Actualización de la base de datos
La manera más habitual de actualizar una base de datos es enviar los cambios que
contienen uno o varios objetos DataTable a la base de datos. TableAdapters
proporciona varias sobrecargas del método Update para facilitar esta tarea. Cada una
de estas sobrecargas reenvía el parámetro pasado al método Update del DataAdapter
subyacente.
3.2.3 Cadenas de conexión
Visual Studio 2005 presenta como novedad los valores de configuración con tipo a los
que se puede obtener acceso mediante programación. Los TableAdapters aprovechan
esta característica para ofrecer las cadenas de conexión almacenadas en el archivo
app.config de la aplicación. Si se utiliza una cadena de conexión almacenada como
una configuración con tipo, puede cambiar la cadena de conexión del archivo
app.config y todos los TableAdapters de la aplicación se conectarán a la base de datos
utilizando la nueva cadena de conexión.
El uso de valores de configuración con tipo presenta la ventaja adicional de
proporcionar valores predeterminados si no se puede encontrar el valor de
configuración en el archivo app.configura.
27
En vez de generar una excepción, la clase de valores de configuración generada
devuelve el valor que se estableció durante la compilación. Para TableAdapters, se
utilizará la cadena de conexión utilizada para desarrollar la aplicación cuando no se
encuentre ningún otro valor para la cadena de conexión.
Los TableAdapters facilitan en gran medida el acceso a los proveedores de bases de
datos y ofrecen una manera con tipos seguros de ejecutar comandos en la base de
datos. Gracias a las clases parciales y a la herencia, es posible ampliarlos para que
lleven a cabo prácticamente cualquier tarea que sea necesaria. En este artículo, hemos
visto de manera general las características de los TableAdapters y cómo interactúan
con los otros elementos del proyecto. Con estas características puede aprovechar la
funcionalidad de TableAdapter para crear rápidamente objetos de acceso a base de
datos con grandes posibilidades de reutilización.
28
CAPÍTULO IV
DESARROLLO DEL
PROYECTO
29
4.1 Adquisición de datos
Se comenzó a desarrollar el proyecto basándose en crear una base de datos, la cual
pueda tener todo lo necesario para que el usuario pueda manipularlo con facilidad.
En cualquier aplicación de software (o al menos en su mayoría), es requisito
imprescindible el almacenamiento de información para posteriormente ser mostrada,
manipulada o eliminada. Para poder comenzar a trabajar con las bases de datos, es
necesario conocer primero una serie de conceptos que nos ayude a entender como
funcionan.
4.1.1 Archivos
En la creación de la base de datos, el diseñador puede nombrarla como desee
especificar su lugar de destino. El propio SQL SERVER, creará la estructura lógica
con los archivos necesarios. Estos archivos serán el archivo principal de datos, y el
archivo de registros.
Si por ejemplo, se crea una base de datos con el nombre "Empresa", SQL SERVER,
ésta creará dos archivos con los siguientes nombres y extensiones:
-
Empresa_Data.MDF (Archivo principal de datos).
-
Empresa_Log.LDF
(Archivo de registros).
30
Por lo tanto la base de datos queda almacenada en estos dos archivos, pudiendo elegir
el destino de ambos. Es frecuente encontrarse, con que estos dos archivos se
encuentran en unidades de almacenamiento distintas. Tanto por seguridad, como por
rendimiento, de modo que si falla una de las unidades no se pierdan todos los archivos.
4.2 Tablas, registros y campos.
Las bases de datos están formadas por bloques de información básicos, estos bloques
reciben el nombre de tablas, lo que antiguamente se denominaban ficheros o archivos.
Una tabla, es un conjunto de información con características comunes. Es decir,
almacena información sobre un concepto en común. Por ejemplo en la base de datos
de una empresa, existirá una tabla que guarde información de los inductores, otra que
almacene los datos de los socios, etc., estas tablas, están compuestas de registros. Un
registro es cada uno de los elementos de información de la tabla. En el ejemplo de la
base de datos de la empresa, un registro es cada uno de los socios almacenados en la
tabla socios.
A su vez, cada registro está formado por unidades fundamentales denominadas
campos. Un campo es la unidad de información que interesa almacenar para cada
31
registro. En nuestro ejemplo, los registros estarían formados por los siguientes
campos, nombre de socio, apellidos, número de socio, etc.
4.2.1 Índices
Es fácil encontrar bases de datos con tablas cuyo tamaño aumenta con facilidad,
pudiendo contener millones de registros. En estos casos el acceso a determinada
información puede ser lento y costoso. Habrá operaciones de consulta que obliguen a
recorrer la tabla entera, desde su primer registro hasta el último, esto repercute
directamente en la aplicación, convirtiéndola en una aplicación lenta y pesada. De ahí
la importancia del diseño de la base de datos.
Para acelerar el acceso a la información se cuenta con los índices. Un índice almacena
una serie de claves que permite al servidor acelerar sus consultas. El índice no sólo
sirve para aumentar la velocidad, sirve además para fijar un orden en los registros,
tener registros únicos, etc., de modo que cuando se modifica el contenido de una tabla
que afecta algún índice, SQL SERVER debe modificar los datos de la tabla y los
índices que afectan a la misma.
32
4.2.2 Procedimientos almacenados.
Un servidor de base de datos no sólo puede manipular información de sus tablas, sino
que tiene la capacidad de interpretar código en un lenguaje SQL para la programación
de una serie de funciones u operaciones. Este código SQL se puede encapsular en un
procedimiento o varios y se almacena en la propia base de datos. Por lo tanto podemos
escribir procedimientos en SQL para realizar las tareas deseadas sobre nuestra base de
datos y almacenarlos, para más adelante con una sencilla llamada se ejecuten las
instrucciones.
Estos procedimientos reciben el nombre de procedimientos almacenados y se pueden
encontrar como Stored procedures, o también se les suele denominar simplemente
como SP.
4.3 Vistas
Trabajando con una base de datos, nos encontramos con tareas habituales, que se
repiten constantemente. De este modo es muy frecuente realizar peticiones de datos
muy similares que requieres consultas SQL semejantes. Gracias a las vistas podemos
crear unas bases de datos con consultas para uso habitual.
33
El modo de trabajo es relativamente sencillo, se trata de unas tablas especiales donde
sus datos provienen de una o más tablas en función de la consulta SQL creada. Por
ejemplo, se puede crear una vista para que de manera sencilla, mediante un número de
socio devuelva toda la información requerida (alquileres pendientes, alquileres
realizados, etc.)
4.3.1 Triggers
Un trigger es un suceso que se dispara cuando se provoca un determinado evento. Es
habitual vincular un trigger a un procedimiento almacenado, de modo que cuando se
provoque el trigger, se ejecute el procedimiento almacenado.
4.3.2 Diagramas de bases de datos
Una de las herramientas que sirven de ayuda al diseñador de bases de datos es el
diagrama de bases de datos.
Se trata de una herramienta gráfica donde podemos situar tablas y establecer las
relaciones existentes entre ellas. De este modo se puede tener una vista de la estructura
genérica de la base de datos.
34
4.3.3 Usuarios
En las bases de datos se pueden añadir tantos usuarios como sea necesario y otorgarles
los permisos correspondientes. De este modo, podemos limitarnos a un usuario para
que sólo tenga acceso a determinadas tablas, y fijar las operaciones que puede realizar
sobre las mismas.
SQL SERVER crea siempre un usuario por defecto; se trata del usuario dbo (database
owner) que es el propietario o creador de la base de datos.
4.4 Programación
En SQL SERVER se creó la base de datos y en la tabla 4. 1 se muestran los detalles de
la misma. Aquí se detallan los datos principales de la base de datos, ya que se
describen los elementos utilizados, para la realización del mismo. El nombre del
campo, por ejemplo, en el programa vendría siendo una etiqueta llamada empresa, en
el tipo de datos por ejemplo, texto; lo que va a llevar ese espacio será todo texto, y el
número de caracteres indica cuantas letras en este caso podría llevar.
35
Nombre del campo
Tipo de datos
Número de caracteres
Empresa
Texto
15
CódigoITM
Texto
10
CodigoInd
Texto
30
FechaReg
Fecha/Hora
Fecha corta
Detalles
Texto
255
ListaMate
Texto
255
TiempoMaqui
Texto
255
Costos
Texto
255
Cotización
Texto
255
Observaci
Texto
255
Historial
Texto
100
Calidad
Número
Entero
Tabla 4.1 Detalles
Se especificó el campo “código de ITM” como la clave principal de la base de datos
(la clave principal es el único registro que no puede repetirse y el cual no puede quedar
en blanco), ya varias funciones de la programación realizada dependen de ella.
36
En la clave principal se especifica el tipo de producto registrado, por ejemplo:
ITMN###
La clave principal debe llevar las letras:
ITM seguidas por la letra N que
significa que ese inductor es nuevo y #
son los números sin que se repitan.
ITMR###
La letra R significa que se le tendrá que
realizar alguna reparación.
Así, con estos datos, la empresa registra sus productos y la clave principal es una de
las herramientas más importantes para la realización de la base de datos.
37
4.5 Ventanas del programa
Ventana principal de la base de datos.
Figura 4.2 Ventana principal
Esta ventana es la principal, donde se puede apreciar una lista formada con un ListBox
donde aparecen todos los clientes registrados en la empresa. En la parte inferior
izquierda se aprecia un Label donde aparece la hora enlazada con el reloj de la
computadora.
38
En la parte derecha se aprecian 2 opciones y un botón; en la opción “Ver todos los
registros” aparece la ventana de datos que se muestra en la figura 4.5, en la cual se
puede modificar, agregar o eliminar un registro.
En la opción “Buscar registro” se enlaza a la ventana detalles mostrada en la figura 4.3
y se ejecuta el código en el botón buscar de la ventana detalles mostrada en la figura
4.3.
El botón “opciones avanzadas” abre un panel donde se muestran dos opciones más,
que son “Exportar e Importar” donde abren una ventana adicional donde se van a
manejar la entrada y la salida de datos del programa, esto es por sí alguna vez el
usuario prefiere cambiar de computadora, y pueda llevarse todos los registros en la
base de datos ya capturados en el programa actual.
La otra opción te permite cambiar el password que es necesario para poder ejecutar el
código del botón “Exportar e Importar”. De regreso al ListBox, cuando se le da doble
click a una empresa en la lista, se abre la ventana de la figura 4.3 donde aparecen
todos los detalles incluyendo una imagen del inductor registrado si es que la hay, la
ventana detalles se muestra a continuación.
39
Figura 4.3 Detalles
Aquí se muestran los detalles de la empresa, como se puede ver, lo primero que se
aprecia es el nombre de la empresa, código ITM. Aquí se puede observar que el
ejemplo de la figura 4.3 ITMR001 es un registro de un inductor reparado, porque en
su código se le agregó la letra R de reparación. En el código de inductor, se pone el
número de serie del inductor, pero si no cuentan con uno, no es necesario ponérselo.
En la lista de inductores podemos ver un ListBox con todos los registros de inductores
hechos por la empresa I.T.M. donde se puede seleccionar uno para ver todos sus
detalles, así como se ve en la figura 4.3, el botón “Volver” nos regresa a la ventana
principal de la figura 4.2.
40
En la parte donde se encuentra el logotipo de la empresa I.T.M. Inducción, Temple y
Mantenimiento se encuentra una etiqueta que dice “Ver opciones” ésta muestra las
opciones que se encuentran en la figura 4.4.
Figura 4.4 Opciones de la ventana detalles
El botón “Agregar imagen”
importa a los archivos del programa una imagen
guardándola con el nombre del código de ITM para que cuando se navegue en los
inductores registrados de la empresa, pueda desplegarse en el PictureBox que se
encuentra en la parte superior derecha de la figura 4.3.
El botón “Eliminar imagen” busca la imagen con el nombre de código de ITM para
eliminarla permanentemente de la computadora.
El botón “Modificar datos” enlaza la ventana de datos mostrada en la figura 4.5, para
poder modificar los datos o eliminar el registro.
41
El botón “Exportar” agrega los datos a una hoja de reporte creada en Visual Studio
2005 para poder exportarlos a un archivo de Acrobat Reader (.pdf) o a una hoja de
cálculo en Microsoft Excel (.xml). fig. 4.8.
El botón “Buscar inductor” navega entre los registros de la base de datos para
encontrar un registro con el código de I.T.M.
Los botones “<<” y “>>” buscan en los archivos del programa las imágenes que
llevan por nombre el código de ITM del inductor seleccionado, cada inductor tiene un
rango de 10 imágenes por almacenar.
A continuación se muestra la segunda ventana en la figura 4.5
42
Figura 4.5 Base de datos
En la segunda ventana (Figura 4.5) se encuentra la base de datos en la cual se pueden
eliminar, modificar o agregarse nuevos registros. Con la ayuda de las herramientas que
se muestran en la figura 4.6 en la cual se puede ver cuantos registros se llevan en ese
momento.
Figura 4.6 Barra de herramientas
En la figura 4.6 la herramienta + sirve para agregar nuevos registros, la herramienta X
elimina los registros que no sean necesarios o que ya no se necesiten, y el diskette
refresca la base de datos para guardar todos los cambios que se hayan realizado en los
registros, las flechas sirven para navegar manualmente en los registros de la base de
datos, el TextBox que dice “1 of 10” indica el número de registro en el que se
encuentra y cuantos son en total.
43
Figura 4.7 Opciones de base de datos
En la figura 4.7 se muestran las siguientes opciones:
La figura con el cuadro de la imagen crea una vista preliminar de la imagen asignada
al inductor y la despliega en otra ventana.
El label donde dice “No hay imagen asignada a este registro” indica si hay o no una
imagen con el nombre del código de I.T.M. en los archivos del programa.
El botón “Agregar” importa a los archivos del programa una imagen guardándola con
el nombre del código de ITM para que cuándo se navegue en los inductores
registrados de la empresa, pueda desplegarse en el PictureBox que se encuentra en la
parte superior derecha de la figura 4.3.
El botón “Eliminar” busca la imagen con el nombre de código de ITM para eliminarla
permanentemente de la computadora.
44
El botón “Buscar” navega entre los registros de la base de datos para encontrar un
registro especificado con el código de I.T.M.
El botón “Detalles” regresa a la ventana de la figura 4.3.
En la figura 4.4 cuando se ejecuta la opción “exportar” aparece la ventana donde se
tiene que capturar los datos pedidos figura 4.8 y figura 4.9 algunos datos aparecen
automáticamente.
Figura 4.8 Datos del reporte 1
45
Figura 4.9 Datos del reporte 2
Algunos datos son capturados por el usuario, cada uno esta conectando a su propia
columna en una tabla de base de datos, los cuales, al presionar el botón “Aceptar” son
plasmados en la hoja de reporte que proporciona Visual Studio 2005 mostrado a
continuación en la figura 4.9.1
46
Figura 4.9.1 Estructura del reporte
Cada dato mencionado anteriormente, es almacenado en los textbox con la inscripción
“=First(Fields!cliente2.Value)”. Cada dato capturado se almacena de la misma manera
para cada campo quedando, en tiempo de ejecución, como se muestra en la figura
4.9.2
47
Figura 4.9.2 Vista preliminar del reporte
En la figura 4.9.2 se aprecia una vista preliminar de lo que se va a exportar al Acrobat
Reader o a Microsoft Excel.
48
CAPÍTULO V
ACTIVIDADES
DIVERSAS
49
5.1 Introducción
En la empresa I.T.M. hay infinidad de actividades que se realizan diariamente. Se
mencionarán algunas actividades realizadas, las cuales ayudan a obtener experiencia
necesaria para poder desarrollarse en el campo laboral.
5.2 Actividades
Medir la dureza de los materiales en un durómetro, el cual tiene un indicador
analógico que registra la dureza del material en unidades; ayudar a descargar material
que llegaba a la empresa; ver como trabajaban los inductores, etc.
Lo más importante de todo fue: aprender como se realiza el maquinado de metales
por medio de la fresadora, el torno; como funciona la máquina de inducción; como
fabrican las bobinas; revisar el selector de velocidades del torno, ya que éste no
servia. Ayudar en la reparación de algunos inductores haciendo una corrección de
fuga, eso fue por medio de soldadura de plata.
50
CAPÍTULO VI
EVALUACIÓN ECONÓMICA
Y RESULTADOS OBTENIDOS
51
6.1 Evaluación económica.
En la elaboración de la base de datos, no se requirió comprar material, ya que todo se
concentraba en la computadora, donde se tenía que estar haciendo el programa, por
eso no hubo ningún gasto.
6.2 Resultados obtenidos
La base de datos, realizó todo lo requerido por la empresa ITM, con esto se pudieron
almacenar los datos de todos los clientes actuales, como por ejemplo, ubicación, que
tipo de inductor va a adquirir o si requiere hacerle reparaciones a otro inductor. La
mayoría de los datos del cliente pueden ir con una imagen del inductor que tenga,
para que quede registrado en la base de datos, la cual, cuando se requiera nuevamente
para alguna reparación, o un inductor igual, puedan fijarse en la base de datos los
detalles que tiene el inductor, material utilizado, costos, etc.
Una parte importante de la base de datos fue poder exportar los datos de algún cliente
en un archivo de Adobe Acrobat, ya que a veces es necesario que el cliente requiera
datos del inductor que compró o que cuenta con alguna reparación, esto nos sirve para
poder enviarle todo el documento al cliente.
52
CONCLUSIONES
53
En la elaboración de la base de datos tuve algunas dificultades al realizar este
proyecto, ya que cuando empecé a crear la base de datos utilice el programa Microsoft
Visual Studio 2005, el cual era muy diferente al que anteriormente había utilizado,
que era Microsoft Visual Basic 6. Como la forma de programar era muy diferente a la
versión anterior, tuve que estudiar el Visual Studio 2005 para poder entenderle.
Se utilizó el programa Microsoft Visual 2005 por la necesidad de realizar la base de
datos en un archivo Adobe Acrobat, lo cual no es posible de realizar en el Visual
Studio 6.
Con la base de datos se logró todo lo requerido por la empresa, y el usuario de la base
de datos podrá acceder a la información de una forma oportuna, ágil y fácil.
Otro aspecto importante, es que la empresa podrá administrar todos sus datos,
pudiendo restringir algunas opciones, ya que la base de datos cuenta con un password
que impide que alguna persona pueda hacer modificaciones a los datos, ya que
necesitaría conocer el password que deberá tener el administrador.
El proyecto a simple vista parece simple, pero en realidad es algo complejo, ya que se
necesita bastante código, para su realización.
54
BIBLIOGRAFÍA
55
Microsoft Corporation. (1999). VBA Overview. [online] Available:
http://msdn.microsoft.com/vba/prodinfo/backgrounder.asp (September 5, 1999)
Microsoft SQL Server 2005 Express Edition:
http://www.microsoft.com/spanish/msdn/vstudio/express/SQL/default.mspx
Schneider, David I. (1999). An Introduction to Programming Using Visual Basic 6.0.
(p. 29) New Jersey: Prentice Hall.
Stallings,William SISTEMAS
OPERATIVOS.
Prentice
Hall, 2da
edición
Piattini Mario, Adoración de Miguel, Marcos Esperanza. DISEÑO DE BASES DE
DATOS
SQL Server 2005 Management Studio Express - Community Technology
Preview November 2005
56
GLOSARIO
57
El DBMS : es un conjunto de programas que se encargan de manejar la creación y
todos los accesos a las bases de datos, está compuesto por DDL, DML, SQL.
DDL: Lenguaje de definición de datos.
DML:Lenguaje de manipulación de datos.
SQL: Lenguaje de consulta.
Los datos.Es lo que se conoce como base de datos propiamente dicha. Para manejar
estos datos utilizamos una serie de programas.
Los Programas.Son los encargados de manejar los datos, son conocidos como DBMS
(Data Base Management System) o también SGBD (Sistema Gestor de Base de
Datos). Los DBMS tienen dos funciones principales que son La definición de las
estructuras para almacenar los datos y la manipulación de los datos.
58
ANEXO
CÓDIGO FUENTE
59
Anexo código fuente
Ventana “principal” (Form1)
Figura 4.6 Form1
Ventana “base de datos” (Form2)
Figura 4.7 Form2
60
Ventana “detalles” (Form3)
Figura 4.8 Form3
Ventana “Exportar” (Form4)
F
i
g
u
r
a
4
.
9
F
o
r
m
4
Ventana “importar y exportar” (ITMExpFiles)
61
Figura 4.9.1 ITMExpFiles
Ventana “password” (PassForm)
Figura 4.9.2 PassForm
Ventana “vista previa” (VistaPrevia)
Figura 4.9.3 VistaPrevia
62
Form1 (Ventana principal fig. 4.6)
Public Class Form1
Private mouseOffset As Point
Private isMouseDown As Boolean = False
Dim Rpt As String
Dim Ruta As String =
My.Computer.FileSystem.SpecialDirectories.Temp
Dim LR As Integer = Len(Ruta) – 4
Private Sub PCTCNERBindingNavigatorSaveItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PCTCNERBindingNavigatorSaveItem.Click
Me.Validate()
Me.PCTCNERBindingSource.EndEdit()
Me.PCTCNERTableAdapter.Update(Me.PTOBDDataSet.PCTCNER)
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Dim Resp = MsgBox("Desea actualizar el respaldo de
seguridad", _
MsgBoxStyle.YesNoCancel + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton1)
Select Case Resp
Case vbYes
Rpt = Mid(Ruta, 1, LR) & "Apps\2.0\"
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
Rpt, FileIO.SearchOption.SearchAllSubDirectories,
"PTOBD.mdb")
ArcPro.Items.Add(foundFile)
Next
Dim CopyTo As String = "C:\SystemFile.mdb"
Try
Me.ArcPro.SelectedIndex = 0
If My.Computer.FileSystem.FileExists(CopyTo) = True
Then
My.Computer.FileSystem.DeleteFile(CopyTo)
End If
My.Computer.FileSystem.CopyFile(Me.ArcPro.Text,
CopyTo)
MsgBox("Se ha actualizado correctamente el respaldo del programa",
MsgBoxStyle.OkOnly)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Case vbCancel
e.Cancel = True
End Select
End Sub
63
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Try
Me.PCTCNERTableAdapter.Fill(Me.PTOBDDataSet.PCTCNER)
Me.SplitContainer1.Panel2Collapsed = True
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "I.T.M.
''Error''")
End Try
End Sub
Private Sub ListBox1_MouseDoubleClick(ByVal sender As Object, ByVal e
As System.Windows.Forms.MouseEventArgs) Handles
ListBox1.MouseDoubleClick
If Not (Me.ListBox1.Text <> "") Then
Exit Sub
End If
Form3.Text = Me.ListBox1.Text
Me.Visible = False
Form3.Show()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
Ltime.Text = Date.Now
End Sub
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim xOffset As Integer
Dim yOffset As Integer
If e.Button = Windows.Forms.MouseButtons.Left Then
xOffset = -e.X - SystemInformation.FrameBorderSize.Width
+ 5
yOffset = -e.Y - SystemInformation.CaptionHeight + 19
mouseOffset = New Point(xOffset, yOffset)
isMouseDown = True
End If
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If isMouseDown Then
Dim mousePos As Point = Control.MousePosition
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
Location = mousePos
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If e.Button = Windows.Forms.MouseButtons.Left Then
isMouseDown = False
End If
End Sub
64
Private Sub Form1_VisibleChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.VisibleChanged
On Error Resume Next
If Me.Visible = False Then
Exit Sub
End If
Button1.PerformClick()
Me.PCTCNERTableAdapter.Fill(Me.PTOBDDataSet.PCTCNER)
Dim i, j As Integer
Dim Ple As Boolean
Me.ListBox1.Items.Clear()
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
Ple = True
For j = 0 To Me.ListBox1.Items.Count - 1
Me.ListBox1.SelectedIndex = j
If Me.EmpresaTextBox.Text = Me.ListBox1.Text Then
Ple = False
Exit For
End If
Next j
If Ple = True Then
Me.ListBox1.Items.Add(Me.EmpresaTextBox.Text)
End If
Me.PCTCNERBindingSource.MoveNext()
Next i
Me.ListBox1.SelectedIndex = 0
End Sub
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
Handles LinkLabel1.LinkClicked
Form2.Text = Me.ListBox1.Text
Me.Visible = False
Form2.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.SplitContainer1.Panel2Collapsed = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Me.SplitContainer1.Panel1Collapsed = True
End Sub
Private Sub Label4_MouseHover(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label4.MouseHover
Label4.ForeColor = Color.GreenYellow
End Sub
Private Sub Label4_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label4.MouseLeave
Label4.ForeColor = Color.Black
End Sub
65
Private Sub Label3_MouseHover(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label3.MouseHover
Label3.ForeColor = Color.GreenYellow
End Sub
Private Sub Label3_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label3.MouseLeave
Label3.ForeColor = Color.Black
End Sub
Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Label3.Click
Me.Close()
End Sub
Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Label4.Click
Me.WindowState = FormWindowState.Minimized
End Sub
Private Sub LinkLabel2_LinkClicked(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
Handles LinkLabel2.LinkClicked
Form3.BuscVP.Text = 1
Me.Text = "Buscando..."
Me.Visible = False
Form3.Show()
End Sub
Private Sub LinkLabel3_LinkClicked(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
Handles LinkLabel3.LinkClicked
PassForm.OpcPass.Text = 2
PassForm.Show()
End Sub
Private Sub LinkLabel5_LinkClicked(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
Handles LinkLabel5.LinkClicked
If Me.ListBox1.Text = "" Then
Exit Sub
End If
PassForm.OpcPass.Text = 3
PassForm.Show()
End Sub
Private Sub LinkLabel4_LinkClicked(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
Handles LinkLabel4.LinkClicked
PassForm.OpcPass.Text = 1
PassForm.Show()
End Sub
End Class
66
Form2 (Ventana base de datos fig. 4.7)
Public Class Form2
Dim ima As Bitmap
Dim Cal As Integer
Dim Ca As String
Dim Modifi As Boolean
Private mouseOffset As Point
Private isMouseDown As Boolean = False
Private Sub PCTCNERBindingNavigatorSaveItem_Click_1(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PCTCNERBindingNavigatorSaveItem.Click
Try
Me.Validate()
Me.PCTCNERBindingSource.EndEdit()
Me.PCTCNERTableAdapter.Update(Me.PTOBDDataSet.PCTCNER)
Me.Button1.Enabled = True
Modifi = False
Catch ex As Exception
If Me.CodigoITMTextBox.Text = Nothing Then
MsgBox("El campo 'Codigo de ITM' no puede quedar en
blanco")
Me.CodigoITMTextBox.Select()
Exit Try
End If
End Try
End Sub
Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
Me.Validate()
Me.PCTCNERBindingSource.EndEdit()
Me.PCTCNERTableAdapter.Update(Me.PTOBDDataSet.PCTCNER)
Me.Button1.Enabled = True
Modifi = False
Me.PCTCNERBindingNavigator.Enabled = True
Catch ex As Exception
If Me.CodigoITMTextBox.Text = Nothing Then
MsgBox("El campo 'Codigo de ITM' no puede quedar en
blanco")
Me.CodigoITMTextBox.Select()
Exit Try
End If
End Try
If Me.BuscarInd.Text = "1" Then
Me.BuscarInd.Text = "0"
Form3.Close()
Form1.Show()
Else
Form1.Show()
End If
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
67
Me.PCTCNERTableAdapter.Fill(Me.PTOBDDataSet.PCTCNER)
Modifi = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
Private Sub Form2_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim xOffset As Integer
Dim yOffset As Integer
If e.Button = Windows.Forms.MouseButtons.Left Then
xOffset = -e.X - _
SystemInformation.FrameBorderSize.Width + 5
yOffset = -e.Y - SystemInformation.CaptionHeight + 20
mouseOffset = New Point(xOffset, yOffset)
isMouseDown = True
End If
End Sub
Private Sub Form2_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If isMouseDown Then
Dim mousePos As Point = Control.MousePosition
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
Location = mousePos
End If
End Sub
Private Sub Form2_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If e.Button = Windows.Forms.MouseButtons.Left Then
isMouseDown = False
End If
End Sub
Private Sub Form2_Shown(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Shown
Dim i As Integer
If BuscarInd.Text = "0" Then
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
If Me.Text = Me.EmpresaTextBox.Text Then
Exit For
End If
Me.PCTCNERBindingSource.MoveNext()
Next i
ElseIf BuscarInd.Text = "1" Then
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
If Form3.CodigoITMLabel1.Text =
Me.CodigoITMTextBox.Text Then
68
Exit For
End If
Me.PCTCNERBindingSource.MoveNext()
Next i
End If
End Sub
Private Sub RB2_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs)
Me.CalidadTextBox.Text = 2
End Sub
Private Sub RB3_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs)
Me.CalidadTextBox.Text = 3
End Sub
Private Sub CodigoITMTextBox_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CodigoITMTextBox.TextChanged
Cal = 0
Select Case Mid(Me.CodigoITMTextBox.Text, 4, 1)
Case "R"
Cal = 2
Ca = "Reparación"
Case "r"
Cal = 2
Ca = "Reparación"
Case "N"
Cal = 1
Ca = "Nuevo"
Case "n"
Cal = 1
Ca = "Nuevo"
End Select
If Modifi = True Then
If Len(Me.CodigoITMTextBox.Text) >= 4 And (Cal = 2) Then
Else
End If
ElseIf Modifi = False Then
End If
End Sub
Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
BindingNavigatorAddNewItem.Click
Me.FechaRegDateTimePicker.Refresh()
Modifi = True
Me.FechaRegDateTimePicker.Value = Date.Now
Me.PCTCNERBindingNavigator.Enabled = False
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Label1.Click
If Me.CodigoITMTextBox.Text = "" Then
Exit Sub
End If
69
If Panel1.Visible = True Then
Panel1.Visible = False
ElseIf Panel1.Visible = False Then
Panel1.Visible = True
End If
End Sub
Private Sub Label1_MouseHover(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label1.MouseHover
Label1.ForeColor = Color.GreenYellow
End Sub
Private Sub Label1_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label1.MouseLeave
Label1.ForeColor = Me.CodigoIndTextBox.ForeColor
End Sub
Private Sub BindingNavigatorPositionItem_TextChanged(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
BindingNavigatorPositionItem.TextChanged
Dim i
Dim suma = 0
Dim Path As String
For i = 0 To 9
Path = My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMTextBox.Text & i & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = True Then
suma = suma + 1
End If
Next i
Label2.Text = suma & " imagenes disponibles."
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs)
Dim Path As String
Path = My.Application.Info.DirectoryPath & "\" &
Me.CodigoITMTextBox.Text & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = True Then
VistaPrevia.Text = Me.CodigoITMTextBox.Text
VistaPrevia.Show()
Else
MsgBox("Éste inductor no contiene una imagen disponible"
& vbCrLf & _
"para mostrar", MsgBoxStyle.OkOnly)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim Ext As Integer
Dim Path As String
For Ext = 0 To 9
Path = My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMTextBox.Text & Ext & ".jpg"
70
If My.Computer.FileSystem.FileExists(Path) = True Then
If Ext = 9 Then
MsgBox("Limite de cupo. Existen 10 imagenes para este registro.")
Exit Sub
End If
Else
Exit For
End If
Next Ext
Try
Enlace.Filter = "Imagen
(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.wmf;*.ico)|*.jpg;*.jpeg;*.gif;*.png
;*.bmp;*.wmf;*.ico;|Todos los archivos (*.*)|*.*;"
Enlace.Title = "Agregar imagen"
Enlace.ShowDialog()
If Not (Enlace.FileName <> "") Then
Exit Sub
End If
ima = New Bitmap(Enlace.FileName)
ima.Save(My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMTextBox.Text & Ext & ".jpg",
System.Drawing.Imaging.ImageFormat.Jpeg)
ima = Nothing
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Dim Path As String
Path = My.Application.Info.DirectoryPath & "\" &
Me.CodigoITMTextBox.Text & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = False Then
MsgBox("Éste registro no contiene una imagen asignada;",
MsgBoxStyle.OkOnly)
Exit Sub
End If
Dim resp
resp = MsgBox _
("¿Confirma que quiere quitar la imagen de éste registro?", _
MsgBoxStyle.YesNo + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton2)
If resp <> vbYes Then
Exit Sub
End If
Dim i
For i = 1 To 500
On Error Resume Next
VistaPrevia.Close()
ima = Nothing
My.Computer.FileSystem.DeleteFile(Path)
If Err.Number <> 0 Then
If i = 500 Then
71
MsgBox("La imagen no se pudo eliminar, la memoria no alcanzó a
soltarla " & vbCrLf & _
"a tiempo, por favor, intente de nuevo.", MsgBoxStyle.OkOnly)
End If
Else
Label2.Text = "Imagen eliminada"
Exit For
End If
Next i
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim enc2 As Boolean
Dim b As Integer
Dim Busca2, IndAct As String
IndAct = Me.CodigoITMTextBox.Text
Busca2 = InputBox("Escriba el codigo de ITM", "Busqueda")
If Not (Busca2 <> "") Then
Exit Sub
End If
Panel1.Visible = False
Panel2.Visible = False
Me.PCTCNERBindingSource.MoveFirst()
For b = 1 To Me.PCTCNERBindingSource.Count
If UCase(Busca2) = UCase(Me.CodigoITMTextBox.Text) Then
enc2 = True
Exit For
Else
enc2 = False
End If
Me.PCTCNERBindingSource.MoveNext()
Next b
If enc2 = False Then
Me.PCTCNERBindingSource.MoveFirst()
For b = 1 To Me.PCTCNERBindingSource.Count
If UCase(IndAct) =
UCase(Me.CodigoITMTextBox.Text) Then
Exit For
End If
Me.PCTCNERBindingSource.MoveNext()
Next b
MsgBox("No se encontro el registro especificado", MsgBoxStyle.OkOnly)
End If
Panel1.Visible = True
Panel2.Visible = True
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Form3.IndL1.Text = "1"
Form3.Close()
Form3.Text = Me.EmpresaTextBox.Text
Form3.Activate()
Form3.Show()
Me.Hide()
End Sub
End Class
72
Form3 (Detalles fig. 4.8)
Public Class Form3
Private mouseOffset As Point
Private isMouseDown As Boolean = False
Dim N = 0
Dim R = 0
Dim X, Y, xx, yy, Anc, Alt, An, Al, t As Decimal
Dim Ima As Bitmap
Dim T1 As String = "Imagen no disponible"
Dim T2 As String = "
Buscando..."
Dim T3 As String = "
Eliminando..."
Dim Fnt As New Font("Microsoft sans serif", 8)
Dim Buscando As Boolean = False
Dim Reemp As Boolean = False
Dim modifi2 As Boolean = False
Dim IndIma As Integer
Private Sub PCTCNERBindingNavigatorSaveItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PCTCNERBindingNavigatorSaveItem.Click
Me.Validate()
Me.PCTCNERBindingSource.EndEdit()
Me.PCTCNERTableAdapter.Update(Me.PTOBDDataSet.PCTCNER)
End Sub
Private Sub Form3_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If IndL1.Text = "1" Then
IndL1.Text = "0"
Else
Form1.Show()
End If
End Sub
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.PCTCNERTableAdapter.Fill(Me.PTOBDDataSet.PCTCNER)
xx = (Me.PictureBox1.Width / 2) - 55
yy = (Me.PictureBox1.Height / 2) - 10
End Sub
Private Sub Form3_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim xOffset As Integer
Dim yOffset As Integer
If e.Button = Windows.Forms.MouseButtons.Left Then
xOffset = -e.X - SystemInformation. _
FrameBorderSize.Width + 5
yOffset = -e.Y - SystemInformation.CaptionHeight + 20
mouseOffset = New Point(xOffset, yOffset)
isMouseDown = True
End If
End Sub
73
Private Sub Form3_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If isMouseDown Then
Dim mousePos As Point = Control.MousePosition
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
Location = mousePos
End If
End Sub
Private Sub Form3_MouseUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
If e.Button = Windows.Forms.MouseButtons.Left Then
isMouseDown = False
End If
End Sub
Private Sub Form3_Shown(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Shown
On Error Resume Next
If Form1.Text = "Buscando..." Then
Form1.Text = "ITM"
PanelD.Visible = False
PictureBox1.Visible = False
Opciones.Visible = True
Button6.PerformClick()
Else
Opciones.Hide()
If Buscando = False Then
Dim i As Integer
Form4d.Show()
Me.ListBox1.Items.Clear()
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
If Me.EmpresaLabel1.Text = Me.Text Then
Me.ListBox1.Items.Add Me.CodigoITMLabel1.Text
Me.LFantasma.Items.Add Me.CodigoITMLabel1.Text
End If
Me.PCTCNERBindingSource.MoveNext()
Next i
Me.ListBox1.SelectedIndex = 0
For i = 0 To Me.LFantasma.Items.Count - 1
Me.LFantasma.SelectedIndex = i
Select Case Mid(Me.LFantasma.Text, 4, 1)
Case "R"
R = R + 1
Case "r"
R = R + 1
Case "N"
N = N + 1
Case "n"
N = N + 1
End Select
Next i
Me.Details.Text = _
"Ind. reparados:" & vbCrLf & R & vbCrLf & vbCrLf & _
"Ind. nuevos:" & vbCrLf & N
74
Me.ListBox1.SelectedIndex = 0
End If
Me.PictureBox1.Refresh()
End If
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged
Dim i As Integer
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
If Me.CodigoITMLabel1.Text = Me.ListBox1.Text Then
Exit For
End If
Me.PCTCNERBindingSource.MoveNext()
Next i
On Error Resume Next
IndIma = 0
Ima = Nothing
Me.PictureBox1.CreateGraphics.Clear(Color.Silver)
Me.PictureBox1.CreateGraphics.DrawString(T2, Fnt,
Brushes.DimGray, xx, yy)
Ima = New Bitmap(My.Application.Info.DirectoryPath & "\" &
Me.CodigoITMLabel1.Text & ".jpg")
Me.PictureBox1.Refresh()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Form2.BuscarInd.Text = "1"
Me.Hide()
Form2.Activate()
Form2.Show()
End Sub
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Label2.Click
If Me.CodigoITMLabel1.Text = "" Then
Exit Sub
Opciones.Visible = False
Label2.Visible = False
End If
If Opciones.Visible = True Then
Opciones.Visible = False
ElseIf Opciones.Visible = False Then
Opciones.Visible = True
End If
End Sub
75
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
If Me.CodigoITMLabel1.Text = "" Then
Exit Sub
End If
If Control.MouseButtons = _
Windows.Forms.MouseButtons.Right Then
Me.PictureBox1.ContextMenuStrip = Me.ContextMenuStrip1
End If
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.Clear(Color.Silver)
Try
Ima = New Bitmap(My.Application.Info.DirectoryPath & "\"
&
Me.CodigoITMLabel1.Text & IndIma & ".jpg")
Anc = Ima.Width
Alt = Ima.Height
For t = 0.001 To 1 Step 0.001
An = Anc * t
Al = Alt * t
If An >= (Me.PictureBox1.Width - 0.5) Or _
Al >= (Me.PictureBox1.Height - 0.5) Then
An = An
Al = Al
Exit For
End If
Next t
X = ((Me.PictureBox1.Width / 2) - 0.5) - (An / 2)
Y = ((Me.PictureBox1.Height / 2 - 0.5)) - (Al / 2)
e.Graphics.InterpolationMode =
Drawing2D.InterpolationMode.High
e.Graphics.DrawImage(Ima, X, Y, An, Al)
e.Graphics.DrawRectangle(Pens.DimGray, X, Y, An, Al)
Ima = Nothing
Catch ex As Exception
e.Graphics.DrawString(T1, Fnt, Brushes.DimGray, xx, yy)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim Ext As Integer
Dim Path As String
For Ext = 0 To 9
Path = My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & Ext & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = True Then
If Ext = 9 Then
MsgBox("Existen 10 imagenes para este registro.")
Exit Sub
End If
Else
Exit For
End If
76
Next Ext
Try
Abrir.Filter = "Imagen
(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.wmf;*.ico)|*.jpg;*.jpeg;*.gif;*.png
;*.bmp;*.wmf;*.ico;|Todos los archivos (*.*)|*.*;"
Abrir.Title = "Agregar imagen"
Abrir.ShowDialog()
If Not (Abrir.FileName <> "") Then
Exit Sub
End If
Ima = New Bitmap(Abrir.FileName)
Ima.Save(My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & Ext & ".jpg",
System.Drawing.Imaging.ImageFormat.Jpeg)
Me.PictureBox1.Refresh()
Ima = Nothing
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim res
Dim Path As String = _
My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & IndIma & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = False Then
MsgBox("El sector especificado no tiene imagen disponible",
MsgBoxStyle.OkOnly)
Exit Sub
End If
res = MsgBox("¿Desea quitar la imagen de este inductor?", _
MsgBoxStyle.YesNo + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton2)
If res <> vbYes Then
Exit Sub
End If
Dim h = 0
Me.PictureBox1.CreateGraphics.Clear(Color.Silver)
Me.PictureBox1.CreateGraphics.DrawString(T3, Fnt, Brushes.DimGray,
xx, yy)
For h = 1 To 500
On Error Resume Next
Ima = Nothing
VistaPrevia.Close()
My.Computer.FileSystem.DeleteFile _
(My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & IndIma & ".jpg")
If Err.Number <> 0 Then
If h = 500 Then
MsgBox("La imagen no se eliminó porque la memoria no alcanzó" &
vbCrLf & _
77
"a soltarla a tiempo, Por favor, intente de nuevo",
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End If
Else
Exit For
End If
Next h
Me.PictureBox1.Refresh()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
Buscando = True
Dim
Dim
Dim
N =
R =
i, busc As Integer
Inductor, inductorAct, EmpresaAct, InductorBus As String
Encontrado As Boolean
0
0
inductorAct = UCase(Me.CodigoITMLabel1.Text)
EmpresaAct = UCase(Me.EmpresaLabel1.Text)
Inductor = UCase(InputBox("Escriba el código de ITM del
inductor","Busqueda de inductor"))
If Not (Inductor <> "") Then
Exit Sub
End If
Me.PanelD.Visible = False
Me.PictureBox1.Visible = False
InductorBus = Inductor
Me.PCTCNERBindingSource.MoveFirst()
For busc = 1 To Me.PCTCNERBindingSource.Count
If UCase(Me.CodigoITMLabel1.Text) = Inductor Then
Me.Text = Me.EmpresaLabel1.Text
Encontrado = True
Exit For
Else
Encontrado = False
End If
Me.PCTCNERBindingSource.MoveNext()
Next busc
If Encontrado = False Then
If BuscVP.Text = 1 Then
BuscVP.Text = 0
MsgBox("No se encontró el inductor especificado.",
MsgBoxStyle.OkOnly)
Me.Close()
Exit Sub
End If
Me.Text = EmpresaAct
78
Inductor = inductorAct
End If
If BuscVP.Text = 1 Then
BuscVP.Text = 0
End If
Me.ListBox1.Items.Clear()
Me.LFantasma.Items.Clear()
Me.PCTCNERBindingSource.MoveFirst()
For i = 1 To Me.PCTCNERBindingSource.Count
If UCase(Me.EmpresaLabel1.Text) = UCase(Me.Text) Then
Me.ListBox1.Items.Add(Me.CodigoITMLabel1.Text)
Me.LFantasma.Items.Add(Me.CodigoITMLabel1.Text)
End
If
Me.PCTCNERBindingSource.MoveNext()
Next i
Label3.Text = InductorBus & vbCrLf & inductorAct & vbCrLf &
EmpresaAct & vbCrLf & Inductor
For i = 0 To Me.LFantasma.Items.Count - 1
Me.LFantasma.SelectedIndex = i
Select Case Mid(Me.LFantasma.Text, 4, 1)
Case "R"
R = R + 1
Case "r"
R = R + 1
Case "N"
N = N + 1
Case "n"
N = N + 1
End Select
Next i
Me.Details.Text = _
"Ind. reparados:" & vbCrLf & R & vbCrLf & vbCrLf & _
"Ind. nuevos:" & vbCrLf & N
Me.PictureBox1.Visible = True
Me.PanelD.Visible = True
For i = 0 To Me.ListBox1.Items.Count - 1
Me.LFantasma.SelectedIndex = i
If Inductor = UCase(Me.LFantasma.Text) Then
Exit For
End If
Next i
Me.ListBox1.SelectedIndex = Me.LFantasma.SelectedIndex
If Encontrado = False Then
MsgBox("No se encontró el inductor " & InductorBus)
Me.PanelD.Refresh()
End If
Buscando = False
79
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
HyF.Text = Date.Now
End Sub
Private Sub Label2_MouseHover(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label2.MouseHover
Me.Label2.ForeColor = Color.GreenYellow
End Sub
Private Sub Label2_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Label2.MouseLeave
Me.Label2.ForeColor = Me.CodigoITMLabel1.ForeColor
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles PictureBox1.Click
If Me.CodigoITMLabel1.Text = "" Then
Exit Sub
End If
Dim Path As String
Path = My.Application.Info.DirectoryPath & "\" &
Me.CodigoITMLabel1.Text & IndIma & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = True Then
VistaPrevia.Text = Me.CodigoITMLabel1.Text & IndIma
VistaPrevia.Show()
Else
MsgBox("Éste sector no contiene una imagen disponible" & vbCrLf &
“que mostrar.", MsgBoxStyle.OkOnly)
End If
End Sub
Private Sub AgregarImagenToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
AgregarImagenToolStripMenuItem.Click
Dim Ext As Integer
Dim Path As String
For Ext = 0 To 9
Path = My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & Ext & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = True Then
If Ext = 9 Then
MsgBox("Existen 10 imagenes para este registro.")
Exit Sub
End If
Else
Exit For
End If
Next Ext
Try
Abrir.Filter = "Imagen
(*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.wmf;*.ico)|*.jpg;*.jpeg;*.gif;*.png
;*.bmp;*.wmf;*.ico;|Todos los archivos (*.*)|*.*;"
Abrir.Title = "Agregar imagen"
80
Abrir.ShowDialog()
If Not (Abrir.FileName <> "") Then
Exit Sub
End If
Ima = New Bitmap(Abrir.FileName)
Ima.Save(My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & Ext & ".jpg",
System.Drawing.Imaging.ImageFormat.Jpeg)
Me.PictureBox1.Refresh()
Ima = Nothing
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub EliminarImagenToolStripMenuItem_Click(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
EliminarImagenToolStripMenuItem.Click
Dim res
Dim Path As String = _
My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & IndIma & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = False Then
MsgBox("El sector especificado no tiene imagen disponible",
MsgBoxStyle.OkOnly)
Exit Sub
End If
res = MsgBox("¿Desea quitar la imagen de este inductor?", _
MsgBoxStyle.YesNo + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton2)
If res <> vbYes Then
Exit Sub
End If
Dim h = 0
Me.PictureBox1.CreateGraphics.Clear(Color.Silver)
Me.PictureBox1.CreateGraphics.DrawString(T3, Fnt, Brushes.DimGray,
xx, yy)
For h = 1 To 500
On Error Resume Next
Ima = Nothing
VistaPrevia.Close()
My.Computer.FileSystem.DeleteFile _
(My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & IndIma & ".jpg")
If Err.Number <> 0 Then
If h = 500 Then
MsgBox("La imagen no se eliminó porque la memoria no alcanzó" &
vbCrLf & "a soltarla; Por favor, intente de nuevo",
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End If
Else
Exit For
End If
Next h
Me.PictureBox1.Refresh()
End Sub
81
Private Sub ExportarImagenToolStripMenuItem_Click(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
ExportarImagenToolStripMenuItem.Click
Dim Path As String = _
My.Application.Info.DirectoryPath & "\" & _
Me.CodigoITMLabel1.Text & IndIma & ".jpg"
If My.Computer.FileSystem.FileExists(Path) = False Then
MsgBox("El sector no contiene una imagen para exportar",
_
MsgBoxStyle.OkOnly)
Exit Sub
End If
Guardar.Filter =
"BMP|*.bmp;|JPG|*.jpg;|JPEG|*.jpeg;|GIF|*.gif;|PNG|*.png|ICO|*.ico;|W
MF|*.wmf;"
Guardar.FilterIndex = 1
Guardar.Title = "Exportar imagen"
Guardar.ShowDialog()
If Not (Guardar.FileName <> "") Then
Exit Sub
End If
Try
Ima = New Bitmap(My.Application.Info.DirectoryPath & "\"
&
Me.CodigoITMLabel1.Text & IndIma & ".jpg")
Select Case Guardar.FilterIndex
Case 1
Ima.Save(Guardar.FileName & ".bmp",
System.Drawing.Imaging.ImageFormat.Bmp)
Case 2
Ima.Save(Guardar.FileName & ".jpg",
System.Drawing.Imaging.ImageFormat.Jpg)
Case 3
Ima.Save(Guardar.FileName & ".jpeg",
System.Drawing.Imaging.ImageFormat.Jpeg)
Case 4
Ima.Save(Guardar.FileName & ".gif",
System.Drawing.Imaging.ImageFormat.Gif)
Case 5
Ima.Save(Guardar.FileName & ".png",
System.Drawing.Imaging.ImageFormat.Png)
Case 6
Ima.Save(Guardar.FileName & ".ico",
System.Drawing.Imaging.ImageFormat.Icon)
Case 7
Ima.Save(Guardar.FileName & ".wmf",
System.Drawing.Imaging.ImageFormat.Wmf)
End Select
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
82
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
If Me.CodigoITMLabel1.Text = "" Then
Exit Sub
End If
Windows.Forms.Cursor.Current = Cursors.WaitCursor
Form4.Show()
Me.Hide()
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click
If IndIma > 0 Then
IndIma = IndIma - 1
End If
Pin.Text = IndIma + 1
Me.PictureBox1.Refresh()
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button8.Click
If IndIma < 9 Then
IndIma = IndIma + 1
End If
Pin.Text = IndIma + 1
Me.PictureBox1.Refresh()
End Sub
Private Sub ImagenAtrasToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ImagenAtrasToolStripMenuItem.Click
If IndIma > 0 Then
IndIma = IndIma - 1
End If
Pin.Text = IndIma + 1
Me.PictureBox1.Refresh()
End Sub
Private Sub SiguienteImagenToolStripMenuItem_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
SiguienteImagenToolStripMenuItem.Click
If IndIma < 9 Then
IndIma = IndIma + 1
End If
Pin.Text = IndIma + 1
Me.PictureBox1.Refresh()
End Sub
End Class
83
Form4 (Exportar detalles fig. 4.9)
Public Class Form4
Dim V As Integer = 0
Private Sub Form4_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Form3.Visible = True
End Sub
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Try
Me.RepTabla50TableAdapter.Fill(Me.Reporte50DataSet.RepTabla50)
Panel2.Visible = False
Panel1.Visible = True
Me.Width = 406
Me.Height = 474
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
If Me.RepTabla50BindingSource.Count > 0 Then
Me.RepTabla50BindingSource.MoveFirst()
Me.RepTabla50BindingSource.RemoveCurrent()
Me.Validate()
Me.RepTabla50BindingSource.EndEdit()
Me.RepTabla50TableAdapter.Update(Me.Reporte50DataSet.RepTabla50)
End If
Me.RepTabla50BindingSource.AddNew()
Me.ClienteTextBox.Text = Form3.EmpresaLabel1.Text
Me.CotizacionITMTextBox.Text = Form3.CotizaciónTextBox.Text
Me.NumerodeSerieTextBox.Text = Form3.CodigoIndLabel1.Text
Me.NumeroITMTextBox.Text = Form3.CodigoITMLabel1.Text
Me.FechaTextBox.Text = Form3.FechaRegLabel1.Text
Me.Cliente2TextBox.Text = Form3.EmpresaLabel1.Text
Me.AtteTextBox.Text = "Eloy E. Durán Rodríguez"
Me.PuestoTextBox.Text = "Gte. de operación"
If My.Computer.FileSystem.FileExists _
(My.Application.Info.DirectoryPath & "\" &
Form3.CodigoITMLabel1.Text & _
(Int(Form3.Pin.Text) - 1) & ".jpg") = True Then
Me.ImagenPictureBox.ImageLocation = My.Application.Info.DirectoryPath
& "\" & Form3.CodigoITMLabel1.Text & _
(Int(Form3.Pin.Text) - 1) & ".jpg"
End If
Windows.Forms.Cursor.Current = Cursors.Default
Catch ex As Exception
MsgBox("El tiempo de ejecución de SQL server expiró," & vbCrLf & "Por
favor, Intente de nuevo", MsgBoxStyle.OkOnly +
MsgBoxStyle.Information)
End Try
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
84
Panel1.Visible = True
Panel2.Visible = False
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Me.Close()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Panel1.Visible = False
Panel2.Visible = True
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Try
Windows.Forms.Cursor.Current = Cursors.WaitCursor
Me.Validate()
Me.RepTabla50BindingSource.EndEdit()
Me.RepTabla50TableAdapter.Update(Me.Reporte50DataSet.RepTabla50)
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
Me.MaximizeBox = True
PB.Visible = True
PBL.Visible = True
Timer1.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer1.Tick
V = V + 1
If V >= 100 Then
DatosIn.Visible = False
Timer1.Enabled = False
End If
If V = 80 Then
Me.ReportViewer1.RefreshReport()
Windows.Forms.Cursor.Current = Cursors.Default
End If
PB.Value = V
End Sub
85
Private Sub Panel1_VisibleChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Panel1.VisibleChanged
If Panel1.Visible = True Then
Me.CancelButton = Button2
End If
End Sub
Private Sub Panel2_VisibleChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles Panel2.VisibleChanged
If Panel2.Visible = True Then
Me.CancelButton = Button5
End If
End Sub
End Class
86
VistaPreliminar (Ventana vista previa de imagen fig. 4.9.3)
Public Class VistaPrevia
Dim ima As Bitmap
Dim X, Y, xx, yy, Anc, Alt, An, Al, i As Decimal
Dim T1 As String = "Vista previa no disponible"
Dim T2 As String = "
dibujando..."
Dim f As New Font("Microsoft sans serif", 8)
Private Sub VistaPrevia_FormClosing(ByVal sender As Object, ByVal e
As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ima = Nothing
Me.PictureBox1.CreateGraphics.Clear(Color.White)
Form3.PictureBox1.Refresh()
End Sub
Private Sub VistaPrevia_Resize(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Resize
xx = (Me.PictureBox1.Width / 2) - 60
yy = (Me.PictureBox1.Height / 2) - 10
Me.PictureBox1.Refresh()
End Sub
Private Sub VistaPrevia_Shown(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Shown
Me.PictureBox1.CreateGraphics.DrawString(T2, f, Brushes.Black, xx,
yy)
ima = New Bitmap(My.Application.Info.DirectoryPath & "\" & Me.Text &
".jpg")
Anc = ima.Width
Alt = ima.Height
Me.PictureBox1.Refresh()
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.Clear(Color.White)
ima = New Bitmap(My.Application.Info.DirectoryPath & "\" & Me.Text &
".jpg")
Try
For i = 0.001 To 1 Step 0.001
An = Anc * i
Al = Alt * i
If An >= (Me.PictureBox1.Width - 0.5) Or _
Al >= (Me.PictureBox1.Height - 0.5) Then
Al = Al - 1.6
An = An - 1.6
Exit For
End If
Next i
X = ((Me.PictureBox1.Width / 2) - 0.5) - (An / 2)
Y = ((Me.PictureBox1.Height / 2) - 0.5) - (Al / 2)
e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.High
e.Graphics.DrawImage(ima, X, Y, An, Al)
e.Graphics.DrawRectangle(Pens.Black, X, Y, An, Al)
Catch ex As Exception
87
e.Graphics.DrawString(T1, f, Brushes.Black, xx, yy)
End Try
ima = Nothing
End Sub
End Class
88
ITMExpFiles (Importar y exportar fig. 4.9.1)
Public Class ITMExpFiles
Dim Rpt As String
Dim Ruta As String =
My.Computer.FileSystem.SpecialDirectories.Temp
Dim LR As Integer = Len(Ruta) - 4
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim CopyTo As String =
My.Computer.FileSystem.SpecialDirectories.MyDocuments &
"\SystemFile.mdb"
Try
Me.ListBox1.SelectedIndex = 0
My.Computer.FileSystem.CopyFile(Me.ListBox1.Text, CopyTo)
MsgBox("Se ha exportado correctamente el respaldo del programa en:" &
vbCrLf & _
CopyTo, MsgBoxStyle.OkOnly)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim Resp = MsgBox("¿Confirma que quiere reemplazar los registros de
datos?", _
MsgBoxStyle.YesNo + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton2)
If Resp <> vbYes Then
Exit Sub
End If
Dim Resp2 = MsgBox("Recuerde que si existe un error, o el archivo a
importar se" & vbCrLf & _
"manipuló de forma inconciente, puede causar un error en el programa
y/o perder toda" & vbCrLf & _
"la información recopilada hasta el momento." & vbCrLf & "Continuar",
MsgBoxStyle.YesNo + MsgBoxStyle.Critical +
MsgBoxStyle.DefaultButton2)
If Resp2 <> vbYes Then
Exit Sub
End If
Enlace.Filter = "Base de datos|*.mdb"
Enlace.Title = "Importar un archivo a ITM"
Enlace.ShowDialog()
If Not (Enlace.FileName <> "") Then
Exit Sub
End If
Try
Dim i
For i = 0 To 1
Me.ListBox1.SelectedIndex = i
My.Computer.FileSystem.DeleteFile(Me.ListBox1.Text)
My.Computer.FileSystem.CopyFile(Enlace.FileName, Me.ListBox1.Text)
Next i
89
MsgBox("Los archivos han sido reemplazados satisfactoriamete.",
MsgBoxStyle.OkOnly)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub ITMExpFiles_FormClosing(ByVal sender As Object, ByVal e
As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Form1.Show()
End Sub
Private Sub ITMExpFiles_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Rpt = Mid(Ruta, 1, LR) & "Apps\2.0\"
Me.TextBox1.Text = Rpt
For Each foundFile As String In
My.Computer.FileSystem.GetFiles(
Rpt, FileIO.SearchOption.SearchAllSubDirectories,
"PTOBD.mdb")
ListBox1.Items.Add(foundFile)
Next
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Me.Close()
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
ListBox1.SelectedIndexChanged
Me.TextBox1.Text = Me.ListBox1.Text
End Sub
End Class
90
PassForm (Ventana de la contraseña fig. 4.9.2)
Public Class PassForm
Dim cambio As Boolean = True
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles OK.Click
On Error Resume Next
If Me.UsernameTextBox.Text = Me.PasswordTextBox.Text Then
Me.ContraseñaTextBox.Text = Me.PasswordTextBox.Text
cambio = True
Me.TextBox1.Text = ""
Me.UsernameTextBox.Text = ""
Me.PasswordTextBox.Text = ""
Me.Close()
Else
MsgBox("Las claves no son iguales", MsgBoxStyle.OkOnly)
Me.UsernameTextBox.Select()
End If
If Err.Number <> 0 Then
MsgBox(Err.ToString)
End If
End Sub
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Cancel.Click
cambio = False
Me.Close()
End Sub
Private Sub PassForm_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If cambio = True Then
Try
Me.ContrasTablaBindingSource.EndEdit()
Me.ContrasTablaTableAdapter.Update(Me.PassBDDataSet.ContrasTabla)
cambio = False
Catch Ex As Exception
MsgBox(Ex.Message)
End Try
End If
End Sub
Private Sub PassForm_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.ContrasTablaTableAdapter.Fill(Me.PassBDDataSet.ContrasTabla)
Label2.Text = Me.ContraseñaTextBox.Text
Panel2.Show()
Panel1.Hide()
Panel1.Dock = DockStyle.Fill
Panel2.Dock = DockStyle.Fill
End Sub
91
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
If Me.ContraseñaTextBox.Text = TextBox1.Text Then
Select Case OpcPass.Text
Case 1
Panel2.Hide()
Panel1.Show()
Me.UsernameTextBox.Select()
OpcPass.Text = 0
Case 2
Me.Visible = False
ITMExpFiles.Show()
Form1.Visible = False
OpcPass.Text = 0
Case 3
Dim Resp3 = MsgBox("¿Confirma que quiere eliminar todos los
registros" & vbCrLf & _
"de la Base de datos?", MsgBoxStyle.YesNo + MsgBoxStyle.Question +
MsgBoxStyle.DefaultButton2)
If Resp3 <> vbYes Then
Me.Visible = False
Exit Select
End If
Form1.Visible = False
Me.Visible = False
Dim i
Form1.PCTCNERBindingSource.MoveFirst()
For i = 1 To Form1.PCTCNERBindingSource.Count
Form1.PCTCNERBindingSource.RemoveCurrent()
Next i
Form1.PCTCNERTableAdapter.Update(Form1.PTOBDDataSet.PCTCNER)
OpcPass.Text = 0
Form1.Visible = True
End Select
Me.TextBox1.Text = ""
Me.UsernameTextBox.Text = ""
Me.PasswordTextBox.Text = ""
Else
MsgBox("El password no es valido", MsgBoxStyle.OkOnly)
Me.TextBox1.Select()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
cambio = False
PssResult.Text = 0
Me.TextBox1.Text = ""
Me.UsernameTextBox.Text = ""
Me.PasswordTextBox.Text = ""
Me.Close()
End Sub
Private Sub PasswordTextBox_GotFocus(ByVal sender As Object, ByVal e
As System.EventArgs) Handles PasswordTextBox.GotFocus
Me.PasswordTextBox.Select(0, Len(Me.PasswordTextBox.Text))
End Sub
92
Private Sub PasswordTextBox_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
PasswordTextBox.TextChanged
If Not (Me.PasswordTextBox.Text = "") And _
Not (Me.UsernameTextBox.Text = "") Then
OK.Enabled = True
Else
OK.Enabled = False
End If
End Sub
Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TextBox1.GotFocus
Me.TextBox1.Select(0, Len(Me.TextBox1.Text))
End Sub
Private Sub UsernameTextBox_GotFocus(ByVal sender As Object, ByVal e
As System.EventArgs) Handles UsernameTextBox.GotFocus
Me.UsernameTextBox.Select(0, Len(Me.UsernameTextBox.Text))
End Sub
Private Sub ContrasTablaBindingNavigatorSaveItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
ContrasTablaBindingNavigatorSaveItem.Click
Me.Validate()
Me.ContrasTablaBindingSource.EndEdit()
Me.ContrasTablaTableAdapter.Update(Me.PassBDDataSet.ContrasTabla)
End Sub
Private Sub Panel2_VisibleChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Panel2.VisibleChanged
If Me.Panel2.Visible = True Then
Me.AcceptButton = Me.Button2
Me.CancelButton = Me.Button1
End If
End Sub
Private Sub Panel1_VisibleChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Panel1.VisibleChanged
If Panel1.Visible = True Then
Me.AcceptButton = OK
Me.CancelButton = Cancel
End If
End Sub
Private Sub UsernameTextBox_TextChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
UsernameTextBox.TextChanged
If Not (Me.UsernameTextBox.Text = "") And _
Not (Me.PasswordTextBox.Text = "") Then
OK.Enabled = True
Else
OK.Enabled = False
End If
End Sub
End Class
93
Descargar