Anda di halaman 1dari 168

1

Introduccin

oy en da SQL Server en sus


diversas versiones, es el motor de
base de datos ms conocido,
donde
utilizan,

millones
cuenta

muchas

de

personas

adems

herramientas

con
que

permiten su uso ms fcil, y de mejor manejo y


control.

En la actualidad todas las Empresas son


capaces de gestionar los mismos datos en unos
minutos que lo que antes gestionaban durante das, meses, aos, etc.
Conforme ah ido evolucionando las caractersticas de hardware y software, la empresa puede cubrir la
necesidad del control de informacin de gran valor para el desarrollo y crecimiento de la misma de un
modo sencillo y rentable y todo ello dependiendo del resultado que obtienen.
El propio sistema de control de datos ha ido mejorando, desde las primeras aplicaciones que
gestionaban su propia informacin alojndolas en unidades de almacenamiento externas (discos duros,
disquetes, cintas...) con el problema de que slo esa aplicacin era capaz de interpretar y utilizar esa
informacin. Ms adelante comenzaron a imponerse unos sistemas de almacenamiento estndar que
facilitaba la tarea de compartir esa informacin entre diferentes aplicaciones.
Finalmente aparecen los servidores de bases de datos, herramientas cuya nica y principal funcin era
la administracin de informacin. Todo esto Mediante diferentes protocolos de comunicacin las
diferentes aplicaciones pueden enlazarse con estos servidores, ordenar las tareas que necesiten para
que el servidor se encargue de operar esas tareas y devolver los resultados deseados. Podemos tener
nuestra herramienta de administracin de datos en un ordenar (Servidor) y que el resto de ordenadores
(Clientes) se conecten a este servidor mediante sus aplicaciones para trabajar con estos datos, esta
estructura Servidor/Cliente es la que se ha terminado de imponer pudiendo distinguir claramente tres
niveles o capas de trabajo:

SESIN I
Explorador de Servidores

CONTENIDO

Agregar Conexiones

Objetos de Acceso a Datos

Acceso:

Manual

Asistente

Forma Directa

Conexin a otros tipos de Base de Datos

LABORATORIO

EXPLORADOR DE SERVIDORES
Una de las herramientas importantes que posee Visual Studio 2005 es el Explorador de
Servidores, el cual va a permitir conectarse a distintos servidores que se tengan disponible,
para de esa manera acceder y manipular la informacin de las Bases de Datos y poderla
utilizar en el desarrollo de alguna aplicacin de Visual Studio.
Para poder Acceder a esta herramienta tenemos:
1. Clic en : VER Explorador de Servidores
2. CTRL + ALT + S

Cualquiera de las dos formas nos mostrara la


siguiente ventana:

Esta ventana nos va a permitir configurar a que servidores vamos a conectarnos para un mejor
manejo y control de nuestra informacin.

CONEXIONES
Una vez que se tenga abierto el Servidor de Exploradores, debemos proceder de la siguiente
manera:
1. Clic derecho sobre Conexin de Base
de Datos.
2. Clic en Agregar Nueva Conexin.

3. Se mostrara la siguiente ventana, en

donde se deber llenar de la siguiente


manera :
a. Escribir (Local)
b. Clic en Autenticacin de SQL
Server
c. Escribir : SA
d. Seleccionar el Nombre de la Base
de Datos en este caso HOSPITAL

4. Mostrando dentro de la ventana de Servidores, el nombre de la Base de Datos

seleccionada:

5. Ahora si hacemos clic en el signo mas del Enlace

creado podremos visualizar los componentes que ah


existen, por ejemplo las tablas, vistas, procedimientos
almacenados, vistas, funciones, etc.

OBJETO DE ACCESO A DATOS


Una de las ventanas de acceso a la informacin en la que podemos construir aplicaciones de
acceso a datos con solo arrastrar los objetos al formulario.
Los objetos para manejar base de datos se encontraran en la Ficha de Datos del cuadro de
herramientas, existen varias formas para desarrollar que accedan a los datos.

Algunas veces los controles que ah se muestran, muchas veces no se encuentran, para ello,
debemos agregar nuevos componentes, y debemos seguir
lo siguiente:
o

Clic derecho en la Ficha Datos.

Del men contextual, hacemos clic en Elegir


Elementos.

Esperamos unos minutos

Se mostrara la siguiente ventana:

Debemos hacer clic en los controles de conexin que necesitamos, y luego clic en Aceptar,
agregndose los controles que necesitamos para manejar los controles.
Objeto encargado de la conexin a una Base de Datos SQL Server
versin 7.0 o superior.

Este Objeto esta encargado de conectarse a una Base de Datos


diferente a SQL, como por ejemplo de Microsoft Access. Se puede
conectar a SQL pero una versin inferior 7.0

Este

objeto

cumple

la

misma

funcin

que

el

objeto

SQLDataAdapter, pero se utiliza cuando nos hemos conectado a


una Base de Datos utilizando OleDbConnection.

Usado para almacenar el comando con el requerimiento para la


conexin establecida. Este comando es una instruccin SQL que
depende del requerimiento
deseado y puede ser: SELECT, UPDATE, INSERT o DELETE.

Cumple la misma funcin que el objeto SQLCommand, pero es usado


junto con los objetos OLEDBconnection y OLEDBDataAdapter.

Este objeto se encarga de presentar la informacin almacenada en el


objeto DataSet de distintas formas para el usuario final.

Objeto que se encarga de recibir el conjunto de datos que devuelve


la conexin a travs de objetos DataAapter, segn el comando
establecido en el objecto Command.

Objeto encargado de mostrarnos la informacin de una determinada


Tabla de una base de datos, esta informacin lo recibe de un objeto
DataSet.

ACCESO A DATOS MANUALMENTE


Para acceder a los datos en forma manual se deben colocar los objetos en forma ordenada en
el formulario e ir asignndole valores sus propiedades segn corresponda.
Para comenzar, primero se debe crear una aplicacin en blanco, al cual debemos agregar un
SqlConnection, de la siguiente forma:

Seleccionamos el objeto SQLConnection1 y abrimos la ventana de propiedades

Buscamos en la ventana propiedades, ConnectionString

Dentro de el vamos a ver, las conexiones que se han creado con el Explorador de
Servidores.

La ventana como debe mostrarse es de la siguiente manera:

Si no hay conexin podemos seleccionar <Nueva Conexin .>

El cual nos guiara de manera similar que el Explorador de Servidores para conectarnos

Ahora para ver si nuestra conexin ah sido realizada correctamente debemos, agregar a
nuestro formulario un DataGridView.

En la parte superior derecha hay un icono de una punta de flecha a la cual le hacemos
clic.

Mostrndose una ventana de conexin, tal como se muestra en el grafico:

De esa ventana, hacemos clic en Agregar Origen de Datos del Proyecto.

Este mostrara el Asistente para la Configuracin de Origen de Datos.

Seleccionamos Base de Datos.

10

Hacemos clic en Siguiente.

Este nos llevara a otra ventana donde, podemos escoger la conexin ya establecida en el
Servidor o podemos seleccionar una nueva, llevndonos a las ventanas ya vistas anteriormente.

En nuestro caso como ya tenemos la conexin solo, seleccionamos la ya existente Hospital, de


la siguiente manera :

Algunas veces necesitamos visualizar la Conexin para ello hacemos clic en el signo (+) de
Cadena de Conexin.

Hacemos clic en Siguiente y nos mostrara el lugar donde se almacenara la conexin,


sugirindonos un nombre: HospitalConnectionString.

Clic en siguiente, donde nos mostrara los objetos de la Base de Datos que vamos a utilizar,
mostrndonos la siguiente ventana:

11

Hacemos Clic en el signo mas de Tablas y se


mostrara las tablas que conforman la Base de Datos
Hospital, visualizando todas sus caractersticas, para
poder seleccionar una o mas tablas debemos activar
los checks respectivamente, tal como se muestran en

el

grafico:

Para terminar haga clic en


Finalizar.

Quedando la ventana de la
siguiente forma.

Para mostrar los datos


presionamos F5.

12

ACCEDER CON EL ASISTENTE


En este ejemplo se indicara como debemos crear un programa donde nos mostrara a la tabla
Empleados de la base de datos SQL, llamada NorthWind.
Para ello debemos sacar del Control datos al SQLDataAdapter.

Arrastrarlo a nuestro formulario. Al realizar esta accin se mostrara la siguiente ventana:

Hacemos clic en Nueva Conexin.

Esta permitir realizar una nueva Conexin


hacia la

Damos clic en Aceptar.

Mostrndonos la ventana anterior con la nueva


conexin.

Hacemos clic en Siguiente:

Una ventana que nos solicitara si deseamos


usar una Instruccin SQL, crear un
procedimiento almacenado o utilizar un
procedimiento ya existente, de la siguiente
manera :

13

Seleccionamos la primera opcin (Usar Instruccin SQL).

Tenemos dos opciones:


o

Escribir la Sentencia SQL

Hacer clic en Generador de Consultas para abrir otra ventana que nos permitir escoger
las tablas a trabajar.

Podemos colocar
la Sentencia

Si hacemos clic en Generador de Consultas se mostrara la siguiente Ventana:

14

De donde podremos seleccionar la tabla(s) y colocar los criterios de condicin para el


funcionamiento de las mismas.

15

Una vez seleccionado los campos, damos clic en Aceptar.

Volviendo a la ventana anterior y mostrndose la sentencia SQL que se ah formado al


seleccionar los campos de la tabla.

Damos clic en siguiente y se


mostrara la ultima ventana
donde se muestra la
verificacin de las acciones
realizadas.

Finalmente clic en Finalizar.

Quedando la ventana de la siguiente manera:

El siguiente paso consiste en crear un Conjunto de Datos (DataSet) para ello debemos escoger
del men Datos la alternativa Generar Conjunto de Datos.

16

Esta accin llamara a una ventana en donde,


debemos seleccionar Nuevo, y se mostrara el
SqlDataAdapter1 creado.

Clic en Aceptar.

Ahora para poder mostrar los campos de la tabla seleccionada debemos; agregar un
DataGridView.

Se llama a sus propiedades, de la cual seleccionamos DataSource

Y Ejecutamos la aplicacin para poderlo visualizar.

17

Conexin a otro tipo de Base de Datos


Como se ah mencionado arriba, el Explorador de Servidores nos permite conectarnos a otras
Base de Datos, diferentes a SQL.
Vamos a conectarnos a una Base de Datos de Access (Nwind.mdb) para ello debemos seguir
los siguientes pasos:

Primero debemos abrir el Explorador de Servidores.

Le damos clic derecho sobre Conexin de Datos.

Y del men contextual, elegimos la opcin Agregar Conexin.

Se va a mostrar la ventana que va a permitir configurar la conexin a la nueva Base de Datos:

Seleccionamos Archivo de Base de Datos de Microsoft Access.

Clic en Aceptar, el cual nos mostrara la siguiente ventana:

Clic en el botn Examinar, de donde debemos buscar la base de Datos a usar.

18

Luego le damos Clic en Aceptar mostrndonos en el Explorador de Servidores la conexin


solicitada, tal como se muestra en el grafico en la parte inferior:

Si visualizamos el Explorador de Servidores, se podr ver la conexin creada.

Quedando lista para ser utilizada dentro de alguna aplicacin.

19

LABORATORIO 01

1. Crear una Base de Datos en SQL, llamada CONTROL, la cual tendr dos Tablas (Clientes y
Distritos), Ud. determine los campos y los tipos, agregarle un grupo de registros, realizar la
conexin a dicha base se datos y mostrar los nombres de los distritos sin repetir en un
ComboBox.
2. Crear un documento en Excel llamado Alumnos, el cual tendr el Cdigo, Nombre, Edad y
FechaNacimiento, ingresarle un grupo de registros, realizar la conexin a dicho archivo y
mostrarlo en un DataGridView.
3. Crear un procedimiento almacenado con la Base de Datos Hospital, el cual nos deber mostrar
todos los cargos que desempean los empleados, luego conectarnos ha dicho procedimiento
almacenado y mostrarlo en un ListBox.
4. Mostrar en un DataGridView los siguientes campos de la Base de Datos NorthWind, Nmero de
Pedido, Fecha de Pedido, Nombre de Cliente, Nombre de Empleado, Total.
5. Realizar una conexin a una base de datos de ORACLE, crear Ud. la Base de Datos y las tablas.
6. Elaborar una conexin a MySQL, crear Ud. la Base de Datos y las tablas.
7. Cul es la combinacin de teclas que permiten mostrar el Explorador de Servidores?
...
8. Cual es la ventaja de usar un DataGridView?
....
9. Cual es la diferencia entre un DataView, DataGridView y un DataGrid?
....

20

SESIN II
GENERACION DE OBJETOS I

CONTENIDO

Aplicacin ADO. Net

Objetos SQLConnection

Conexin a una Base de Datos SQL

Clase SQLException

Objeto OLEDBConnection

Objeto SQLCommand

Objeto OLEDBCommand

LABORATORIO

21

APLICACIN para ADO.NET


Antes de comenzar a trabajar con una aplicacin, debemos verificar si esta activado la
Biblioteca System.Data.dll, esto lo hacemos observando en el Explorador de Soluciones si
se encuentra al expandir el elemento Referencias, dicha biblioteca de la siguiente manera:

Si no se encontrara dicha referencia debemos,


hacer clic derecho en la pantalla Referencias y
Seleccionamos Agregar Referencia.

Se

mostrara

la

siguiente ventana, de la
cual

debemos

seleccionar

22

System.Data y luego clic en Aceptar, y podr ver que la Biblioteca se visualizara en el


Explorador de Soluciones.

Espacios de Nombres
En las aplicaciones de Ado .Net donde se va a crear y utilizar los objetos de acceso a datos se
debe impotar el espacio de nombre llamado: System.Data.
El Espacio de nombre System.Data contiene todas las clases principales para acceder a una
base de datos desde una aplicacin.
Los Espacios de Nombres pueden ser:

System.Data.SQLClient
Contiene las clases para el proveedor de datos de SQL Server.

System.Data.OleDb
Contiene las clases del proveedor de datos OleDb y es usado cuando la base de datos es
Access o Excel.

System.Data.Odbc
Contiene las clases del proveedor de datos OleDb.

System.Data.OracleClient
Contiene las clases del proveedor de datos para la base de datos de Oracle.

Para poder usar un espacio de nombre a una aplicacin, se debe abrir la ventana de cdigo
del formulario.

23

Una vez que se ha importado el espacio de nombre dentro de la aplicacin, podemos ahora
utilizar los objetos del proveedor de datos, este es de acuerdo al nombre importado.
SQLConnection

- Permite una conexiona la Base de Datos SQL Server.

SQLCommand

- Permite enviar comandos de SQL a la Base de Datos.

SQLDataReader

- Permite leer informacin de una base de datos de solo lectura.

SQLDataAdapter

- Permite llenar un DataSet y realiza las actualizaciones en la Base de Datos.

Objeto SQLConnection
SqlConnection es uno de los objetos mas importantes que tiene la tecnologa Ado .Net porque
gracias a este objeto nos podemos conectar a una Base de Datos SQL, para luego ser usada
en nuestra aplicacin.
Este objeto tiene una propiedad principal llamada ConnectionString en donde se escribe la
informacin necesaria para realizar la conexin a la Base de Datos, esta depende del tipo de
Base de Datos a la que deseamos conectar y utilizar en nuestra aplicacin.
La Cadena de conexiones la informacin que se asigna a la propiedad ConnectionString y se
forma bsicamente por los siguientes parmetros, que van separados por un punto y coma.
Provider
Usado para indicar el nombre del proveedor de datos. El proveedor es el programa desde
donde vas a obtener la informacin que vas a manejar en tu aplicacin y puede ser: SQL,
Access, Oracle o Misal.
Data Source
Usado para indicar el nombre del servidor donde se encontrara la Base de Datos a
conectar.
Indicial Catalog
Usado para indicar el nombre de la Base de Datos a la cual nos queremos conectar.
User ID

24

Usado para indicar el nombre del usuario que se conecta a la Base de Datos.
Pad
Usado para indicar la clave del usuario que esta conectndose a la Base de Datos.
Integrated Security
Indica si la conexin a la base de datos va a tener seguridad integrada, es decir si dentro de
la cadena se va a especificar el Id del usuario y su contrasea.
Si esta en False se debe especificar el Id y el Password y si es True es todo lo contrario. El
valor SSPI es el ms recomendado para este parmetro porque es similar al valor True.
Persist Security Info
Usado en la cadena de conexin para indicar si la informacin de seguridad, como la
contrasea del usuario, se devuelve como parte de la cadena de conexin. Se recomienda
si lo va a utilizar usar False o No para evitar el envi de la informacin de seguridad.
Connect Timeout
Usado para indicar la cantidad de segundos que debe durar el intento de conexin a la
Base de Datos. Si pasado el periodo establecido se producir un error. Por defecto la
cantidad en segundos es 15.

EJEMPLO PRACTICO
Conexin a una Base de Datos

Imports System
Imports System.Data.SqlClient
Public Class Form1

25

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


Button1.Click

Dim Cn As New SqlConnection


Cn.ConnectionString = "Data Source=Developers\SQLExpress;initial Catalog=Hospital;User
id=sa:password="
Cn.Open()
Cn.Close()
MsgBox("La Conexion se realizo Exitosamente", 64, "Felicitaciones")
End Sub
End Class

Al ejecutar se mostrara de la siguiente manera:

LABORATORIO 02

1. Realizar una conexin a una Base de Datos de Access, seleccionar Ud. la base de
datos a utilizar.
2. Realizar una conexin a una Base de Datos de Excel, crear un documento en Excel y
conectarte a el.
3. Crear una Conexin a la Base de Datos Hospital, creada en las clases anteriores.

26

4. Elaborar una conexin a una Base de Datos de MySql.

SQLException
La case SQLException permite controlar los errores que pueden suceder, cuando se accede a
un servidor de base de datos SQL dentro de una aplicacin.
Normalmente se crea cuando intentamos acceder a un servidor que no exista o que no esta
activo y tambin cuando el nombre o contrasea del usuario son incorrectos.
Si aprendemos a controlar estas excepciones podemos enviar los respectivos mensajes a los
usuarios sin que nuestra aplicacin termine.
Propiedades de SQLException
Class

Indica el nivel de gravedad del Error.

Errors

Almacena una colecciones de errores mediante objetos SQLError

HelpLink

Permite indicar un vinculo hacia un archivo de ayuda.

LineNumber -

Devuelve el numero de lnea de un procedimiento o bloque de


instrucciones del error.

Message

Devuelve el mensaje de error generado.

Number

Devuelve el numero del error generado.

Procedure

Devuelve el nombre del procedimiento almacenado del error.

Server

Devuelve el nombre del equipo donde se genero el error.

Source

Devuelve el nombre del proveedor donde se ha generado el error.

ERRORES MS COMUNES
Utilizando el valor de esta propiedad y una instruccin como Select Case, puede saber el tipo
de error producido y el enviarle al usuario el mensaje de error de la propiedad Message o un
mensaje si gusta de manera personalizada.
Entre los Errores mas comunes en el acceso a la informacin y servidores en SQL se tienen:
Numero

Nivel

Mensaje

27

17
4060
17142
18452
18456

16
11
16
14
14

No Existe el servidor o Acceso Denegado


No se puede abrir la Base de Datos solicitada en el inicio de sesin
Indica que el SQL esta en pausa. No se permitirn nuevas conexiones
Error al inicio de sesin no esta asociado a una conexin SQL de confianza
Otro error de inicio de sesin

Objeto OLEDBConnection
Es usado para conectarnos a orgenes de datos OLE DB como por ejemplo una base de datos
de Access.
Este objeto tiene la propiedad principal llamada ConnectionString, en donde se escribe la
informacin necesaria para realizar la conexin a la Base de Datos.

Cadena de Conexin
La estructura de la cadena de conexin de este objeto depende del origen de datos al que nos
queremos conectar, si queremos conectarnos a una base de datos de Access, la cadena se
formara bsicamente por los siguientes parmetros, los cuales van separados por un punto y
coma:

Provider

Indica el nombre del proveedor de datos y es obligatorio dentro de la cadena de conexin.

DataSource

Usado para indicar la ruta y el nombre de la Base de Datos.

EJEMPLO PRACTICO
Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=C: \Control \Colegio.mdb

Vamos a visualizar la conexin de manera Total:


Imports System
Imports System.Data.OleDb

28

Public Class Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Cn As New OleDbConnection


Dim Cadena as String
Cadena="Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C: \Control \Colegio.mdb"
Try
Cn.ConnectionString =Cadena
Cn.Open()
MsgBox("La Conexion se realizo Exitosamente", 64, "Felicitaciones")
Cn.Close()
Match Ex As OleDbException
Dim Mensaje as String
Select Case Ex.ErrorCode
Case -2147467259
Mensaje=No Existe la Base de Datos
Case Else
Mensaje=Ex.ErrorCode.ToString & & ex.Message
End Select
MsgBox (Mensaje,16,Acceso Denegado)
Match Ex As Exception
Dim Mensaje as String
Mensaje=Ex.Message
MsgBox(Mensaje,16,Verique la Sintaxis)
End Try
End Sub
End Class

OBJETO SQLCOMMAND
Despus de habernos conectado se usa con un SQLConnection y permite enviar instrucciones
SQL al servidor en forma directa o mediante procedimientos almacenados.

29

Este objeto inicialmente requiere la instruccin SQL que se desea enviar y ejecutar en el
servidor y el objeto SQLConnection donde se ha configurado la conexin al servidor donde se
desea enviar y ejecutar la instruccin SQL.
Por lo tanto como es una instruccin SQL se debe importar los espacios de nombres:
System.Data y System.Data.SQLClient, en donde se va a utilizar.
Sintaxis
Dim Variable As New SqlCommand()

Propiedades

CommandText

Usado para almacenar la instruccin SQL o el procedimiento almacenado que se desea


enviar al servidor.
Esta propiedad se usa cuando no a enviado la instruccin SQL o el nombre del
procedimiento cuando ha creado el objeto SQLCommand.

Ejemplo
Dim Cn as New Connection
Dim Cmd As New SqlCommand(Select * From Empleados,cn)
Ahora usando el CommandText es el siguiente:
Dim Cn as New Connection
Dim Cmd As New SqlCommand()
Cmd.CommandText=Select * From Empleados

CommandTimeout

Encargada para indicar la cantidad de segundos que el objeto Command debe intentar en
ejecutar el comando enviado al servidor.
Si paso el tiempo establecido, no se ejecuta el comando se produce un error. Por defecto
es de 30 segundos.
Dim Cn as New Connection

30

Dim Cmd As New SqlCommand(Select * From Empleados,cn)


Cmd.CommandTimeout=20

CommandType

Usado para indicar la forma como se van a enviar las ordenes al servidor que puede ser
una el nombre de una tabla, una instruccin SQL directa o mediante un procedimiento
almacenado. Los valores que se pueden asignar en esta propiedad son:
o

StoredProcedure Para indicar un Procedimiento almacenado, tabla(s) separadas por comas.

Text

- Para indicar que se va a usar una instruccion SQL.

Connection

- Usado para indicar donde se ejecutara el comando.

Ejemplo
Dim Cn as New Connection
Dim Cmd As New SqlCommand
Dim Cadena as String
Cadena="Data Source=Developers\SQLExpress;initial Catalog=Hospital;User id= sa: password="
Cn.ConnectionString=Cadena
Cmd.commandType=CommandType.StoredProcedure
Cmd.CommandText=Empleados_pa
Cmd.CommandTimeout=20
Cmd.Connection=Cn
o

Parameters

- Usado para enviar parmetros al procedimiento almacenado o a la

instruccin SQL. Si no se utilizan parmetros esta propiedad debe quedar vaca.


Una forma de utilizar esta propiedad es asignandole el objeto SQLParameter
previamente creado con los valores de los parmetros.
Dim Pr as New SqlParameter()

Las principales propiedades del objeto SQLParameter son:


DbType
Usado para indicar el tipo de campo de un parmetro en el proveedor.

31

Direction
Usado para indicar si el parmetro es de entrada, salida, entrada y salida o es de vuelto por
ejemplo, desde el procedimiento.
IsNullable
Usado para indicar si el parmetro acepta los valores nulos.
ParameterName
Usado para indicar el nombre del parmetro. Este nombre debe empezar con una @.
Size
Usado para indicar el tamao del parmetro cuando este es de tipo cadena.
SQLDbType
Usado para indicar el tipo de dato en SQL.
Value
Usado para indicar el valor del parmetro.

Ejemplo Practico
Para poder hacer una demostracin, primero vamos a crear un procedimiento almacenado
llamado INICIALES_PA, el cual devuelve los nombres de los autores que tienen como iniciales
las enviadas como parmetro.
Create Procedure Iniciales_pa
@Iniciales Varchar(50)
AS
Select Emp_Nro, Apellido,Oficio From Empleados Where Apellido LIKE @Iniciales + %
Order By Apellido
Ahora vamos usar este procedimiento en una aplicacin en Visual Net, donde el nombre ser
colocado en una caja de texto:

32

Dim Cn as New Connection


Dim Cmd As New SqlCommand
Dim Cadena as String
Cadena="Data Source=Developers\SQLExpress;initial Catalog=Hospital;User id=sa:
password="
Cn.ConnectionString=Cadena
Cmd.CommandType=CommandType.StoredProcedure
Cmd.CommandText=Iniciales_pa
Dim Pr as New SqlParameter()
Pr.Direction=ParameterDirection.Input
Pr.ParameterName=@Iniciales
Pr.SqlDbType=SqlDbType.VarChar
Pr.Size=50
Pr.Value=TextBox1.Text
Cmd.Parameters.Add(Pr)
Cmd.CommandTimeout=20
Cmd.Connection=Cn

METODOS DEL OBJETO SQLCOMMAND


Los mtodos ms utilizados son:
ExecuteScalar
Usado cuando el comando que enviamos al servidor solo va a devolver un valor. Si el comando
devuelve un conjunto de filas, este mtodo solo reconoce el valor de la primera columna y de la
primera fila.
ExecuteNonQuery
Usado para ejecutar comandos que no devuelven filas del servidor como: Update, Insert y
Delete. Aqu se devuelve la cantidad de filas o registros efectuados, para otras instrucciones
devuelve el valor -1.

33

ExecuteReader
Mtodo usado cuando el comando va a devolver una o una conjunto de filas y crea con ese
conjunto de filas un objeto SQLDataReader.
ExecuteXmlReader
Usado para devolver una fila o un conjunto de filas de un objeto XmlReader.
CreateParameter
Objeto para crear un objeto SQLParameter.

METODOS DEL OBJETO SQLCOMMAND


Cuando se utiliza un objeto OledbConnection, es necesario utilizar un OLEDBCOMMAND, este
le enva instrucciones SQL en forma directa o mediante procedimientos almacenados.
Por lo tanto este objeto requiere una instruccin SQL, que es la que se desea enviar y ejecutar
en la base de datos. Para utilizar el objeto debemos utilizar los espacios de nombre:
System.Data
System.Data.Oledb

34

SESIN II
GENERACION DE OBJETOS II

CONTENIDO

Objeto SQLDataReader

Objeto DataSet

Objeto DataView

LABORATORIO

35

METODOS DEL OBJETO SQLDATAREADER


Permite acceder a la informacin de una base de datos SQL de manera rpida, superando el
rendimiento de nuestra aplicacin por la velocidad que utiliza para acceder a ella, tambin
necesita poco espacio de memoria ya que solo permanece en ella un solo registro por vez.
El acceso a la informacin de este objeto es secuencial, eso quiere decir desde el primer
registro hasta el ultimo, tambin debemos tomar en cuenta que es de solo lectura.
Para usar el objeto, debemos primero definir una variable de ese tipo:
Sintaxis:
Dim Variable as SqlDataReader

Mtodo READ
Para poder acceder a la informacin del SQLDATAREADER es necesario usar un READ.
Este mtodo permite moverse al siguiente registro de un SQLDataReader, en su mayora se
utiliza un bucle con While para poder pasar de un registro a otro.
Una forma de leer un campo es usando la posicin del campo.
Objeto SQLDataReade(Numero del Campo)

Ejemplo
Dim Cn as New Connection
Dim Cmd As New SqlCommand
Dim Cadena as String
Cadena="Data Source=Developers\SQLExpress;initial Catalog=Hospital;User id=sa:password="
Cn.ConnectionString=Cadena
Dim Dr As SqlDataReader
Dim CmdEmpleados as New SqlCommand(Select Apellido,Oficio,Direccion From Empleados
Order by Apellido,cn)

36

Cn.Open()
Cmd.Connection=Cn
Dr=CmdEmpleados.ExecuteReader
Dr.Read()
Dim Apellido as String
Apellido=Dr(0)
Messagebox.Show(El Apellido es: & Apellido, Prueba)

OBJETO OLEDBDATAREADER
Permite acceder a la informacin de una base de datos diferente a SQL Server. Para ello se
usa los espacios de nombre:
System.Data
System.Data.OleDB
Estos nombres de espacios nos van a permitir conectarnos a una Base de Datos Diferente a
SQL.
Asi como en los casos anteriores, primero se debe definir una variable de ese tipo:
Dim Variable As OLEDBDataReader
Ejemplo
Dim Dr As OLEDBDataReader
Una vez definida la variable, se debe crear el objeto SQLCommand y abrir la conexin, puede
llenar el objeto SQLDataReader de la siguiente manera:
Variable= Objeto SQLCommand.ExecuteReader
Ejemplo:
Dr=CmdEmpleados.ExecuteReader

37

OBJETO DATASET
Permite almacenar y manejar la informacin de una Base de Datos en forma Desconectada. Se
lee la informacin de una Base de Datos con un objeto DataAdapter y llena dicha informacin
en el objeto DataSet.
Para eso debemos almacenarla en un objeto DataSet para poder utilizar dentro de una
aplicacin, debemos seguir los siguientes pasos:
1. Connection:
Dim Cn as New SqlCommand
2. Asignar al objeto Connection la cadena de Conexin.
Cn.ConnectionString="Data Source=Developers\SQLExpress;initial
Catalog=Hospital;User id=sa:password="
3. Crear el objeto Command que almacenara las instrucciones SQL para leer la
informacin de la Base de Datos.
Dim Cmd as New SqlCommand()
4. Asignar al Objeto Command la instruccin SQL para leer la informacin de la Base de
Datos.
Cmd.CommandText=Select * From Empleados Order by Apellido
5. Indicar que la instruccin del objeto Command se ejecute en la Conexin.
Cmd.Connection=Cn
6. Ahora crear el objeto DataAdapter para llenar el objeto DataSet con la informacin que s
e lee de la Base de Datos.
Dim Da as New SqlDataAdapter()
7. Asignar el comando que contiene la instruccin.
Da.SelectCommand=Cmd
8. Crear el objeto DataSet que almacenara en memoria y en forma desconectada toda la
informacin
Dim Ds as New DataSet
9. Llenar usando el objeto DataAdapter, el objeto DataSet con la informacin leida de la
Base de Datos.
Da.Fill(Ds)
10. Terminado el llenado, se puede utilizar de cualquier manera en la aplicacin.

38

DataGrid1.DataSource=Ds

OBJETO DATATABLE
El objeto DataTable almacena en memoria la informacin que se lee del servidor de la misma
forma que se almacena en una tabla dentro de una Base de Datos.
El DataTable se organiza mediante filas y columnas. Cuando se llena un objeto DataSet se crea
en forma automtica un objeto DataTable. La siguiente instruccin, crea en forma explicita un
objeto DataTable llamado Dt:
Dim Dt as New DataTable()
Llenado el DataSet, se puede almacenar el resultado en un objeto DataTable y utilizar este
objeto en la aplicacin.

OBJETO DATAVIEW
Este objeto permite manejar dentro de una aplicacin la informacin que recibe del DatSet.
Esta informacin recibida se almacena en forma predeterminada en un objeto DataTable y la
podemos enviar al objeto DataView para manejarla y presentarla.
Para poderla crear debemos:
Dim Nombre As New DataView

Ejemplo:
Dim MiTabla as New DataView()
Tambin se puede ir definiendo y luego creando una instancia del objeto:
Dim MiTabla as DataView
MiTabla= New DataView

39

Una vez creado el DataView se utiliza la propiedad Table para enviar la informacin que tiene el
objeto DataSet mediante el objeto DataTable.
MiTabla.Table=Ds.Tables(Empleados)

Propiedades del DATAVIEW:


ALLOWDELETE
Permite que se puede eliminar o no registros del DataView.
ALLOWEDIT
Permite editar la informacin del DataView.
ALLOWADDNEW
Permite Agregar o no nuevos registros al DataView.
COUNT
Muestra la cantidad de registros que contiene un DataView.
ITEM
Se puede acceder a la informacin de una Fila del DataView. Recordar que la primera fila y
columna tiene el numero 0.
ROWFILTER
Se utiliza para seleccionar los registros DataView, es aqu donde done la condicin que deben
cumplir los registros.
SORT
Usado para ordenar la informacin del objeto DataView.

40

SESIN III
LABORATORIOS RESUELTOS

CONTENIDO
Resumen de los temas tratados, laboratorios para reforzar lo aprendido

Laboratorio1

Laboratorio2

Laboratorio3

Laboratorio4

Laboratorio5

Laboratorio6

41

LABORATORIO 01

Elaborar una aplicacin que permita mostrar en un TreeView los Oficios de la Tabla
Empleados, y cuando hagamos clic en uno de esos Oficios deber mostrarnos los
Empleados que cumplan con dicho oficio. El diseo ser de la siguiente manera:

Imports System.Data
Imports System.Data.SqlClient
-----------------------------------------------------------------------------------------------------------------------------------------------

Public Class Form1


Const StrCN As String = "Data Source= Developers\SQLExpress;Initial Catalog=Hospital;uid=sa;pwd="
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

'Crea la conexin
Dim CN As New SqlConnection(StrCN)
'Crea un objeto SQLCommand con slo uno de cada grupo de
'nombres de las areas.
Dim CMD As New SqlCommand("Select Distinct Oficio From Empleados", CN)
Dim DR As SqlDataReader
Titulo()
'Llena el TreeView con los nombres de las areas encontradas.
TvOficio.Nodes.Clear()
Dim Padre As TreeNode
With CMD
.Connection.Open()
DR = .ExecuteReader

42

While DR.Read
Padre = New TreeNode(DR("Oficio"))
TvOficio.Nodes.Add(Padre)
End While
.Connection.Close()
End With
Private Sub TvEmpleado_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.
Forms.TreeViewEventArgs) Handles TvEmpleado.AfterSelect

Dim Oficio As String


'Almacena el Area seleccionada del TreeView
Oficio = TvOficio.SelectedNode.Text
Dim CN As New SqlConnection(StrCN)
'Selecciona slo el personal del area
Dim CMD As New SqlCommand("Select Emp_Nro,Apellido,Oficio,Fecha_Alt,Salario From Empleados
Where Oficio='" & Oficio & "' Order By Apellido", CN)
Dim DR As SqlDataReader
Dim Personal As ListViewItem
Titulo()
LblOficio.Text = "Empleado del Oficio: " & Oficio
'Muestra los datos del personal en el control ListView
With CMD
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Personal = New ListViewItem(DR("Emp_Nro").ToString, 0)
Personal.SubItems.Add(DR("Apellido"))
Personal.SubItems.Add(DR("Oficio"))
Personal.SubItems.Add(DR("Fecha_Alt"))
Personal.SubItems.Add(DR("Salario").ToString)
LvEmpleado.Items.Add(Personal)
End While
.Connection.Close()
End With
End Sub
Sub Titulo()

43

LvEmpleado.Clear()
'Asigna el formato inicial al control ListView
LvEmpleado.View = View.Details
LvEmpleado.GridLines = True
LvEmpleado.FullRowSelect = True
LvEmpleado.Columns.Add("Id", 30, HorizontalAlignment.Center)
LvEmpleado.Columns.Add("Apellido", 130, HorizontalAlignment.Left)
LvEmpleado.Columns.Add("Oficio", 120, HorizontalAlignment.Center)
LvEmpleado.Columns.Add("Fecha_Alt", 70, HorizontalAlignment.Center)
LvEmpleado.Columns.Add("Salario", 70, HorizontalAlignment.Right)
End Sub
End Class

Ejecutar la aplicacin y se mostrara la siguiente:

44

LABORATORIO 02
Haciendo unas modificaciones al ejercicio anterior ahora, vamos a poner en el TreeView el
Oficio y mostrar el nombre de los meses de Alta, para realizar una bsqueda. Tal como se
muestra de la siguiente manera:

Imports System.Data
Imports System.Data.SqlClient
----------------------------------------------------------------------------------------------------------------------------------------------

Public Class Form1


Const StrCN As String "Data Source= Developers\SQLExpress;Initial Catalog=Hospital;uid=sa;pwd="
Dim CN As New SqlConnection(StrCN)
Dim Condicion As String
Private Sub TvEmpleado_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.
Forms.TreeViewEventArgs) Handles TvEmpleado.AfterSelect

'Pregunta si se ha seleccionado un elemento


If TvOficio.SelectedNode.Level = 1 Then
Select Case TvOficio.SelectedNode.Parent.Text
Case "Oficio" 'Si se ha seleccionado una Oficio
Condicion = "Oficio='" & TvOficio.SelectedNode.Text & "'"
LblOficio.Text = "Empleados del Oficio: " & TvOficio.SelectedNode.Text
Llenar()
Case "Mes"
'Si se ha seleccionado un Mes
'Selecciona el mes con ayuda del contenido de la propiedad Tag

45

Condicion = "Month(Fecha_Alt)=" & TvOficio.SelectedNode.Tag


LblOficio.Text = "Empleados que ingreso un mes de : " & TvOficio.SelectedNode.Text
Llenar()
End Select
End If
End Sub
Sub Llenar()

Dim CMD As New SqlCommand("Select Emp_Nro,Apellido,Oficio,Fecha_Alt,Salario From Empleados


Where Oficio='" & Condicion & "' Order By Apellido", CN)
Dim DR As SqlDataReader
Dim Empleados As ListViewItem
'Asigna el formato para el ListView
Titulo()
'Muestra los datos del Empleados en el control ListView
With CMD
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Empleados = New ListViewItem(DR("Emp_Nro").ToString, 0)
Empleados.SubItems.Add(DR("Apellido"))
Empleados.SubItems.Add(DR("Oficio"))
Empleados.SubItems.Add(DR("Fecha_Alt"))
Empleados.SubItems.Add(DR("Salario").ToString)
LvEmpleado.Items.Add(Empleados)
End While
.Connection.Close()
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

Dim CN As New SqlConnection(StrCN)


'Comando para almacenar slo las Oficios que existe
Dim CMDOficios As New SqlCommand("Select Distinct Oficio From Empleados", CN)
'Comando para almacenar slo los meses que existen
Dim CMDMeses As New SqlCommand("Select Distinct Month(Emp_Nro) As mes From Empleados", CN)

46

Dim DR As SqlDataReader
Dim Padre As TreeNode
'Asigna el formato al ListView
Titulo()
'Limpia el TreeView
TvOficio.Nodes.Clear()
'Agrega las Oficios segun el contenido de la tabla
With CMDOficios
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Oficio")
TvOficio.Nodes.Add(Padre)
While DR.Read
Padre.Nodes.Add(DR("Oficio"))
End While
.Connection.Close()
End With
With CMDMeses
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Mes")
TvOficio.Nodes.Add(Padre)
While DR.Read
'Muestra el nombre del mes
Padre.Nodes.Add(MonthName(DR("Mes")))
'Almacena el nmero del mes en la propiedad Tag
Padre.Nodes(Padre.Nodes.Count - 1).Tag = DR("Mes")
End While
End With
End Sub
Sub Titulo()

LvEmpleado.Clear()
'Asigna el formato inicial al control ListView
LvEmpleado.View = View.Details
LvEmpleado.GridLines = True
LvEmpleado.FullRowSelect = True
LvEmpleado.Columns.Add("Id", 25, HorizontalAlignment.Center)

47

LvEmpleado.Columns.Add("Nombre", 120, HorizontalAlignment.Left)


LvEmpleado.Columns.Add("Sexo", 40, HorizontalAlignment.Center)
LvEmpleado.Columns.Add("Oficio", 90, HorizontalAlignment.Left)
LvEmpleado.Columns.Add("FecIngreso", 70, HorizontalAlignment.Center)
LvEmpleado.Columns.Add("Sueldo", 70, HorizontalAlignment.Right)
End Sub
End Class

48

LABORATORIO 03
Elaborar una aplicacin que permita mostrar los datos personalizados de un determinado
Empleado, la seleccin se har desde un TreeView, en donde se mostrara el Oficio y el Mes,
los cuales nos llevara a otras alternativas, al final nos mostrara el nombre (dato para la
seleccin).

Imports System.Data
Imports System.Data.SqlClient
-----------------------------------------------------------------------------------------------------------------------Public Class Form1

Const StrCN As String = ""Data Source= Developers\SQLExpress;Initial


Catalog=Hospital;uid=sa;pwd="
Dim CNEmpleados As New SqlConnection(StrCN)
Dim DREmpleados As SqlDataReader
Dim Hijo As TreeNode
Dim Condicion As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

Dim CN As New SqlConnection(StrCN)


'Comando para almacenar slo las areas que existe
Dim CMDAreas As New SqlCommand("Select Distinct Oficio From Empleados", CN)
'Comando para almacenar slo los meses que existen

49

Dim CMDMeses As New SqlCommand("Select Distinct Month(Fecha_Alt) As mes From


Empleados", CN)
Dim DR As SqlDataReader
Dim Padre As TreeNode
'Limpia el TreeView
TvEmpleado.Nodes.Clear()
'Agrega las Areas segun el contenido de la tabla
With CMDAreas
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Oficio")
TvEmpleado.Nodes.Add(Padre)
While DR.Read
Hijo = Padre.Nodes.Add(DR("Oficio"))
Condicion = "Oficio='" & DR("Oficio") & "'"
'Agrega los empleados del Area
Llenar()
End While
.Connection.Close()
End With
'Agrega los meses segun el contenido de la tabla
With CMDMeses
.Connection.Open()
DR = .ExecuteReader
Padre = New TreeNode("Mes")
TvEmpleado.Nodes.Add(Padre)
While DR.Read
'Muestra el nombre del mes
Hijo = Padre.Nodes.Add(MonthName(DR("Mes")))
Condicion = "Month(Fecha_Alt)=" & DR("Mes")
'Agrega los empleados de Sexo Masculino
Llenar()
End While
End With
End Sub
Sub Llenar()

50

'Crea un objeto Command slo con el Id y Nombre de los registros del elemento seleccionado
Dim CMDEmpleados As New SqlCommand("Select Emp_Nro,Apellido From Empleados Where " &
Condicion & " Order By Apellido", CNEmpleados)
CMDEmpleados.Connection.Open()
DREmpleados = CMDEmpleados.ExecuteReader
While DREmpleados.Read
'Muestra en el TreeView el Nombre del Empleadosl
Hijo.Nodes.Add(DREmpleados("Apellido"))
'Almacena el Id del Empleadosl en la propiedad Tag
'para que la consulta sea mas rapida
Hijo.Nodes(Hijo.Nodes.Count - 1).Tag = DREmpleados("Emp_Nro")
End While
CMDEmpleados.Connection.Close()
End Sub
Private Sub TvEmpleado_AfterSelect(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.TreeViewEventArgs) Handles TvEmpleado.AfterSelect

'Pregunta si se ha seleccionado un Empleadosl


If TvEmpleado.SelectedNode.Level = 2 Then
'Se busca el Empleadosl con el contenido de la propiedad Tag
'que contiene el Id
Condicion = "Emp_Nro=" & TvEmpleado.SelectedNode.Tag
Dim CMDEmpleados As New SqlCommand("Select Emp_Nro,Apellido,Oficio,Fecha_Alt,Salario From
Empleados Where Emp_Nro=" & Val(Condicion) & "", CNEmpleados)
CMDEmpleados.Connection.Open()
DREmpleados = CMDEmpleados.ExecuteReader
DREmpleados.Read()
'Muestra todos los datos del Empleadosl seleccionado
LblId.Text = DREmpleados("Emp_Nro")
LblApellido.Text = DREmpleados("Apellido")
LblOficio.Text = DREmpleados("Oficio")
LblFAlta.Text = DREmpleados("Fecha_Alt")
LblSalario.Text = DREmpleados("Salario").ToString
CMDEmpleados.Connection.Close()
End If
End Sub
End Class

51

LABORATORIO 04
Elaborar una aplicacin que me permita visualizar en un combo los meses del ao y en un
NumericUpDown se mostrara el ao y al presionar el botn Mostrar se visualizara la
informacin en un DataGrid.
La aplicacin trabajara con un procedimiento almacenado, este ser:
Create Procedure Datos_Pa
@Mes as SmallInt,
@Ao as SmallInt
As
Select Emp_Nro,Apellido,Oficio,Direccion, Fecha_Alt,Salario,Comision From Empleados
Where Month(Fecha_Alt)=@Mes And Year(Fecha_Alt)=@Ao

Luego de ello disear la siguiente Ventana:

UpAo
BtnMostrar

Imports System.Data
Imports System.Data.SqlClient
---------------------------------------------------------------------------------------------------------------------------------------------Public Class Form1

Const StrCN As String = ""Data Source= Developers\SQLExpress;Initial Catalog=Hospital;uid=sa;pwd="

52

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


MyBase.Load

'Llena los meses


Dim N As Byte
For N = 1 To 12
'Muestra los meses con la primera en maysculas
CboMes.Items.Add(StrConv(MonthName(N), VbStrConv.ProperCase))
Next
'Muestra el primer mes
CboMes.SelectedIndex = 0
'Muestra el ao actual
UpAo.Value = Date.Today.Year
End Sub
Private Sub BtnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
BtnMostrar.Click

Dim CN As New SqlConnection(StrCN)


'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("Datos_Pa", CN)
With CMD
.CommandType = CommandType.StoredProcedure
'Pasa los parametros al procedimiento
.Parameters.Add(New SqlParameter("@Mes", CboMes.SelectedIndex + 1))
.Parameters.Add(New SqlParameter("@Ao", UpAo.Value))
Dim DA As New SqlDataAdapter(CMD)
Dim DT As New DataTable
'Llena el DataTable
DA.Fill(DT)
'Muestra los datos en el DataGrid
DgDatos.DataSource = DT
End With
End Sub
End Class

53

LABORATORIO 05
Elaborar una aplicacin que nos permita seleccionar en un ComboBox los oficios de la tabla
Empleadosm y que al seleccionar uno de ellos se muestre en un ListView.
Para poder desarrollar la aplicacin debemos crear los siguientes procedimientos:

Create Procedure Oficio_pa


As
Select Distinct Oficio From Empleados

Create Procedure Datos2_Pa


@Oficio As Varchar(50)
As
Select Emp_Nro,Apellido,Oficio,Direccion,Fecha_Alt,Salario,Comision From Empleados
Where Oficio=@Oficio

Imports System.Data
Imports System.Data.SqlClient
---------------------------------------------------------------------------------------------------------------------------------------------Public Class Form1

Const StrCN As String = "Data Source= Developers\SQLExpress;Initial Catalog=Hospital;uid=sa;pwd="


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

54

Dim CN As New SqlConnection(StrCN)


'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("Oficio_Pa", CN)
With CMD
.CommandType = CommandType.StoredProcedure
Dim DA As New SqlDataAdapter(CMD)
Dim DT As New DataTable
'Llena el DataTable
DA.Fill(DT)
'Asigna las areas al Combo
CboOficio.DataSource = DT
CboOficio.DisplayMember = "Oficio"
End With
Formato()
End Sub
Sub Formato()

LvPersonal.Clear()
'Asigna el formato inicial al control ListView
LvPersonal.View = View.Details
LvPersonal.GridLines = True
LvPersonal.FullRowSelect = True
LvPersonal.Columns.Add("Nro", 25, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Apellido", 170, HorizontalAlignment.Left)
LvPersonal.Columns.Add("Oficio", 120, HorizontalAlignment.Left)
LvPersonal.Columns.Add("Direccion", 190, HorizontalAlignment.Left)
LvPersonal.Columns.Add("F. Alta", 90, HorizontalAlignment.Center)
LvPersonal.Columns.Add("Salario", 70, HorizontalAlignment.Right)
LvPersonal.Columns.Add("Comision", 70, HorizontalAlignment.Right)
End Sub
Private Sub BtnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
BtnMostrar.Click

Dim CN As New SqlConnection(StrCN)


Dim DR As SqlDataReader
Dim Personal As ListViewItem

55

'Asigna el formato para el ListView


Formato()
'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("Datos2_Pa", CN)
With CMD
.CommandType = CommandType.StoredProcedure
'Pasa los parametros al procedimiento
.Parameters.Add(New SqlParameter("@Oficio", CboAreas.Text))
Dim DA As New SqlDataAdapter(CMD)
.Connection.Open()
DR = .ExecuteReader
While DR.Read
Personal = New ListViewItem(DR("Emp_Nro").ToString, 0)
Personal.SubItems.Add(DR("Apellido"))
Personal.SubItems.Add(DR("Oficio"))
Personal.SubItems.Add(DR("Dir"))
Personal.SubItems.Add(DR("Fecha_Alt"))
Personal.SubItems.Add(DR("Salario").ToString)
Personal.SubItems.Add(DR("Comision").ToString)
LvPersonal.Items.Add(Personal)
End While
.Connection.Close()
End With
End Sub
End Class

56

LABORATORIO 06
Elaborar una aplicacin que me permita mostrar algunos datos de la tabla Empleados, esta bsqueda se
podra realizar cuando se ingresa el codigo o cuando se ingresa el nombre.
Tendra el siguiente aspecto:

Antes de comenzar a codificar debemos crear los siguientes procedures:


Create Procedure BuscarNro_Pa
@Nro As Int
As
Select Emp_Nro,Apellido,Oficio,Direccion,Fecha_Alt,Salario From Empleados
Where Emp_Nro=@Nro

Create Procedure BuscarNombre_Pa


@Nombre As Varchar(50)
As
Select Emp_Nro,Apellido,Oficio,Direccion,Fecha_Alt,Salario,Comision
From Empleados
Where Nombre Like @Nombre + %

57

Imports System.Data
Imports System.Data.SqlClient
----------------------------------------------------------------------------------------------------------------------------------------------Public Class Form1

Const StrCN As String = "Data Source= Developers\SQLExpress;Initial Catalog=Hospital;uid=sa;pwd="


Private Sub TxtNro_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TxtNro.KeyPress
If Asc(e.KeyChar) = 13 Then

Dim CN As New SqlConnection(StrCN)


'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("BuscarNro_Pa", CN)
TxtApellidos.Text = ""
With CMD
.CommandType = CommandType.StoredProcedure
'Pasa los parametros al procedimiento
.Parameters.Add(New SqlParameter("@Nro", TxtNro.Text))
Dim DA As New SqlDataAdapter(CMD)
Dim DT As New DataTable
'Llena el DataTable
DA.Fill(DT)
'Pregunta si el registro ha sido encontrado
If DT.Rows.Count() = 0 Then
MessageBox.Show("El Id: " & TxtBuscaId.Text & " No existe", "Verifique", MessageBoxButtons.OK,
MessageBoxIcon.Error)
TxtNro.Text = ""
Limpiar()
TxtNro.Focus()
Else
'Muestra los datos del personal encontrado
LblNro.Text = DT.Rows(0).Item("Emp_Nro").ToString()
LblApellidos.Text = DT.Rows(0).Item("Apellido")
LblOfic.Text = DT.Rows(0).Item("Oficio")
LblDireccion.Text = DT.Rows(0).Item("Dir")

58

LblFAlta.Text = DT.Rows(0).Item("Fecha_Alt").ToString
LblSalario.Text = DT.Rows(0).Item("Salario").ToString()
End If
End With
End If
End Sub
Private Sub TxtApellidos_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TxtApellidos.KeyPress

If Asc(e.KeyChar) = 13 Then
Dim CN As New SqlConnection(StrCN)
'Crea un comando con el procedimiento almacenado
Dim CMD As New SqlCommand("BuscarNombre_Pa", CN)
TxtNro.Text = ""
With CMD
.CommandType = CommandType.StoredProcedure
'Pasa los parametros al procedimiento
.Parameters.Add(New SqlParameter("@Nombre", TxtApellidos.Text))
Dim DA As New SqlDataAdapter(CMD)
Dim DT As New DataTable
'Llena el DataTable
DA.Fill(DT)
'Pregunta si el registro ha sido encontrado
If DT.Rows.Count() = 0 Then
MessageBox.Show("El Nombre: " & TxtApellidos.Text & " No existe", "Verifique",
MessageBoxButtons.OK, MessageBoxIcon.Error)
TxtApellidos.Text = ""
Limpiar()
TxtApellidos.Focus()
Else
'Muestra los datos del personal encontrado
LblNro.Text = DT.Rows(0).Item("Emp_Nro").ToString()
LblApellidos.Text = DT.Rows(0).Item("Apellido")
LblOfic.Text = DT.Rows(0).Item("Oficio")
LblDireccion.Text = DT.Rows(0).Item("Dir")
'Muestra la fecha sin la hora
LblIngreso.Text = Convert.ToDateTime DT.Rows(0). Item("Fecha_Alt")). ToString("d")

59

'Muestra la fecha con la coma para los miles


LblSueldo.Text = Convert.ToDecimal (DT.Rows(0). Item("Salario")). ToString ("#,##0.00")
End If
End With
End If
End Sub
Sub Limpiar()

LblNro.Text = ""
LblApellidos.Text = ""
LblOfic.Text = ""
LblDireccion.Text = ""
LblFAlta.Text = ""
LblSalario.Text = ""
End Sub
End Class

60

SESIN IV
TRABAJO CON CRYSTAL REPORT

CONTENIDO

Reporte Simple ( Usando una tabla )

Reporte Compuesto ( Usando Tablas Relacionadas )

Reporte Con Procedure

61

Reportes Con Crystal Report


Reporte Simple (Utilizando una tabla)
1. Activar el Studio .Net 2008
2. Nombre del Proyecto : ReporteNET
3. Guardarlo en la Carpeta Reportes , creada en la unidad C:
4. Llamar a la Ventana Frmreporte1

a.

Name :

Frmreportes01

b.

Text

Reportes de Datos

5. En el explorador de soluciones (Llamar al Cristal Report) de la siguiente manera:

62

6. Se visualiza la siguiente pantalla:

7. Se visualiza la siguiente
pantalla:

a.
b.
c.

Usar Asistente de
Informes
Estandar
Aceptar

63

8. Se visualiza la siguiente pantalla:

a.

Seleccionamos Crear Nueva Conexion

9. Se visualiza lo siguiente:
i. Aperturo OLE DB
ADO

10. Se visualiza lo siguiente:

64

Clic en la opcin:
Microsoft Oledb Provider for SQL
Server

Siguiente

En el servidor, digitar:

(local)

En el id del Usuario, digitar:

sa

Seleccionar la base de datos:


Northwind

O Tambin, puede seleccionar, autenticacin integrada (recomendable)

Seleccionar el botn:
Siguiente

11. Se visualiza la siguiente pantalla:

65

Seleccionar el botn:
Finalizar

12. Se visualiza la siguiente pantalla:

13. Se visualiza la siguiente entorno:

a.

Click derecho sobre Campos de Base de Datos del Explorador de Campos

66

14. Se visualiza la siguiente pantalla:


15. Seleccionar la alternativa que se indica en el grfico.

16. Se visualiza la siguiente pantalla:

a.

Clic en NorthWind

b.

Se va a mostrar la siguiente ventana.

67

17. Se visualiza lo siguiente:

18. Se visualiza lo siguiente:

a.

Selecciono la Tabla Employees

b.

Y click en el Boton >

68

19. Se visualiza lo
siguiente:

a.

Clic en
ACEPTAR
Se visualiza la tabla:
Employees

20. Ahora visualizando la alternativa Campos de


Base de Datos del Explorador de Campos
21. Se visualiza los campos de la tabla Employees

69

22. En la sectin1, se agrega los siguientes objetos, en el cuadro de herramientas: Crystal


Reports, se visualiza lo siguiente:

Clic y arrastre en
la

section2

23. En la Section2, insertar los siguientes: Objetos de Texto:

24. En el cuadro de herramientas, seleccionar e


insertar el objeto: Lnea

25. Se debe que visualizar as:

70

Clic derecho en el objeto:


Lnea

26. Se visualiza lo siguiente:

Objeto: Lnea

Clic en:
Dar Formato a Objeto

27. Se visualiza lo siguiente:

Seleccionar el estilo de
lnea, Ancho y Color de
Lnea

28. Se visualiza lo siguiente:

29. Se inserta los siguiente campos en la section3 (Detalles)


30. Los Campos son: EmployeeId, LastName, FirstName, Country, Photo
31. Se visualize lo siguiente:

71

32. Renombrar los ttulos o rtulos que se encuentran en la section2, como se visualiza
en la siguiente imagen:

33. El diseo final del reporte, quedara como se muestra en la siguiente imagen:

72

34. En la parte inferior de la pantalla, se visualiza lo siguiente:

Clic en: Vista previa del Informe


Principal
35. La vista previa del informe,
as:
36.

37. Ahora en el Formulario


38. Clic en la ficha:

quedara

Frmreportes01.
vb

39. En el cuadro de herramientas:

Seleccionar la opcin:
CrystalReportViewer

73

40. Se visualiza en el formulario:


En la parte superior derecha del
CrystalReportViewer, se
visualiza una flecha que seala
hacia la derecha, pulsar clic en
la flecha

41. Se visualiza:

Desactivar la casilla:
Mostrar rbol de Grupos
Clic en el vnculo:

Acoplar en contenedor
principal
42. Se visualiza lo siguiente:

CrystalReportViewer Acoplado Al
objeto Formulario
74

43. Codificando en el Form, Load del objeto formulario:


44.
Private Sub Frmreportes01_Load

Dim objreporte As New CrystalReporteDatos


objreporte.Load("C:\ ReporteNET \CrystalReporteDatos.rpt")
CrystalReportViewer1.ReportSource = objreporte
End Sub

45. Grabar y ejecutar la aplicacin se visualiza lo siguiente:

75

LABORATORIO
46. Crear los siguientes reportes de las siguientes tablas:
i. Customers
ii. Orders
iii. Products
iv. Categories
v. Shippers
vi. Suppliers
47. Invocar los reportes desde un formulario principal diseado con los controles
necesarios para si visualizacin.

Reportes Con Crystal Report


Utilizando Tablas Relacionadas
Caso B: Reporte Con Tablas Relacionadas
1. Activar el Visual Studio 2008
2. Crear el Proyecto llamado Reporte02
3. Guardarlo en una carpeta.
4. Cambiar el nombre del Formulario por FrmReporte02
5. Propiedades del formulario:

Name

: Frmreportes02

Text

: Reporte -Tablas Relacionadas

WindowState : Maximized

6. Llamar al Cristal Report y ponerle el nombre de : ReporteDatos002.rpt

76

ReporteDatos0

7. De la Galeria de Crystal Reports debemos:


a. Verificar la opcin : Usar Asistente de Informes
b. Estandar
c. Click en Aceptar

8. Nos Conectamos a la Base de Datos de NorthWind de la manera aprendida en el

primero Reporte.

77

9. Quedando de la siguiente manera :

10. Hago clic en Tablas y muestro el contenido de las mismas:


a. Selecciono las Tablas Employees, Order Details y Orders

11. Luego de ello Clic en Siguiente: (Mostrndose las Tablas Relacionadas)

78

12. Clic en Siguiente y Selecciono los siguientes campos :


a. Employees

: EmployeeId, LastName, FirstName de Employees.

b. Orders : OrderId,OrderDate,RequireDate
c. Order Details : UnitPrice,Quantity,Discount

79

13. Clic en Siguiente, se va a visualizar la pantalla de Agrupar , por lo que agruparemos

por:

Employee.EmployeeID y Orders.OrderID

14. Clic en Finalizar


15. Se visualiza la siguiente imagen:

80

16. Renombrar los siguientes Rtulos:

17. En la seccin: GroupFooterSection2(Pie de Grupo # 2. Orders.OrderId A)

Arrastrar hacia la
derecha

18. Seleccionar: Vista previa de Informe Principal

19. Ahora en el Formulario : FrmReporte002

81

20. Agregar del cuadro de herramientas (ToolBox) al Formulario un

CrystalReportViewer

21. Desactivamos Arbol de Grupos


22. Clic en Acoplar en Contenedor Principal
23. Ampliamos el formulario:
24. Codificamos en el Formulario

Private Sub Frmreportes02_Load

Dim objreportes02 As New ReportesDatos02


objreportes02.Load("C:\ ReporteNET \Reporte\ReportesDatos002.rpt")
CrystalReportViewer1.ReportSource = objreportes02
End Sub
25. Ejecutamos.

82

83

Reportes Con Crystal Report


utilizando
Procedimientos Almacenados Con Parmetros

Caso C: Reporte Con Procedimientos Almacenados


1. Activar el analizador de consultas del SQL
2. Activamos la base de datos: Northwind
3. Se genera el procedimiento almacenado: sp_entre_fechas, que nos permita
ingresar las 2 fechas, que viene a ser el rango de fechas
Create proc sp_entre_fechas
@fechaini char(10),
@fechafin char(10)
As
Set dateformat dmy
Select o.orderid,o.customerid,
Orderdate=convert(char(10),o.orderdate,103),
Ordertotal=sum(quantity*unitprice) from
Orders o inner join [order details] d
On(o.orderid=d.orderid)
Where orderdate between @fechaini and @fechafin
Group by o.orderid,o.customerid,orderdate
4. Verificamos el Procedimiento :
exec sp_lista_ordenes_fecha '14/05/1997','18/05/1997'
5. Grabar el script con el nombre: Fechas
6. Cargar ahora el Visual Studio
7. Crear un proyecto llamado : ReporteEntreFechas
8. Cambiar el nombre al Formulario por : FrmFecha
9. Nombre del formulario:
a. Name
b. Text

:
:

Frmfecha
Reportes Con Fechas

10. En el Explorador De Soluciones, pulsar clic derecho.


11. Llamar al CrystalReport de la manera ya aprendida
12. Ponerle el nombre de : ReportesFechas

84

13. Utilizar el INFORME EN BLANCO para su creacin


14. Se mostrara un informe en blanco
15. Luego ir al Explorador de Campos y de ahi a Campos de Base de Datos

16. Dar Clic derecho sobre el:

17. Se mostrara la siguiente pantalla

18. Clic en el Botn Opciones


19. Mostrndose la siguiente pantalla

85

20. Verificamos que este activado Procedimientos Almacenados


21. Aceptar
22. Luego hacer la conexin respectiva a la Base de Datos de NorthWind como ud ya
sabe.
23. Luego Clic en Aceptar
24. En el explorador de campos, pulsar clic derecho, se visualiza lo siguiente:

25. Se mostrara la siguiente Ventana


26. De la cual Activamos Procedimientos Almacenados

86

27. Buscamos el procedimiento creado en SQL

28. Pasarla a la otra lista


29. Se visualiza la siguiente pantalla:

87

30. Clic en Aceptar y se visualizara lo siguiente :

31. Clic en Aceptar


32. En el explorador de campos, se mostrara adicionado el procedimiento:

88

33. Arrastramos dichos campos al detalle de la manera como se muestra:

34. Vamos a generar un Campo


Calculado, donde se Calculara La
Suma De Los Totales acumulados,
para ello en el Explorador De
Campos:

35. Seleccionar : sp_lista_entre_fecha;1 OrderTotal


36. Clic en >
37. Tipo : Suma
38. Clic en Aceptar

89

Clic en el botn:
>

39. Arrastramos dicho campo al Pie de Pagina (Section 5)


40. En los campos de Parametros arrastramos en la Section1 (Encabezado del Informe
los parmetros como se muestran en el diseo
41. El diseo final del informe es:

42. Ahora disearemos el Formulario

43. Codificando en el formulario


90

44. Importando la librera del Crystal Report para trabajar con los procedimientos
almacenados:

45. En el load del Formulario desde cdigo desactivamos el arbol:

46. En el botn: Button1_Click


Private Sub Button1_Click
Try
Dim parametro_coleccion As New CrystalDecisions.Shared.ParameterValues()
Dim parametro_inicial As New CrystalDecisions.Shared.ParameterDiscreteValue()
Dim parametro_final As New CrystalDecisions.Shared.ParameterDiscreteValue()
Dim rep As New ReportesFechas
With rep
parametro_coleccion.Clear()
parametro_inicial.Value = TextBox1.Text
parametro_coleccion.Add(parametro_inicial)
.DataDefinition.ParameterFields("@FECHAINI").ApplyCurrentValues(parametro_coleccion)
parametro_coleccion.Clear()
parametro_final.Value = TextBox2.Text
parametro_coleccion.Add(parametro_final)
.DataDefinition.ParameterFields("@FECHAFIN").ApplyCurrentValues(parametro_coleccion)
End With
crv1.ReportSource = rep
rep = Nothing
parametro_coleccion = Nothing
Catch
MsgBox(Err.Description)

91

End Try
End Sub

47. Grabar lo digitado y Ejecutar para ver el estado final.

SESIN V
CREANDO SETUP DE INSTALACION

92

CONTENIDO

Creando Proyecto

Pasos para crear el SETUP

Agregando Icono al SETUP

Visualizando Estado Final del Proyecto

Crear un setup de instalacin


1. Crear una carpeta en la unidad C:, con el nombre de: DemoSetup
2. Activar el analizador de consultas
3. Se genera el siguiente procedimiento almacenado:
4. Utilizar la Base de Datos : NorthWind
5. Crear el siguiente procedimiento almacenado desde el analizador de consultas del SQL

create procedure sp_listado


As
Select employeeid,lastname,firstname from employees
6. Grabar el script con el nombre: DemoSetup
7. Activar el Visual Studio .net
8. Seleccionar : Nuevo Proyecto (Crear)

93

9. Renombrar: Class1.vb por ClaseSetup.vb


10. Generando el cdigo:

Imports System.Data
Imports System.Data.SqlClient

Public Class ClaseSetup

Dim cadena As String = "server=(local);user id=sa;initial catalog=northwind"


Dim sqlcone As SqlConnection
Public Sub New()
Try
sqlcone = New SqlConnection(cadena)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

94

Public Function listado() As DataTable

Dim dalistado As New SqlDataAdapter


Dim dslistado As New DataSet
Try
dalistado.SelectCommand = New SqlCommand
With dalistado.SelectCommand
.Connection = sqlcone
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_listado"
End With
sqlcone.Open()
dalistado.Fill(dslistado, "lista")
sqlcone.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dslistado.Tables("lista")
End Function
End Class
11. Grabar y Generar la librera dll
12. Activar el .net por segunda vez
13. Ahora crear un proyecto en Visual Studio Net.
14. Llamarlo AplicacionSetup
15. Renombrar el archivo: Form1.vb por: Frmaplicasetup.vb

GroupBox
Name: gbxdatos
Text: Datos de Empleados

16. Propiedades del formulario Text: Datos De Empleados


17. Diseo del formulario:
txtlastname
txtfirstname
txtid

btnprimero

btnsalir
btnanterior
btnsiguiente
btnultimo

GroupBox
Name: gbxopciones
Text: Opciones De Control

95

18. Agregar la librera dll al proyecto:

19. Se agrega un modulo con el nombre: Modsetup.vb


20. Generando el cdigo en el modulo:
Imports System.Data
Imports System.Data.SqlClient

Module Modsetup

Dim objclase As New ClaseSetup.ClaseSetup


Dim fila, contador As Integer
Public Sub cajas()

Try
With frmaplicasetup
.txtid.Text = IIf(IsDBNull(objclase.listado.Rows(fila)(0)), "", objclase.listado. Rows(fila)(0))
.txtfirstname.Text = IIf(IsDBNull(objclase.listado.Rows(fila)(1)), "", objclase.listado.Rows(fila)(1))
.txtlastname.Text = IIf(IsDBNull(objclase.listado.Rows(fila)(2)), "", objclase.listado.Rows(fila)(2))

96

End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Public Sub primero()

Try
With frmaplicasetup
contador = objclase.listado.Rows.Count - 1
If contador < 0 Then Return
fila = 0
Call cajas()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Public Sub anterior()

Try
With frmaplicasetup
contador = objclase.listado.Rows.Count
If contador < 0 Then Return
fila -= 1
If fila < 0 Then fila = 0
Call cajas()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Public Sub siguiente()

97

Try
With frmaplicasetup
contador = objclase.listado.Rows.Count
If contador < 0 Then Return
fila += 1
If fila >= contador Then fila = contador - 1
Call cajas()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Public Sub ultimo()

Try
With frmaplicasetup
contador = objclase.listado.Rows.Count - 1
If contador < 0 Then Return
fila = contador
Call cajas()
End With
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Module

21. Codificando en el Formulario:


Public Class FrmAplicaSetup
Private Sub btnprimero_Click

Call primero()
End Sub
Private Sub btnanterior_Click

Call anterior()

98

End Sub
Private Sub btnsiguiente_Click

Call siguiente()
End Sub
Private Sub btnultimo_Click

Call ultimo()
End Sub
Private Sub btnsalir_Click

End
End Sub
End Class
22. Desde el proyecto, seleccionar la opcin: Archivo

23. Se visualiza la siguiente imagen:

Seleccionar la opcin:
Instalacin e Implementacin

Seleccionar el icono:
Asistente para proyectos de instalacin

Nombre del proyecto:


SetupDemo

Seleccionar el botn:
Aceptar
Carpeta:
C:\DemoSetup\AplicacionSetup

99

24. Se visualiza la siguiente pantalla:

25. Se visualiza la siguiente pantalla:

100

26. Se visualiza la siguiente pantalla:

Seleccionar la primera opcin:


Recursos adaptados de AplicacionSetup

En la figura, podemos escoger de 4 opciones:


Crear un programa de instalacin para una aplicacin Windows
Crear un programa de instalacin para una aplicacin Web.
Crear un modulo de combinacin para Windows Installer.
Crear un archivo CAB descargable.
En las 2 primeras opciones conduce a la creacin de un programa de
instalacin que el usuario ejecutara para instalar la aplicacin en su PC.
La tercera y cuarta opcin creara un paquete redistribuible, que puede
ser combinado con otros paquetes para formar una solucin de
instalacin completa y personalizable en la que se podrn actualizar
fcilmente los componentes individuales sin que se vea afectado el
paquete general.

27. Se visualiza la siguiente ventana:

En la ventana se podr incluir los archivos adicionales que se desee


distribuir al usuario final, tales como el archivo Lame, los archivos de
documentacin, los archivos de Ayuda, las bases de datos iniciales,
etc. Haga clic en el botn Agregar para designar que archivos incluir,
cuando haya terminado, haga clic en siguiente, el cual mostrara la
ventana que resume las acciones que va a realizar el asistente.
Seleccionar en:
AplicacionSetup.exe

Clic en: Agregar

Clic en: Abrir

101

28. Se visualiza la siguiente pantalla:

102

29. Clic en FINALIZAR.


30. En el explorador de soluciones, se visualiza:

31. En el explorador, seleccionar: SetupDemo, llamar a la ventana de propiedades


32. En la ventana de propiedades:
33. Propiedad Autor: Wiener
34. En Description: Setup De Desplazamiento

Wiener

35. En Manufacturer: Empresa Los Lobos de Ipal

Wiener
Wiener

36. En ProductName: Setup de Instalacin de Datos

103

37. RemovePreviousVersions = True

Se fija en true, para quitar las versiones anteriores

Wiener

38. Titile: Instalador del Proyecto

de Desplazamiento

104

39. Clic derecho en: Men Programas del Usuario:

40. En el panel derecho de: Carpeta de la Aplicacin, pulsar clic derecho:

Clic en la opcin:
Crear Nuevo Acceso Directo

105

41. Se visualiza la siguiente ventana:

Doble clic en la carpeta:


Carpeta de la aplicacin

42. Se visualiza la siguiente pantalla:


Clic en el archivo ejecutable:
AplicacinSetup.exe

Clic en el botn:
Aceptar

106

43. Renombrar : Acceso directo a AplicacionSetup.exe por: Acceso A la Aplicacin

Arrastrar el icono de acceso directo: Acceso A la Aplicacin, que se encuentra


en la carpeta: Carpeta de la aplicacin, hacia la carpeta: DemoSetupDesplaza

44. Seleccionar la carpeta: DemoSetupDesplaza

Icono de Acceso Directo: Acceso A la


Aplicacin, que se encuentra en la carpeta:
DemoSetupDesplaza

45. En el explorador de soluciones:

Clic derecho en:


SetupDemo

Clic en la opcin:
Generar

107

46. En la parte inferior izquierda de la

pantalla, se visualiza lo siguiente:


47. Se visualiza lo siguiente:

48. Cerrar el .net


49. Activar el explorador de Windows
50. En el panel izquierdo, en la unidad C:

51. Expandir las carpetas:

Doble Clic en el
archivo:

52. Se visualiza la siguiente pantalla:

108

53. Se visualiza la siguiente pantalla:

109

54. En el men inicio:

55. Abrir el proyecto de: SetupDemo


56. Seleccionar la carpeta:
DemoSetupDesplaza
57. Seleccionar el icono de acceso directo:
Acceso A La Aplicacin
58. Pulsar: F4 (Ventana de Propiedades)

110

59. En la ventana de propiedades:

60. Se visualiza la siguiente ventana:


61. Clic en Examinar

Doble clic en la carpeta:


Carpeta de la aplicacin

62. Clic en el botn: Agregar Archivo

111

63. abrir el proyecto


64. En el explorador de soluciones:

Archivo de icono agregado

112

65. Instalar el programa otra vez


66. Luego clic Inicio - Programas - DemoSetupDesplaza - Acceso de

Aplicacion

113

67. Se visualiza lo siguiente:

114

SESIN VI
SISTEMA FINAL

CONTENIDO

Desarrollo Sistema Final

Pasos a Seguir

Mdulos a utilizar

115

SISTEMA INKAFARMA
Base de Datos Inkafarma

116

Crear un proyecto con el nombre de:

InkaFarma.

Para comenzar con nuestro proyecto debemos crear las


siguientes alternativas en nuestro proyecto, esta debe
tener el siguiente aspecto:

En la carpeta Clases debemos :

CLASES:
CCliente:
Public Class CCliente
Inherits CConexion
Private xcod_cli As String
Private xpat_cli As String
Private xmat_cli As String
Private xnom_cli As String
Private xapnom_cli As String
Private xcod_dis As String
Private xdir_cli As String
Private xtelef_cli As String
Private xtipo_cli As String
Private xruc_cli As String
Public Property cod_cli() As String
Get
Return xcod_cli
End Get
Set(ByVal value As String)
xcod_cli = value
End Set
End Property
Public Property pat_cli() As String
Get
Return xpat_cli
End Get
Set(ByVal value As String)
xpat_cli = value
End Set
End Property
Public Property mat_cli() As String
Get
Return xmat_cli

117

End Get
Set(ByVal value As String)
xmat_cli = value
End Set
End Property
Public Property nom_cli() As String
Get
Return xnom_cli
End Get
Set(ByVal value As String)
xnom_cli = value
End Set
End Property
Public Property apnom_cli() As String
Get
Return xapnom_cli
End Get
Set(ByVal value As String)
xapnom_cli = value
End Set
End Property
Public Property cod_dis() As String
Get
Return xcod_dis
End Get
Set(ByVal value As String)
xcod_dis = value
End Set
End Property
Public Property dir_cli() As String
Get
Return xdir_cli
End Get
Set(ByVal value As String)
xdir_cli = value
End Set
End Property
Public Property telef_cli() As String
Get
Return xtelef_cli
End Get
Set(ByVal value As String)
xtelef_cli = value
End Set
End Property
Public Property tipo_cli() As String
Get
Return xtipo_cli
End Get
Set(ByVal value As String)
xtipo_cli = value
End Set
End Property
Public Property ruc_cli() As String
Get

118

Return xruc_cli
End Get
Set(ByVal value As String)
xruc_cli = value
End Set
End Property
Public Sub Guardar_(ByVal xcod_cli As String, ByVal xpat_cli As String, ByVal xmat_cli As String,
ByVal xnom_cli As String, ByVal xapnom_cli As String, ByVal xcod_dis As String, ByVal xdir_cli
As String, ByVal xtelef_cli As String, ByVal xtipo_cli As String, ByVal xruc_cli As String)
cn.Open()
Try
cmd.CommandText = "INSERT INTO CLIENTE VALUES ('" & xcod_cli & "','" & xpat_cli & "','" &
xmat_cli & "','" & xnom_cli & "','" & xapnom_cli & "','" & xcod_dis & "','" & xdir_cli & "','" & xtelef_cli & "','" &
xtipo_cli & "','" & xruc_cli & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R ")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal xcod_cli As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT
CLI.cod_cli,CLI.pat_cli,CLI.mat_cli,CLI.nom_cli,CLI.apnom_cli,DIS.distrito,CLI.dir_cli,CLI.telef_cli,CLI.tipo
_cli,CLI.ruc_cli
from CLIENTE CLI,DISTRITO DIS where DIS.cod_dis=CLI.cod_dis AND
CLI.COD_CLI='" & xcod_cli & "' OR CLI.APNOM_CLI='" & xcod_cli & "'"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
cod_cli = dt.Rows(0).Item("cod_cli")
pat_cli = dt.Rows(0).Item("pat_cli")
mat_cli = dt.Rows(0).Item("mat_cli")
nom_cli = dt.Rows(0).Item("nom_cli")
apnom_cli = dt.Rows(0).Item("apnom_cli")
cod_dis = dt.Rows(0).Item("distrito")
dir_cli = dt.Rows(0).Item("dir_cli")
telef_cli = dt.Rows(0).Item("telef_cli")
tipo_cli = dt.Rows(0).Item("tipo_cli")
ruc_cli = dt.Rows(0).Item("ruc_cli")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod_cli As String, ByVal xpat_cli As String, ByVal xmat_cli As
String, ByVal xnom_cli As String, ByVal xapnom_cli As String, ByVal xcod_dis As String, ByVal
xdir_cli As String, ByVal xtelef_cli As String, ByVal xtipo_cli As String, ByVal xruc_cli As String)
cn.Open()

119

cmd.CommandText = "update CLIENTE set pat_cli='" & xpat_cli & "',mat_cli='" & xmat_cli &
"',nom_cli='" & xnom_cli & "',apnom_cli='" & xapnom_cli & "',cod_dis='" & xcod_dis & "',dir_cli='" & xdir_cli
& "',telef_cli='" & xtelef_cli & "',tipo_cli='" & xtipo_cli & "',ruc_cli='" & xruc_cli & "' where cod_cli='" &
xcod_cli & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
End Class
CConexin:
Imports System.Data
Imports System.Data.SqlClient
Imports formulario = System.Windows.Forms
Public Class CConexion
Public cn As New SqlConnection("data source=(local); initial catalog =BDInkafarma; user id
=sa;Integrated Security=True;")
Public cmd As New SqlCommand
Public da As New SqlDataAdapter
Public ds As New DataSet
Public dt As New DataTable
Public dv As New DataView
Public dr As SqlDataReader
Public XCOD_ As String
End Class
Cdistrito:
Imports INKAFARMA.CConexion
Imports formulario = System.Windows.Forms
Public Class CDistrito
Inherits CConexion
Private xcod_dis As String
Private xdistrito As String
Public Property cod_dis() As String
Get
Return xcod_dis
End Get
Set(ByVal value As String)
xcod_dis = value
End Set
End Property
Public Property distrito() As String
Get
Return xdistrito
End Get
Set(ByVal value As String)
xdistrito = value
End Set
End Property
Public Sub Guardar_(ByVal xcod_dis As String, ByVal xdistrito As String)
cn.Open()
Try
cmd.CommandText = "INSERT INTO DISTRITO VALUES ('" & xcod_dis & "','" & xdistrito & "')"

120

cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal xcod_dis As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT * FROM DISTRITO WHERE COD_DIS='" & xcod_dis & "' OR
DISTRITO='" & xcod_dis & "'"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
cod_dis = dt.Rows(0).Item("cod_dis")
distrito = dt.Rows(0).Item("distrito")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod_dis As String, ByVal xdistrito As String)
cn.Open()
cmd.CommandText = "update DISTRITO set distrito='" & xdistrito & "'where cod_dis='" & xcod_dis &
"'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
End Class
CEAlmacen:
Public Class CEAlmacen
Inherits CConexion
Private xcod_ealm As String
Private xpat_ealm As String
Private xmat_ealm As String
Private xnom_ealm As String
Private xapnom_ealm As String
Private xcod_dis As String
Private xdir_ealm As String
Public Property cod_ealm() As String
Get
Return xcod_ealm
End Get
Set(ByVal value As String)
xcod_ealm = value
End Set
End Property

121

Public Property pat_ealm() As String


Get
Return xpat_ealm
End Get
Set(ByVal value As String)
xpat_ealm = value
End Set
End Property
Public Property mat_ealm() As String
Get
Return xmat_ealm
End Get
Set(ByVal value As String)
xmat_ealm = value
End Set
End Property
Public Property nom_ealm() As String
Get
Return xnom_ealm
End Get
Set(ByVal value As String)
xnom_ealm = value
End Set
End Property
Public Property apnom_ealm() As String
Get
Return xapnom_ealm
End Get
Set(ByVal value As String)
xapnom_ealm = value
End Set
End Property
Public Property cod_dis() As String
Get
Return xcod_dis
End Get
Set(ByVal value As String)
xcod_dis = value
End Set
End Property
Public Property dir_ealm() As String
Get
Return xdir_ealm
End Get
Set(ByVal value As String)
xdir_ealm = value
End Set
End Property
Public Sub Guardar_(ByVal xcod_ealm As String, ByVal xpat_ealm As String, ByVal xmat_ealm As
String, ByVal xnom_ealm As String, ByVal xapnom_ealm As String, ByVal xcod_dis As String,
ByVal xdir_ealm As String)
cn.Open()
Try

122

cmd.CommandText = "INSERT INTO EMPLEADO VALUES ('" & xcod_ealm & "','" & xpat_ealm &
"','" & xmat_ealm & "','" & xnom_ealm & "','" & xapnom_ealm & "','" & xcod_dis & "','" & xdir_ealm & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal xcod_emp As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT
EAL.cod_ealm,EAL.pat_ealm,EAL.mat_ealm,EAL.nom_ealm,EAL.apnom_ealm,DIS.distrito,EAL.dir_ealm
FROM EALMACEN EAL,DISTRITO DIS WHERE DIS.cod_dis=EAL.cod_dis AND EAL.COD_ealm='" &
xcod_emp & "' OR EAL.APNOM_EALM='" & xcod_emp & "' "
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
cod_ealm = dt.Rows(0).Item("cod_ealm")
pat_ealm = dt.Rows(0).Item("pat_ealm")
mat_ealm = dt.Rows(0).Item("mat_ealm")
nom_ealm = dt.Rows(0).Item("nom_ealm")
apnom_ealm = dt.Rows(0).Item("apnom_ealm")
cod_dis = dt.Rows(0).Item("distrito")
dir_ealm = dt.Rows(0).Item("dir_ealm")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod_ealm As String, ByVal xpat_ealm As String, ByVal xmat_ealm
As String, ByVal xnom_ealm As String, ByVal xapnom_ealm As String, ByVal xcod_dis As String,
ByVal xdir_ealm As String)
cn.Open()
cmd.CommandText = "update EALMACEN set pat_ealm='" & xpat_ealm & "',mat_ealm='" &
xmat_ealm & "',nom_ealm='" & xnom_ealm & "',apnom_ealm='" & xapnom_ealm & "',cod_dis='" &
xcod_dis & "',dir_ealm='" & xdir_ealm & "' where cod_ealm='" & xcod_ealm & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
End Class
CEMPLEADO
Public Class CEmpleado
Inherits CConexion

123

Private xcod_emp As String


Private xpat_emp As String
Private xmat_emp As String
Private xnom_emp As String
Private xapnom_emp As String
Private xcod_dis As String
Private xdir_emp As String
Public Property cod_emp() As String
Get
Return xcod_emp
End Get
Set(ByVal value As String)
xcod_emp = value
End Set
End Property
Public Property pat_emp() As String
Get
Return xpat_emp
End Get
Set(ByVal value As String)
xpat_emp = value
End Set
End Property
Public Property mat_emp() As String
Get
Return xmat_emp
End Get
Set(ByVal value As String)
xmat_emp = value
End Set
End Property
Public Property nom_emp() As String
Get
Return xnom_emp
End Get
Set(ByVal value As String)
xnom_emp = value
End Set
End Property
Public Property apnom_emp() As String
Get
Return xapnom_emp
End Get
Set(ByVal value As String)
xapnom_emp = value
End Set
End Property
Public Property cod_dis() As String
Get
Return xcod_dis
End Get
Set(ByVal value As String)
xcod_dis = value
End Set
End Property

124

Public Property dir_emp() As String


Get
Return xdir_emp
End Get
Set(ByVal value As String)
xdir_emp = value
End Set
End Property
Public Sub Guardar_(ByVal xcod_emp As String, ByVal xpat_emp As String, ByVal xmat_emp As
String, ByVal xnom_emp As String, ByVal xapnom_emp As String, ByVal xcod_dis As String,
ByVal xdir_emp As String)
cn.Open()
Try
cmd.CommandText = "INSERT INTO EMPLEADO VALUES ('" & xcod_emp & "','" & xpat_emp & "','" &
xmat_emp & "','" & xnom_emp & "','" & xapnom_emp & "','" & xcod_dis & "','" & xdir_emp & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal xcod_emp As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT
EMP.cod_emp,EMP.pat_emp,EMP.mat_emp,EMP.nom_emp,EMP.apnom_emp,DIS.distrito,EMP.dir_emp
from EMPLEADO EMP,DISTRITO DIS where DIS.cod_dis=EMP.cod_dis AND EMP.COD_EMP='" &
xcod_emp & "' OR EMP.APNOM_EMP='" & xcod_emp & "'"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
cod_emp = dt.Rows(0).Item("cod_emp")
pat_emp = dt.Rows(0).Item("pat_emp")
mat_emp = dt.Rows(0).Item("mat_emp")
nom_emp = dt.Rows(0).Item("nom_emp")
apnom_emp = dt.Rows(0).Item("apnom_emp")
cod_dis = dt.Rows(0).Item("distrito")
dir_emp = dt.Rows(0).Item("dir_emp")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod_emp As String, ByVal xpat_emp As String, ByVal xmat_emp As
String, ByVal xnom_emp As String, ByVal xapnom_emp As String, ByVal xcod_dis As String,
ByVal xdir_emp As String)
cn.Open()

125

cmd.CommandText = "update EMPLEADO set pat_emp='" & xpat_emp & "',mat_emp='" &
xmat_emp & "',nom_emp='" & xnom_emp & "',apnom_emp='" & xapnom_emp & "',cod_dis='" & xcod_dis
& "',dir_emp='" & xdir_emp & "' where cod_emp='" & xcod_emp & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
Cfactura:
Imports formulario = System.Windows.Forms
Public Class CFactura
Inherits CConexion
'TABLA FACTURA -------------Private xcod_cli, xnum_fac, xfecha_fac, xcod_tdoc, xcod_emp As String
Private xstot_fac As Double
Private xigv_fac As Double
Private xtot_fac As Double
Dim subtotal = 0
'TABLA DETALLE -------------Private xcod, xprod As String
Private xpres, xcant, ximp As Double
'CALCULO -------------------Public XSTOT As Double = 0
Public XIGV As Double = 0
Public XTOT As Double = 0
Public Property num_fac() As String
Get
Return xnum_fac
End Get
Set(ByVal value As String)
xnum_fac = value
End Set
End Property
Public Property cod_cli() As String
Get
Return xcod_cli
End Get
Set(ByVal value As String)
xcod_cli = value
End Set
End Property
Public Property fecha_fac() As String
Get
Return xfecha_fac
End Get
Set(ByVal value As String)
xfecha_fac = value
End Set
End Property
Public Property cod_tdoc() As String
Get

126

Return xcod_tdoc
End Get
Set(ByVal value As String)
xcod_tdoc = value
End Set
End Property
Public Property cod_emp() As String
Get
Return xcod_emp
End Get
Set(ByVal value As String)
xcod_emp = value
End Set
End Property
Public Property stot_fac() As Double
Get
Return xstot_fac
End Get
Set(ByVal value As Double)
xstot_fac = value
End Set
End Property
Public Property igv_fac() As Double
Get
Return xigv_fac
End Get
Set(ByVal value As Double)
xigv_fac = value
End Set
End Property
Public Property tot_fac() As Double
Get
Return xtot_fac
End Get
Set(ByVal value As Double)
xtot_fac = value
End Set
End Property
Sub agregar_linea(ByVal xcod As String, ByVal xprod As String, ByVal xstock As Double, ByVal
xprec As Double, ByVal xcant As Integer)
cn.Open()
If xstock < xcant Then
MsgBox("No hay suficiente Stock", MsgBoxStyle.Information, "Mensaje")
Else
Try
Dim ximp = Math.Round(Val(xprec) * Val(xcant), 2)
cmd.CommandText = "insert into DETALLE values ('" & xcod & "','" & xprod & "','" & xprec & "','"
& xcant & "','" & ximp & "') "
cmd.Connection = cn
cmd.ExecuteNonQuery()
subtotal = Math.Round(Val(xprec) * Val(xcant), 2)
stot_fac = Math.Round(stot_fac + subtotal, 2)
igv_fac = Math.Round(stot_fac * 0.19, 2)
tot_fac = Math.Round(stot_fac + igv_fac, 2)

127

Catch ex As Exception
MsgBox("No se pudo realizar la operacin correctamente", MsgBoxStyle.Exclamation,
"Mensaje")
End Try
End If
cn.Close()
End Sub
Sub quitar_linea(ByVal codi As String)
cn.Open()
Try
cmd.CommandText = "delete from DETALLE where CODIGO='" & Trim(codi) & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("No hay Productos", MsgBoxStyle.Exclamation, "Mensaje")
End Try
cn.Close()
End Sub
Sub Guardar_(ByVal xnum_fac As String, ByVal xcod_tdoc As String, ByVal xfecha_fac As String,
ByVal xcod_cli As String, ByVal xcod_emp As String, ByVal xstot_fac As Double, ByVal xigv_fac
As Double, ByVal xtot_fac As Double)
'TABLA FACTURA --------------------------cn.Open()
Try
cmd.CommandText = "INSERT INTO FACTURA VALUES('" & xnum_fac & "', '" & xcod_tdoc & "','" &
CDate(xfecha_fac) & "','" & xcod_cli & "','" & xcod_emp & "' ,'" & xstot_fac & "','" & xigv_fac & "','" &
xtot_fac & "' )"
cmd.Connection = cn
cmd.ExecuteNonQuery()
' cn.Close()
'TABLA DETALLE_AUXILIAR -------------------Dim n As Integer = 0
' cn.Open()
ds.Tables.Clear()
cmd.CommandText = "Select * from DETALLE"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(ds, "DETALLE")
For n = 0 To ds.Tables("DETALLE").Rows.Count - 1
Dim codf = ds.Tables("DETALLE").Rows(n).Item(0)
Dim cant = ds.Tables("DETALLE").Rows(n).Item(3)
Dim importe = ds.Tables("DETALLE").Rows(n).Item(4)
' GUARDANDO TABLA DETALLE --------------cmd.CommandText = "Insert into detalle_factura values ('" & xnum_fac & "','" & codf & "','" & Val(cant) &
"','" & Val(importe) & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
' ACTUALIZA STOCK ----------------------' ==================
dt.Clear()
cmd.CommandText = "SELECT STOCK FROM MEDICAMENTO WHERE cod_med= '" & codf
& "'"
cmd.Connection = cn

128

da.SelectCommand = cmd
da.Fill(dt)
Dim stock = dt.Rows(0).Item("stock")
' ===================
cmd.CommandText = "UPDATE MEDICAMENTO SET STOCK='" & Val(stock) - Val(cant) & "' WHERE
cod_med='" & codf & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
' ===================
Next
'------------------------------------------------------------MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar el documento, porfabor verifique sus datos", MsgBoxStyle.Critical,
"E R R O R")
End Try
cn.Close()
End Sub
Sub NUEVO()
cn.Open()
cmd.CommandText = "delete from DETALLE"
cmd.Connection = cn
cmd.ExecuteNonQuery()
cn.Close()
End Sub
Sub DETALLE_()
Dim n As Integer = 0
cn.Open()
ds.Tables.Clear()
cmd.CommandText = "Select * from DETALLE"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(ds, "DETALLE")
For n = 0 To ds.Tables("DETALLE").Rows.Count - 1
Dim codf = ds.Tables("DETALLE").Rows(n).Item(0)
Dim cant = ds.Tables("DETALLE").Rows(n).Item(3)
Dim importe = ds.Tables("DETALLE").Rows(n).Item(4)
Next
cn.Close()
End Sub

CFMedicamento:
Imports INKAFARMA.CConexion
Imports formulario = System.Windows.Forms
Public Class CFmedicamento
Inherits CConexion
Private xcod As String
Private xmedicam As String
Private xpot As String
Private xlab As String

129

Private xunimed As String


Private xpres As String
Public Property cod() As String
Get
Return xcod
End Get
Set(ByVal value As String)
xcod = value
End Set
End Property
Public Property medicam() As String
Get
Return xmedicam
End Get
Set(ByVal value As String)
xmedicam = value
End Set
End Property
Public Property pot() As String
Get
Return xpot
End Get
Set(ByVal value As String)
xpot = value
End Set
End Property
Public Property lab() As String
Get
Return xlab
End Get
Set(ByVal value As String)
xlab = value
End Set
End Property
Public Property unimed() As String
Get
Return xunimed
End Get
Set(ByVal value As String)
xunimed = value
End Set
End Property
Public Property pres() As String
Get
Return xpres
End Get
Set(ByVal value As String)
xpres = value
End Set
End Property
Public Sub Mostrar_()
cn.Open()
ds.Tables.Clear()
cmd.CommandText = "VER_ARTE"
cmd.Connection = cn

130

da.SelectCommand = cmd
da.Fill(ds)
dv = New DataView(ds.Tables(0))
cn.Close()
End Sub
Public Sub Guardar_(ByVal xcod As String, ByVal xmedicam As String, ByVal xpot As String,
ByVal xlab As String, ByVal xunimed As String, ByVal xpres As String)
cn.Open()
Try
cmd.CommandText = "INSERT INTO FMEDICAMENTO VALUES ('" & xcod & "','" & xmedicam & "','" &
xpot & "','" & xlab & "','" & xunimed & "','" & xpres & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal XCODIGO As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT
FMED.cod_fmed,MED.medicamento,POT.potencia,LAB.laboratorio,UMED.unidadmed,PRES.presentacio
n FROM MEDICAMENTO MED,POTENCIA POT,LABORATORIO LAB,UNIDADES_MEDIDA
UMED,PRESENTACION PRES,FMEDICAMENTO FMED WHERE MED.cod_med=FMED.cod_med and
POT.cod_pot=FMED.cod_pot and LAB.cod_lab=FMED.cod_lab and UMED.cod_unid=FMED.cod_unid
AND PRES.cod_pres=FMED.cod_pres and FMED.COD_FMED= '" & XCODIGO & "' "
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
medicam = dt.Rows(0).Item("medicamento")
pot = dt.Rows(0).Item("potencia")
lab = dt.Rows(0).Item("laboratorio")
unimed = dt.Rows(0).Item("unidadmed")
pres = dt.Rows(0).Item("presentacion")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod As String, ByVal xmedicam As String, ByVal xpot As String,
ByVal xlab As String, ByVal xunimed As String, ByVal xpres As String)
cn.Open()
cmd.CommandText = "update FMEDICAMENTO set cod_med='" & xmedicam & "',cod_pot='" & xpot &
"',cod_lab='" & xlab & "',cod_unid='" & xunimed & "',cod_pres='" & xpres & "' where cod_fmed='" & xcod &
"'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
End Class

131

Ckardek
Imports formulario = System.Windows.Forms
Imports INKAFARMA.CKardex
Public Class CKardex
Inherits CConexion
Private xcod As String
Private xfecha As String
Private xfmed As String
Private xprecio As Decimal
Private xstock As Integer
Public Property cod() As String
Get
Return xcod
End Get
Set(ByVal value As String)
xcod = value
End Set
End Property
Public Property fecha() As String
Get
Return xfecha
End Get
Set(ByVal value As String)
xfecha = value
End Set
End Property
Public Property fmed() As String
Get
Return xfmed
End Get
Set(ByVal value As String)
xfmed = value
End Set
End Property
Public Property precio() As Double
Get
Return xprecio
End Get
Set(ByVal value As Double)
xprecio = value
End Set
End Property
Public Property stock() As Integer
Get
Return xstock
End Get
Set(ByVal value As Integer)
xstock = value
End Set
End Property
Public Sub Guardar_(ByVal xcod As String, ByVal xfecha As String, ByVal xfmed As String, ByVal
xprecio As Double, ByVal xstock As Integer)

132

cn.Open()
Try
cmd.CommandText = "INSERT INTO FICHA_KARDEX VALUES ('" & xcod & "','" & CDate(xfecha) & "','" &
xfmed & "','" & Val(xprecio) & "','" & xstock & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal XCODIGO As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT * FROM FICHA_KARDEX WHERE COD_f='" & XCODIGO & "' "
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
cod = dt.Rows(0).Item("cod_f")
fecha = dt.Rows(0).Item("fecha_f")
fmed = dt.Rows(0).Item("cod_fmed")
precio = dt.Rows(0).Item("costo")
stock = dt.Rows(0).Item("stock")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod As String, ByVal xfecha As String, ByVal xfmed As String,
ByVal xprecio As Decimal, ByVal xstock As Integer)
cn.Open()
Try
cmd.CommandText = "update FICHA_KARDEX set fecha_f='" & CDate(xfecha) & "',cod_fmed='" &
xfmed & "',costo='" & Val(xprecio) & "',stock='" & xstock & "' where cod_f='" & xcod & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
Catch ex As Exception
MsgBox("Nose pudo actualizar los datos", MsgBoxStyle.Critical, "ERROR")
End Try
cn.Close()
End Sub
End Class

COrden_Compra:

133

Public Class COrden_compra


Inherits CConexion
Private xnum_ord, xcod_tdoc, xfecha_ord, xcod_prov, xcod_ealm, xobs_ord As String
Private xstot_ord As Double = 0
Private xigv_ord As Double = 0
Private xtot_ord As Double = 0
Dim subtotal = 0
'-------------TABLA DETALLE -------------Private xcod, xprod As String
Private xpres, xcant, ximp As Double
Private SUMT As Double = 0
Public Ostot_ord, Oigv_ord, Otot_ord As Double
Public Property num_ord() As String
Get
Return xnum_ord
End Get
Set(ByVal value As String)
xnum_ord = value
End Set
End Property
Public Property cod_tdoc() As String
Get
Return xcod_tdoc
End Get
Set(ByVal value As String)
xcod_tdoc = value
End Set
End Property
Public Property fecha_ord() As String
Get
Return xfecha_ord
End Get
Set(ByVal value As String)
xfecha_ord = value
End Set
End Property
Public Property cod_prov() As String
Get
Return xcod_prov
End Get
Set(ByVal value As String)
xcod_prov = value
End Set
End Property
Public Property cod_ealm() As String
Get
Return xcod_ealm
End Get
Set(ByVal value As String)
xcod_ealm = value
End Set
End Property
Public Property obs_ord() As String

134

Get
Return xobs_ord
End Get
Set(ByVal value As String)
xobs_ord = value
End Set
End Property
Public Property stot_ord() As Double
Get
Return xstot_ord
End Get
Set(ByVal value As Double)
xstot_ord = value
End Set
End Property
Public Property igv_ord() As Double
Get
Return xigv_ord
End Get
Set(ByVal value As Double)
xigv_ord = value
End Set
End Property
Public Property tot_ord() As Double
Get
Return xtot_ord
End Get
Set(ByVal value As Double)
xtot_ord = value
End Set
End Property
Sub agregar_linea(ByVal CODIGO As String, ByVal PRODUCTO As String, ByVal PRECIO As
Double, ByVal CANTIDAD As Integer)
cn.Open()
Try
Dim IMPORTE = Math.Round(Val(PRECIO) * Val(CANTIDAD), 2)
cmd.CommandText = "insert into DETALLE values ('" & CODIGO & "','" & PRODUCTO & "','" & PRECIO &
"','" & CANTIDAD & "','" & IMPORTE & "') "
cmd.Connection = cn
cmd.ExecuteNonQuery()
subtotal = Math.Round((PRECIO * CANTIDAD), 2)
stot_ord = Math.Round(stot_ord + subtotal, 2)
igv_ord = Math.Round(stot_ord * 0.19, 2)
tot_ord = Math.Round(stot_ord + igv_ord, 2)
Catch ex As Exception
MsgBox("Verificar datos, vuelva a intentarlo ", MsgBoxStyle.Critical, "ERROR")
End Try
cn.Close()
End Sub
Sub Quitar_Linea(ByVal codi As String)
cn.Open()
Try

135

cmd.CommandText = "delete from DETALLE where CODIGO='" & Trim(codi) & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
'CALCULOS_
Catch ex As Exception
MsgBox("Verificar datos, vuelva a intentarlo ", MsgBoxStyle.Critical, "ERROR")
End Try
cn.Close()
End Sub
Sub Guardar_(ByVal xnum_ord As String, ByVal xcod_tdoc As String, ByVal xfecha_ord As String,
ByVal xcod_prov As String, ByVal xcod_ealm As String, ByVal xobs_ord As String, ByVal
xstot_ord As Double, ByVal xigv_ord As Double, ByVal xtot_ord As Double)
'TABLA FACTURA -------------------cn.Open()
Try
cmd.CommandText = "INSERT INTO ORDEN_COMPRA VALUES('" & xnum_ord & "', '" & xcod_tdoc &
"','" & CDate(xfecha_ord) & "','" & xcod_prov & "','" & xcod_ealm & "' ,'" & xobs_ord & "' ,'" & xstot_ord &
"','" & Val(xigv_ord) & "','" & Val(xtot_ord) & "' )"
cmd.Connection = cn
cmd.ExecuteNonQuery()
cn.Close()
'TABLA DETALLE --------------------Dim n As Integer = 0
cn.Open()
ds.Tables.Clear()
cmd.CommandText = "Select * from DETALLE"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(ds, "DETALLE")
For n = 0 To ds.Tables("DETALLE").Rows.Count - 1
Dim codf = ds.Tables("DETALLE").Rows(n).Item(0)
Dim cant = ds.Tables("DETALLE").Rows(n).Item(3)
Dim importe = ds.Tables("DETALLE").Rows(n).Item(4)
'------------------------------------------------cmd.CommandText = "Insert into detalle_ocompra values ('" & xnum_ord & "','" & codf & "','" & Val(cant) &
"','" & Val(importe) & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
Next
'------------------------------------------------------------MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R O R")
End Try
cn.Close()
End Sub
Sub NUEVO()
cn.Open()
cmd.CommandText = "delete from DETALLE"
cmd.Connection = cn
cmd.ExecuteNonQuery()
cn.Close()

136

End Sub
End Class

CTDocumento:
Imports formulario = System.Windows.Forms
Public Class CTDocumento
Inherits CConexion
Private xcod_tdoc As String
PUBLIC xdocumento As String
Public Property cod_tdoc() As String
Get
Return xcod_tdoc
End Get
Set(ByVal value As String)
xcod_tdoc = value
End Set
End Property
Public Property documento() As String
Get
Return xdocumento
End Get
Set(ByVal value As String)
xdocumento = value
End Set
End Property
Public Sub Guardar_(ByVal xcod_tdoc As String, ByVal xdocumento As String)
cn.Open()
Try
cmd.CommandText = "INSERT INTO TDOCUMENTO VALUES ('" & xcod_tdoc & "','" & xdocumento & "')"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Guardado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception
MsgBox("No se pudo guardar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R O R")
End Try
cn.Close()
End Sub
Public Sub Buscar_(ByVal xcod_tdoc As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT * FROM TDOCUMENTO WHERE COD_TDOC='" & xcod_tdoc & "' OR
DOCUMENTO='" & xcod_tdoc & "'"
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else

137

cod_tdoc = dt.Rows(0).Item("cod_tdoc")
documento = dt.Rows(0).Item("documento")
End If
cn.Close()
End Sub
Public Sub Actualizar_(ByVal xcod_tdoc As String, ByVal xdocumento As String)
cn.Open()
cmd.CommandText = "UPDATE TDOCUMENTO SET documento='" & xdocumento & "'where
cod_tdoc='" & xcod_tdoc & "'"
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Modificado")
cn.Close()
End Sub
End Class
Las otras clases debern ser elaboradas por Ud.

REUTILIZABLES
RBUSCAR
Imports formulario = System.Windows.Forms
Public Class RBuscar
Inherits CConexion
Sub BUSCAR_(ByVal SQL As String)
cn.Open()
dt.Clear()
cmd.CommandText = SQL
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
If dt.Rows.Count = 0 Then
MsgBox("Codigo No Existe")
Else
' cod_ealm = dt.Rows(0).Item("cod_ealm")
End If
cn.Close()
End Sub
End Class

RCODIGO
Imports formulario = System.Windows.Forms
Public Class RCodigo
Inherits CConexion
Private XCODIGO As String
Public Property CODIGO() As String
Get
Return XCODIGO

138

End Get
Set(ByVal value As String)
XCODIGO = value
End Set
End Property
Public Sub GCodigo(ByVal campo As String, ByVal tabla As String, ByVal ini As String)
cn.Open()
dt.Clear()
cmd.CommandText = "SELECT DISTINCT " + "MAX" + "(" + campo + ")" + " as xx " + " FROM " +
tabla
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(dt)
Dim cod
cod = Right(dt.Rows(0).Item("XX"), 5)
XCODIGO = ini + Right("00000" + Right(Int(cod) + 1, 5), 5)
cn.Close()
End Sub
End Class

RCOMBO
Imports formulario = System.Windows.Forms
Public Class RCombo
Inherits CConexion
Public Sub CCombo(ByVal C As formulario.ComboBox, ByVal campo As String, ByVal tabla As
String)
Dim n As Integer
C.Items.Clear()
ds.Tables.Clear()
cn.Open()
cmd.CommandText = "SELECT DISTINCT " + campo + " FROM " + tabla
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(ds, "XXX")
For n = 0 To ds.Tables("XXX").Rows.Count - 1
C.Items.Add(ds.Tables("XXX").Rows(n).Item(0))
Next
cn.Close()
End Sub
End Class

RELIMINAR
Public Class REliminar
Inherits CConexion
Public Sub Eliminar(ByVal campo As String, ByVal tabla As String, ByVal XCODIGO As String)
cn.Open()
Try
cmd.CommandText = "DELETE FROM " & tabla & " WHERE " & campo & "=" & XCODIGO
cmd.Connection = cn
cmd.ExecuteNonQuery()
MsgBox("Registro Eliminado", MsgBoxStyle.Information, "Mensaje")
Catch ex As Exception

139

MsgBox("No se pudo eliminar registro, porfabor verifique sus datos", MsgBoxStyle.Critical, "E R R
O R")
End Try
cn.Close()
End Sub
End Class

RMOSTRAR
Imports INKAFARMA.RMostrar
Imports formulario = System.Windows.Forms
Public Class RMostrar
Inherits CConexion
Public Sub Mostrar_(ByVal GV As formulario.DataGridView, ByVal campo As String, ByVal tabla As
String)
cn.Open()
ds.Tables.Clear()
cmd.CommandText = "SELECT DISTINCT " + campo + " FROM " + tabla
cmd.Connection = cn
da.SelectCommand = cmd
da.Fill(ds)
dv = New DataView(ds.Tables(0))
GV.DataSource = dv
cn.Close()
End Sub
End Class

RNUEVO
Public Class RNuevo
Inherits CConexion
Public Sub BLANCO(ByVal ff As Form)
Dim ctrl As Object
For Each ctrl In ff.Controls
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
End If
If TypeOf ctrl Is ComboBox Then
ctrl.Text = ""
End If
Next
End Sub
End Class

140

FORMULARIOS

Public Class ACCESO

Dim USU As New INKAFARMA.CUsuario


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Me.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

Dim MENU As New MENU_INKAFARMA


Dim ACCESO As New ACCESO
'USU.validar_(TextBox1.Text, TextBox2.Text)
If TextBox1.Text = "ARTESANO" And TextBox2.Text = "123456" Then
MENU.Show()
Me.Hide()
Else
MsgBox("Usuario o Password incorrecto", MsgBoxStyle.Critical, "Mensaje")

141

End If
End Sub
Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

Me.Close()
End Sub
End Class

Crear la ventana principal: (Menu_InkaFarma)

Las Sub Alternativas que conforman son:


Tablas :

Pas

Kardek :

Ficha Control Kardek

Cliente
Proveedor
Empleado
Medida
Ficha Artesana
Tipo de Documento
Artesana
Presentacin
Venta :

Factura

Compra

Orden

Compra
142

Reporte

Factura

Crear la Ventana para el mantenimiento de los Clientes: (Cliente.vb)

Public Class CLIENTE

Dim RMOSTRAR As New INKAFARMA.RMostrar


Dim RNUEVO As New INKAFARMA.RNuevo
Dim RCODIGO As New INKAFARMA.RCodigo
Dim RCOMBO As New INKAFARMA.RCombo
Dim RELIMINAR As New INKAFARMA.REliminar
Dim CLI As New INKAFARMA.CCliente
Dim DIS As New INKAFARMA.CDistrito
Dim DISTRITO As String
Dim ESTADO As String

Sub MOSTRAR()

143

RMOSTRAR.Mostrar_(DataGridView1, "CLI.cod_cli,CLI.apnom_cli,DIS.distrito", "CLIENTE


CLI,DISTRITO DIS where DIS.cod_dis=CLI.cod_dis")
With DataGridView1
.Columns(0).HeaderText = "Cdigo"
.Columns(0).Width = 60
.Columns(1).HeaderText = "Cliente"
.Columns(1).Width = 280
.Columns(2).HeaderText = "Distrito"
.Columns(2).Width = 180
End With
End Sub
Private Sub CLIENTE_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

RCOMBO.CCombo(ComboBox1, "distrito", "DISTRITO")


Call MOSTRAR()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

CLI.Buscar_(TextBox1.Text)
TextBox2.Text = CLI.pat_cli
TextBox3.Text = CLI.mat_cli
TextBox4.Text = CLI.nom_cli
ComboBox1.Text = CLI.cod_dis
TextBox5.Text = CLI.dir_cli
TextBox6.Text = CLI.telef_cli
If CLI.tipo_cli = "NATURAL" Then RadioButton1.Checked = True
If CLI.tipo_cli = "JURIDICO" Then RadioButton2.Checked = True
TextBox7.Text = CLI.ruc_cli
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

RNUEVO.BLANCO(Me)
RCODIGO.GCodigo("cod_cli", "CLIENTE", "")

144

TextBox1.Text = RCODIGO.CODIGO
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button5.Click

RELIMINAR.Eliminar("cod_cli", "CLIENTE", TextBox1.Text)


Call MOSTRAR()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

Dim APNOM = TextBox2.Text & " " & TextBox3.Text & ", " & TextBox4.Text
If RadioButton1.Checked = True Then ESTADO = "NATURAL"
If RadioButton2.Checked = True Then ESTADO = "JURIDICO"
CLI.Guardar_(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, APNOM, DISTRITO,
TextBox5.Text, TextBox6.Text, ESTADO, TextBox7.Text)
Call MOSTRAR()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged

DIS.Buscar_(ComboBox1.Text)
DISTRITO = DIS.cod_dis
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

Dim APNOM = TextBox2.Text & " " & TextBox3.Text & ", " & TextBox4.Text
If RadioButton1.Checked = True Then ESTADO = "NATURAL"
If RadioButton2.Checked = True Then ESTADO = "JURIDICO"
CLI.Actualizar_(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, APNOM,
DISTRITO, TextBox5.Text, TextBox6.Text, ESTADO, TextBox7.Text)
Call MOSTRAR()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button6.Click

145

Me.Close()
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles RadioButton2.CheckedChanged

If RadioButton2.Checked = True Then


TextBox7.Enabled = True
End If
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles RadioButton1.CheckedChanged

If RadioButton1.Checked = True Then


TextBox7.Enabled = False
TextBox7.Text = ""
End If
End Sub
End Class
CONSULTA_FACTURA

Public Class COSULTA_FACTURA

Dim RMOSTRAR As New INKAFARMA.RMostrar

146

Dim RCOMBO As New INKAFARMA.RCombo


Dim RBUSCAR As New INKAFARMA.RBuscar
Dim RCODIGO As New INKAFARMA.RCodigo
Dim DISTRITO As String
Sub MOSTRAR()

with datagridview1
.columns(0).headertext = "numero"
.columns(0).width = 60
.columns(1).headertext = "fecha"
.columns(1).width = 70
.columns(2).headertext = "cliente"
.columns(2).width = 250
.columns(3).headertext = "empleado"
.columns(3).width = 250
.columns(4).headertext = "total"
.columns(4).width = 60
end with
End Sub
Private Sub COSULTA_FACTURA_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load

rcombo.ccombo(combobox1, "apnom_cli", "cliente")


rmostrar.mostrar_(datagridview1, "fac.num_fac,fac.fecha_fac,cli.apnom_cli,emp.apnom_emp,
fac.tot_fac", "factura fac,cliente cli,empleado emp where cli.cod_cli=fac.cod_cli and
emp.cod_emp=fac.cod_emp")
call mostrar()
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles ComboBox1.SelectedIndexChanged

147

rmostrar.mostrar_(datagridview1, "fac.num_fac,fac.fecha_fac,cli.apnom_cli,emp.apnom_emp,
fac.tot_fac", "factura fac,cliente cli,empleado emp where cli.cod_cli=fac.cod_cli and
emp.cod_emp=fac.cod_emp and cli.apnom_cli= '" & combobox1.text & "'")
call mostrar()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
RMOSTRAR.Mostrar_(DataGridView1, "fac.num_fac,fac.fecha_fac

,cli.apnom_cli,emp.apnom_emp,

fac.tot_fac", "factura fac,cliente cli,empleado emp where cli.cod_cli=fac.cod_cl and


emp.cod_emp=fac.cod_emp and fac.fecha_fac between '" & cdate(datetimepicker1.text) & "'
and '" & cdate(datetimepicker2.text) & "'")
call mostrar()
End Sub
End Class

148

Mantenimiento de PAIS

Public Class DISTRITO

Dim RMOSTRAR As New INKAFARMA.RMostrar


Dim RNUEVO As New INKAFARMA.RNuevo
Dim RCODIGO As New INKAFARMA.RCodigo
Dim RELIMINAR As New INKAFARMA.REliminar
Dim DIS As New INKAFARMA.CDistrito
Sub MOSTRAR()
RMOSTRAR.Mostrar_(DataGridView1, "cod_dis,distrito", "DISTRITO")
End Sub
Private Sub DISTRITO_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

Call MOSTRAR()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

RNUEVO.BLANCO(Me)
RCODIGO.GCodigo("cod_dis", "DISTRITO", "")
TextBox1.Text = RCODIGO.CODIGO

149

End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

DIS.Guardar_(TextBox1.Text, TextBox2.Text)
Call MOSTRAR()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

DIS.Buscar_(TextBox1.Text)
TextBox2.Text = DIS.distrito
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

DIS.Actualizar_(TextBox1.Text, TextBox2.Text)
Call MOSTRAR()
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button5.Click

RELIMINAR.Eliminar("cod_dis", "DISTRITO", TextBox1.Text)


Call MOSTRAR()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button6.Click

Me.Close()
End Sub
End Class

150

Mantenimiento de la Tabla EMPLEADO

Public Class EMPLEADO

Dim RMOSTRAR As New INKAFARMA.RMostrar


Dim RNUEVO As New INKAFARMA.RNuevo
Dim RCODIGO As New INKAFARMA.RCodigo
Dim RCOMBO As New INKAFARMA.RCombo
Dim RELIMINAR As New INKAFARMA.REliminar
Dim EMPL As New INKAFARMA.CEmpleado
Dim DIS As New INKAFARMA.CDistrito
Dim DISTRITO As String
Sub MOSTRAR()

RMOSTRAR.Mostrar_(DataGridView1, "EMP.cod_emp,EMP.apnom_emp,DIS.distrito",
"EMPLEADO EMP,DISTRITO DIS where DIS.cod_dis=EMP.cod_dis")
End Sub
Private Sub EMPLEADO_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

RCOMBO.CCombo(ComboBox1, "distrito", "DISTRITO")

151

Call MOSTRAR()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

EMPL.Buscar_(TextBox1.Text)
TextBox2.Text = EMPL.pat_emp
TextBox3.Text = EMPL.mat_emp
TextBox4.Text = EMPL.nom_emp
ComboBox1.Text = EMPL.cod_dis
TextBox5.Text = EMPL.dir_emp
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

RNUEVO.BLANCO(Me)
RCODIGO.GCodigo("cod_emp", "EMPLEADO", "")
TextBox1.Text = RCODIGO.CODIGO
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

Dim APNOM = TextBox2.Text & " " & TextBox3.Text & ", " & TextBox4.Text
EMPL.Guardar_(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, APNOM,
DISTRITO, TextBox5.Text)
Call MOSTRAR()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

Dim APNOM = TextBox2.Text & " " & TextBox3.Text & ", " & TextBox4.Text
EMPL.Actualizar_(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, APNOM,
DISTRITO, TextBox5.Text)
Call MOSTRAR()
End Sub

152

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


Button5.Click

RELIMINAR.Eliminar("cod_emp", "EMPLEADO", TextBox1.Text)


Call MOSTRAR()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button6.Click

Me.Close()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged

DIS.Buscar_(ComboBox1.Text)
DISTRITO = DIS.cod_dis
End Sub
End Class

Crear la ventana de
FACTURACION:

153

Imports System.Data
Imports System.Data.SqlClient
Public Class FACTURA
'-------------------------

Public cn As New SqlConnection("Developers\SQLExpress;Initial


Catalog=Hospital;uid=sa;pwd=")
Public cmd As New SqlCommand
Public da As New SqlDataAdapter
Public ds As New DataSet
Public dt As New DataTable
Public dv As New DataView
Public dr As SqlDataReader
'-------------------------

Dim FAC As New INKAFARMA.CFactura


Dim FMED As New INKAFARMA.CFmedicamento
Dim MED As New INKAFARMA.CMedicamento
Dim TDOC As New INKAFARMA.CTDocumento
Dim CLI As New INKAFARMA.CCliente
Dim EMP As New INKAFARMA.CEmpleado
Dim KARDEX As New INKAFARMA.CKardex
Dim NU As New INKAFARMA.RNuevo
Dim RGCOD As New INKAFARMA.RCodigo
Dim RELIM As New INKAFARMA.REliminar
Dim RMOS As New INKAFARMA.RMostrar
Dim RCB As New INKAFARMA.RCombo
'Dim hh As New Excel.Application
Dim XCOD_TDOC As String
Dim XCOD_CLI As String
Dim XCOD_EMP As String
Sub VER()

RMOS.Mostrar_(DataGridView1, "CODIGO,PRODUCTO,PRECIO,CANTIDAD,IMPORTE",
"DETALLE")
With DataGridView1

154

.Columns(0).HeaderText = "Codigo"
.Columns(0).Width = 60
.Columns(1).HeaderText = "Producto"
.Columns(1).Width = 255
.Columns(2).HeaderText = "Precio"
.Columns(2).Width = 70
.Columns(3).HeaderText = "Cantidad"
.Columns(3).Width = 70
.Columns(4).HeaderText = "Importe"
.Columns(4).Width = 70
End With
End Sub
Private Sub FACTURA_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

RCB.CCombo(ComboBox1, "documento", "TDOCUMENTO")


RCB.CCombo(ComboBox2, "apnom_cli", "CLIENTE")
RCB.CCombo(ComboBox3, "medicamento", "medicamento")
RCB.CCombo(ComboBox4, "apnom_emp", "EMPLEADO")
TextBox7.Text = Format(Val(0), "###,###,##0.00")
TextBox8.Text = Format(Val(0), "###,###,##0.00")
TextBox9.Text = Format(Val(0), "###,###,##0.00")
Call VER()
End Sub
Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs)

KARDEX.Buscar_(ComboBox3.Text)
TextBox3.Text = KARDEX.precio
TextBox4.Text = KARDEX.stock
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

155

If TextBox1.Text = "" Or ComboBox1.Text = "" Or ComboBox2.Text = "" Or ComboBox4.Text = ""


Then
MsgBox("Datos Incompletos", MsgBoxStyle.Information, "MENSAJE")
Else
FAC.Guardar_(TextBox1.Text, XCOD_TDOC, DateTimePicker1.Text, XCOD_CLI, XCOD_EMP,
Val(TextBox7.Text), Val(TextBox8.Text), Val(TextBox9.Text))
Call VER()
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

NU.BLANCO(Me)
RGCOD.GCodigo("num_fac", "FACTURA", "000")
TextBox1.Text = RGCOD.CODIGO
TextBox7.Text = Format(Val(0), "###,###,##0.00")
TextBox8.Text = Format(Val(0), "###,###,##0.00")
TextBox9.Text = Format(Val(0), "###,###,##0.00")
FAC.NUEVO()
Call VER()
ComboBox1.Text = ""
ComboBox2.Text = ""
ComboBox3.Text = ""
ComboBox4.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
End Sub
Private Sub ComboBox3_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox3.SelectedIndexChanged

MED.Buscar_(ComboBox3.Text)

156

TextBox3.Text = Math.Round(MED.precio, 2)
TextBox4.Text = MED.stock
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

If TextBox6.Text = "" Then


MsgBox("Datos Incompletos", MsgBoxStyle.Information, "MENSAJE")
Else
MED.Buscar_(ComboBox3.Text)
Dim XX = MED.cod
FAC.agregar_linea(XX, ComboBox3.Text, Val(TextBox4.Text), Val(TextBox3.Text),
Val(TextBox6.Text))
TextBox7.Text = Format(Val(FAC.stot_fac), "###,###,##0.00")
TextBox8.Text = Format(Val(FAC.igv_fac), "###,###,##0.00")
TextBox9.Text = Format(Val(FAC.tot_fac), "###,###,##0.00")
Call VER()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

Dim aa As String
Try
aa = DataGridView1.CurrentCell.Value
FAC.quitar_linea(aa)
Catch ex As Exception
MsgBox("No hay Productos", MsgBoxStyle.Exclamation, "Mensaje")
End Try
Call VER()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged

TDOC.Buscar_(ComboBox1.Text)

157

XCOD_TDOC = TDOC.cod_tdoc
End Sub
Private Sub ComboBox2_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox2.SelectedIndexChanged

CLI.Buscar_(ComboBox2.Text)
XCOD_CLI = CLI.cod_cli
TextBox10.Text = CLI.ruc_cli
TextBox11.Text = CLI.dir_cli
TextBox12.Text = CLI.telef_cli
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button8.Click

Me.Close()
End Sub
Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox4.SelectedIndexChanged

EMP.Buscar_(ComboBox4.Text)
XCOD_EMP = EMP.cod_emp
End Sub
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

Dim aa As String
Try
aa = DataGridView1.CurrentCell.Value
FAC.quitar_linea(aa)
Catch ex As Exception
MsgBox("No hay Productos", MsgBoxStyle.Exclamation, "Mensaje")
End Try
Call VER()
End Sub
End Class

158

Crear la ventana de KARDEK

Imports INKAFARMA.FKARDEX
Public Class FKARDEX

Dim RMOSTRAR As New INKAFARMA.RMostrar


Dim RNUEVO As New INKAFARMA.RNuevo
Dim RCODIGO As New INKAFARMA.RCodigo
Dim RCOMBO As New INKAFARMA.RCombo
Dim RELIMINAR As New INKAFARMA.REliminar
Dim FMED As New INKAFARMA.CFmedicamento
Dim KARDEX As New INKAFARMA.CKardex
Dim CDIS As String
Sub MOSTRAR()

RMOSTRAR.Mostrar_(DataGridView1, "cod_f,fecha_f,costo,stock", "FICHA_KARDEX")


End Sub

159

Private Sub control_kardex_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


MyBase.Load

RCOMBO.CCombo(ComboBox1, "cod_fmed", "FMEDICAMENTO")


Call MOSTRAR()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

RNUEVO.BLANCO(Me)
RNUEVO.BLANCO(Me)
RNUEVO.BLANCO(Me)
RCODIGO.GCodigo("cod_f", "FICHA_KARDEX", "")
TextBox1.Text = RCODIGO.CODIGO
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

KARDEX.Guardar_(TextBox1.Text, DateTimePicker1.Text, ComboBox1.Text, TextBox3.Text,


TextBox7.Text)
Call MOSTRAR()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button6.Click

Me.Close()
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button5.Click

RELIMINAR.Eliminar("cod_f", "FICHA_KARDEX", TextBox1.Text)


Call MOSTRAR()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged

FMED.Buscar_(ComboBox1.Text)
TextBox2.Text = FMED.medicam

160

'TextBox3.Text = FMED.lab
TextBox4.Text = FMED.pres
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click

KARDEX.Buscar_(TextBox1.Text)
DateTimePicker1.Text = KARDEX.fecha
ComboBox1.Text = KARDEX.fmed
FMED.Buscar_(ComboBox1.Text)
TextBox2.Text = FMED.medicam
' TextBox3.Text = FMED.lab
TextBox4.Text = FMED.pres
TextBox3.Text = KARDEX.precio
TextBox7.Text = KARDEX.stock
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

KARDEX.Actualizar_(TextBox1.Text, DateTimePicker1.Text, ComboBox1.Text, TextBox3.Text,


TextBox7.Text)
Call MOSTRAR()
End Sub
End Class

TAREA:
Crear los Siguientes Mantenimientos:
Laboratorio

161

Artesana

Medida

Presentacin

162

Tipo
Documento

Proveedor

Orden de Compra

163

Public Class ORDEN_COMPRA

Dim ORD As New INKAFARMA.COrden_compra


Dim FMED As New INKAFARMA.CFmedicamento
Dim TDOC As New INKAFARMA.CTDocumento
Dim PROV As New INKAFARMA.CProveedor
Dim EAL As New INKAFARMA.CEAlmacen
Dim KARDEX As New INKAFARMA.CKardex

164

Dim NU As New INKAFARMA.RNuevo


Dim RGCOD As New INKAFARMA.RCodigo
Dim RELIM As New INKAFARMA.REliminar
Dim RMOS As New INKAFARMA.RMostrar
Dim RCB As New INKAFARMA.RCombo
'Dim hh As New Excel.Application
Dim XCOD_TDOC As String
Dim XCOD_PROV As String
Dim XCOD_EALM As String
Sub MOSTRAR()

RMOS.Mostrar_(DataGridView1, "CODIGO,PRODUCTO,PRECIO,CANTIDAD,IMPORTE",
"DETALLE")
With DataGridView1
.Columns(0).HeaderText = "Codigo"
.Columns(0).Width = 60
.Columns(1).HeaderText = "Producto"
.Columns(1).Width = 255
.Columns(2).HeaderText = "Precio"
.Columns(2).Width = 70
.Columns(3).HeaderText = "Cantidad"
.Columns(3).Width = 70
.Columns(4).HeaderText = "Importe"
.Columns(4).Width = 70
End With
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox2.SelectedIndexChanged

PROV.Buscar_(ComboBox2.Text)
XCOD_PROV = PROV.cod
TextBox10.Text = PROV.ruc
TextBox11.Text = PROV.dir
TextBox12.Text = PROV.telef

165

End Sub
Private Sub ORDEN_COMPRA_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load

RCB.CCombo(ComboBox1, "documento", "TDOCUMENTO")


RCB.CCombo(ComboBox2, "proveedor", "PROVEEDOR")
RCB.CCombo(ComboBox3, "cod_f", "FICHA_KARDEX")
RCB.CCombo(ComboBox4, "apnom_ealm", "EALMACEN")
Call MOSTRAR()
End Sub
Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox3.SelectedIndexChanged

KARDEX.Buscar_(ComboBox3.Text)
TextBox3.Text = KARDEX.precio
TextBox4.Text = KARDEX.stock
FMED.Buscar_(KARDEX.fmed)
TextBox2.Text = FMED.XCOD_
TextBox5.Text = FMED.pres
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click

NU.BLANCO(Me)
RGCOD.GCodigo("num_ord", "ORDEN_COMPRA", "000")
TextBox1.Text = RGCOD.CODIGO
TextBox7.Text = Format(Val(0), "###,###,##0.00")
TextBox8.Text = Format(Val(0), "###,###,##0.00")
TextBox9.Text = Format(Val(0), "###,###,##0.00")
Call MOSTRAR()
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button8.Click

Me.Close()
End Sub

166

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


Button1.Click

If TextBox3.Text = "" Or TextBox6.Text = "" Then


MsgBox("Datos Incompletos", MsgBoxStyle.Information, "MENSAJE")
Else
ORD.agregar_linea(ComboBox3.Text, TextBox2.Text, Val(TextBox3.Text),
Val(TextBox6.Text))
TextBox7.Text = Format(Val(ORD.stot_ord), "###,###,##0.00")
TextBox8.Text = Format(Val(ORD.igv_ord), "###,###,##0.00")
TextBox9.Text = Format(Val(ORD.tot_ord), "###,###,##0.00")
Call MOSTRAR()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click

Dim aa As String
Try
aa = DataGridView1.CurrentCell.Value
ORD.quitar_linea(aa)
TextBox7.Text = Format(Val(ORD.Ostot_ord), "###,###,##0.00")
TextBox8.Text = Format(Val(ORD.Oigv_ord), "###,###,##0.00")
TextBox9.Text = Format(Val(ORD.Otot_ord), "###,###,##0.00")
Catch ex As Exception
MsgBox("No hay Productos", MsgBoxStyle.Exclamation, "Mensaje")
End Try
Call MOSTRAR()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click

If TextBox1.Text = "" Or ComboBox1.Text = "" Or ComboBox2.Text = "" Or


ComboBox4.Text = "" Then
MsgBox("Datos Incompletos", MsgBoxStyle.Information, "MENSAJE")

167

Else
ORD.Guardar_(TextBox1.Text, XCOD_TDOC, DateTimePicker1.Text, XCOD_PROV,
XCOD_EALM, TextBox13.Text, Val(TextBox7.Text), Val(TextBox8.Text), Val(TextBox9.Text))
MOSTRAR()
End If
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged

TDOC.Buscar_(ComboBox1.Text)
XCOD_TDOC = TDOC.cod_tdoc
End Sub
Private Sub GroupBox3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

GroupBox3.Enter
End Sub
Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox4.SelectedIndexChanged

EAL.Buscar_(ComboBox4.Text)
XCOD_EALM = EAL.cod_ealm
End Sub
End Class

168