primera parte autor : christian rodriguez olmos

39
1 MANUAL DE ACCESO A DATOS CON VB.NET PRIMERA PARTE Autor : Christian Rodriguez Olmos Mail : [email protected] Fecha : 27 de Junio de 2007 Muchos hemos pasado por los foros haciendo muchas preguntas, y me incluyo, pues mis conocimientos son mínimos en comparación a muchos expertos que rondan la red, especialmente en los foros. El problema radica en que cada vez que reviso algunos foros de programación, me encuentro con preguntas que son relativamente básicas, lo que demuestra que hay muchísima gente con escasos conocimientos de programación, y lo que es más importante, de lógica. No se si es debido a que se trata de autodidactas, o por que sus educadores realmente dieron una base muy pobre. Bueno, independiente de la situación, me he dado cuenta que una de las preguntas mas frecuentes es “como obtengo..?, como guardo..? como actualizo..??? datos en una Base de Datos con Visual Basic.Net” Es por ello que me tomé un tiempo para preparar esta guía que es extremadamente básica, y talvez no cumpla con grandes estándares de ingeniería de software, o control de errores, tratamiento de transacciones, etc. Recuerda… las preguntas son de “Acceso a datos”. Sin perjuicio de lo anterior, he subido algún material que puedes descargar y que contiene guías, relacionadas al tratamiento de datos con Visual Basic .Net, e incluso puedes encontrar algún manual del lenguaje. Este material lo encontraras en el paquete que incluye este manual, pero si has llegado solo a este documento, puede solicitarme todo lo ofrecido a mi correo [email protected] . Recuerda que en el paquete encontraras: - El manual (completo, o hasta la ultima parte terminada) - Material de apoyo - El código fuente del proyecto - La base de datos

Upload: others

Post on 16-Oct-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

1

MANUAL DE ACCESO A DATOS CON VB.NET PRIMERA PARTE

Autor : Christian Rodriguez Olmos

Mail : [email protected]

Fecha : 27 de Junio de 2007

Muchos hemos pasado por los foros haciendo muchas preguntas, y me incluyo,

pues mis conocimientos son mínimos en comparación a muchos expertos que rondan la

red, especialmente en los foros.

El problema radica en que cada vez que reviso algunos foros de programación, me

encuentro con preguntas que son relativamente básicas, lo que demuestra que hay

muchísima gente con escasos conocimientos de programación, y lo que es más importante,

de lógica. No se si es debido a que se trata de autodidactas, o por que sus educadores

realmente dieron una base muy pobre.

Bueno, independiente de la situación, me he dado cuenta que una de las preguntas

mas frecuentes es “como obtengo..?, como guardo..? como actualizo..??? datos en una

Base de Datos con Visual Basic.Net”

Es por ello que me tomé un tiempo para preparar esta guía que es extremadamente

básica, y talvez no cumpla con grandes estándares de ingeniería de software, o control de

errores, tratamiento de transacciones, etc. Recuerda… las preguntas son de “Acceso a

datos”.

Sin perjuicio de lo anterior, he subido algún material que puedes descargar y que

contiene guías, relacionadas al tratamiento de datos con Visual Basic .Net, e incluso

puedes encontrar algún manual del lenguaje.

Este material lo encontraras en el paquete que incluye este manual, pero si has

llegado solo a este documento, puede solicitarme todo lo ofrecido a mi correo

[email protected].

Recuerda que en el paquete encontraras:

- El manual (completo, o hasta la ultima parte terminada)

- Material de apoyo

- El código fuente del proyecto

- La base de datos

2

OBJETIVOS

El objetivo principal de esta guía es que logremos crear una aplicación que nos permita

leer, guardar, modificar y eliminar información de una base de datos.

Crearemos un sistema que nos permita gestionar productos y ventas, o sea, un micro

T.P.V. (Terminal de Punto de Venta). No quiero que imaginen un sistema de avanzada,

pero lograremos:

- Ingresar los productos

- Modificar Productos

- Vender Productos

(No será tratado el tema de la impresión, de la boleta, guía, o factura.)

REQUERIMIENTOS

Necesitamos tener instalado el Visual Basic .Net, ya sea en las versiones Express o Visual

Studio 2005, además, necesitaremos Access (XP / 2003)

También, necesitamos conocimientos básicos de VB.Net y de Base de datos.

3

CREANDO LA BASE DE DATOS

Abrimos Access y creamos nuestra base de datos con la siguiente estructura y en el

directorio que tú elijas.

Las tablas:

Productos : Guardará nuestros productos. El código del producto lo

generaremos por código, valga la redundancia, para así ver el funcionamiento de las

consultas de tipo Scalar.

UnidadesMedida : Una lista de unidades de medida, tales como; KGS, UND,

LTR, etc.

Compras : Guardaremos los datos de nuestras compras de productos

Ventas : Guardaremos los datos de nuestras ventas de productos

VentasDetalle : El detalle de la venta, asociada al numero de la factura.

IVA : Una lista de los impuestos aplicables.

Hasta aquí ya tenemos lista nuestra Base de Datos, ahora nos vamos a programar.

La definición de las columnas, es simple y lógica. Pero no te hagas problema pues se

adjunta la base de datos ya terminada, y vacía.

4

CREANDO EL PROYECTO

Abrimos Visual Basic.Net, ya sea Express o Visual Studio 2005 (en mi caso)

Creamos un nuevo proyecto Windows � Aplicación para Windows

Y le llamamos “GestionNegocio”

5

CREANDO LOS FORMULARIOS

CREAR FORMULARIO MDI PRINCIPAL

Luego estando dentro del proyecto, Agregamos un nuevo elemento del tipo Formulario

Primario MDI, y lo llamamos MDIMain.

Nuestro proyecto debe presentarse de esta forma:

A continuación Eliminamos los componentes que se agregaron automáticamente.

(Marcados en rojo) Si vas a usar alguno, déjalo

6

Si borraste los componentes, puede que necesites borrar el código asociado.

En mi caso, como señale que se debían borrar todos, el código del MDIMain debería

quedar así:

Ahora en la vista Diseño del MDIMain arrastramos un MenuStrip para que configuremos

nuestro Menú de la aplicación.

La estructura del Menú es:

Archivo � Salir

Tablas � Unidades de Medida

� Productos

� Impuestos

7

Gestión � Ingresar Factura de Compra

� Emitir Factura de Venta

Si Observas, los menús debes estar ordenados lógicamente. Por ejemplo, Productos esta

bajo Unidades de Medida, pues requiere la existencia de una de ellas, para poder crearse.

Los ingresos de productos están sobre Emitir Factura de Venta, pues no podemos vender,

sin productos.

Esto es lógico dirás tú, pero he visto programas que no guardan un orden lógico en los

menús. Un espanto!!!.

Ahora dejemos lista la opción de menú Salir

En modo diseño hacemos clic en el menú Archivo, y doble clic en la opción Salir, para ver

el código asociado al menú.

El código del Menú Archivo � Salir nos queda si:

Private Sub SalirToolStripMenuItem_Click(ByVal send er As _

System.Object, ByVal e As System.EventArgs) Handle s _

SalirToolStripMenuItem.Click

End

End Sub

Con la instrucción End cerramos la aplicación. Aunque hay otra forma, pero más larga.

(Global.System.Windows.Forms.Application.Exit() )

Ahora, nos vamos al Menú del Entorno y Cambiamos el Formulario Inicial.

Menu Proyecto � Propiedades de GestionNegocio

Y en la opción de Formulario de Inicio seleccionamos el MDIMain

8

Ahora probamos nuestro proyecto. Presionamos F5 y se ejecutará la aplicación.

Si te arroja algún error, es por que algo te ha faltado, vuelve atrás y revisa.

Si todo sale bien, bastará elegir la opción de menú Archivo � Salir, y nuestra aplicación

se cerrará.

Todo OK, continuamos.

Antes de seguir, necesito que al proyecto le agregues una Nueva Carpeta, y la llames

DataSets, esto nos ayudará a mantener un orden.

9

CREANDO EL ORIGEN DE LOS DATOS

Desde el menú del entorno elegimos la opción Datos � Agregar nuevo origen de datos

Y Elegimos la opción Base de Datos.

Hacemos clic en siguiente.

Creamos una Nueva Conexión

10

Cambiamos el Origen de Datos a Archivo de Base de Datos Access

Buscamos la Base de Datos, la seleccionamos (Botón Examinar), y probamos la conexión

(Botón Probar Conexión). Todo debería estar OK hasta aquí.

11

Podemos Continuar entonces.

Cuando hagamos clic en Siguiente obtendremos el siguiente mensaje.

Lo que pasa es que nuestra base de datos no esta en el directorio de la aplicación (En mi

caso esta en Escrtorio\Subir\BDGestion.mdb, en tu caso da lo mismo donde la tengas).

Lo importante es elegir la opción “SI”. De esta forma la base de datos será copiada al

directorio del proyecto, y cada vez que ejecutes la aplicación (F5), esta se copiará al

directorio de resultado (\Projects\GestionNegocio\GestionNegocio\bin\Debug)

Lo importante es que la copia que estará en el directorio del proyecto

(\Projects\GestionNegocio\GestionNegocio), será nuestra base de datos fuente para

futuras modificaciones, pues cuando ejecutes pruebas y agregues datos, cuando la vuelvas

a ejecutar veras que no están los datos, esto por que estarás copiando nuevamente la base

de datos origen. En este caso tendrás que copiar la base de datos del directorio de

resultados, al directorio del proyecto si quieres mantener los datos de pruebas.

12

Obviamente, esto no pasará una vez que finalices el proyecto, donde bastará que la base de

datos esté en el mismo directorio que el ejecutable de la aplicación.

Retomando… al hacer clic en “SI”, debemos asignar un nombre a la cadena de conexión.

Podemos mantener el nombre propuesto si lo deseamos (Yo lo haré)

Hacemos clic en Siguiente, y luego en finalizar, pues por ahora no nos interesa crear

ningún DataSet. (Confirma el siguiente mensaje)

13

Si revisamos el Archivo de Configuración de la Aplicación app.config, vemos la cadena

de conexión siguiente:

<connectionStrings>

<add name="GestionNegocio.My.MySettings.BDGestionCo nnectionString"

connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data

Source= |DataDirectory|\BDGestion.mdb"

providerName="System.Data.OleDb" />

</connectionStrings>

Fíjate en el parámetro Source. Así se nos permite trabajar con la base de datos en la

misma carpeta que el ejecutable de la aplicación.

Hasta aquí tendremos así nuestro proyecto.

El DataSet que se creó cuando generamos el acceso a datos, debes eliminarlo, pues no

contiene nada, y no lo necesitamos. Luego crearemos los nuestros.

14

CREANDO LOS FORMULARIOS HIJOS (CHILD)

Los formularios se crearan según el orden de los menús.

FORMULARIO DE GESTIÓN DE UNIDADES DE MEDIDA

Utilizamos el Form1 que se generó al crear el proyecto, o agregamos un nuevo elemento

Windows Forms.

El nombre de este formulario será frmUnidadesMedida. Cámbialo además, al archivo

Form1.vb

A la propiedad Text del form le asignamos “Unidades de Medida”

CREANDO UN DATASET

Ahora a la carpeta DataSets Agrégale un Nuevo Elemento del tipo Conjunto de Datos, y

llámalo dsUnidadesMedida.

Al hacer clic en agregar tendremos este escenario. Pero lo cerramos (el DataSet creado).

15

Ahora, seleccionamos el menú del entorno. Datos � Mostrar Orígenes de Datos

Con esto mostramos nuestros orígenes de datos, específicamente nuestros DataSets.

Seleccionamos el dsUnidadesMedida, y lo Configuramos usando el Asistente.

Elegimos la cadena de conexión que ya hemos creado.

Expandimos, y seleccionamos la tabla UnidadesMedida. Y Hacemos Clic en Finalizar.

16

Obtendremos el siguiente escenario.

A continuación modificaremos la consulta. Haz clic con el botón secundario del ratón,

sobre los métodos Fill, GetData() del TableAdapter, y elige Configurar

Podemos usar el Generador de Consultas, o escribirla directamente.

La consulta quedará así

Damos clic en siguiente

17

Damos clic en siguiente y luego en finalizar, y estamos listos.

Así nos queda el DataSet, con el TableAdapter creado.

Cerramos el dsUnidadesMedida y guardamos los cambios.

18

Ahora cierra los Orígenes de datos.

Para que abras el frmUnidadesMedida. (Diseño)

Ahora, seleccionamos el menú del entorno (Nuevamente).

Datos � Mostrar Orígenes de Datos

Arrastra el DataSet al frmUnidadesMedida, pero hazlo desde el nodo UnidadesMedida

Y fíjate que este seleccionado el modo DataGridView.

19

Una vez que hayas arrastrado en DataSet al frmUnidadesMedida, consigue la siguiente

apariencia.

Ahora nos vamos al MDIMain y codificamos la acción del menú Tablas � Unidades de

Medida.

Supongo que ya sabes como hacerlo. Seleccionas el menú Tablas, y luego haces doble

clic a la opción Unidades de Medida.

Debes dejar el código de esta manera.

Private Sub UnidadesDeMedidaToolStripMenuItem_Click (ByVal sender As _

System.Object, ByVal e As System.EventArgs) Handle s _

UnidadesDeMedidaToolStripMenuItem.Click

Dim frmUnid As New frmUnidadesMedida

frmUnid.MdiParent = Me

frmUnid.Show()

End Sub

Con este código creamos una nueva instancia del frmUnidadesMedida, luego le

indicamos que es un formulario hijo del MDIMain, y después lo mostramos.

20

Ahora, ejecuta la aplicación (F5), y carga tantas veces quieras el formulario Unidades de

Medida.

Si has llegado hasta aquí, y la aplicación te funciona…. Felicitaciones.

Haz cumplido con la primera parte de este manual, y ya puedes comenzar a ingresar

unidades de medida.

Recuerda guardar los datos con el disquete.

Recuerda que estas trabajando con una copia de la base de datos, si cierras la aplicación y

la vuelves a ejecutar no tendrás los datos. Deberás copiar la base de datos de la carpeta de

resultados, y reemplazar la de la carpeta del proyecto, para mantener los datos

Yo ingrese las siguientes unidades de medida

21

MEJORAS

Seguramente, te preguntaras…

Que pasa si modifico la columna IdUnidadMedida…?

Que pasa si ingreso dos veces una unidad de medida…?

Bueno, para evitar modificar la columna IdUnidadMedida, que es Autonumerica,

selecciona el Grid, y en sus propiedades selecciona Columns � Colección

Tendrás lo siguiente:

Aquí puedes jugar con las propiedades de las columnas.

A la columna IdUnidadMedida, puedes poner a False la propiedad Visible.

A la columa UnidadMedida, puedes cambiar las siguientes propiedades:

HeaderText = Unidad de Medida

MaxInputLength = 5

Con esto, hemos solucionado lo de la columna IdUnidadMedida, y un posible error si

ingresáramos una unidad de medida de 6 o más caracteres, pues en la tabla se definió con

5 caracteres.

22

Ahora, sin ingresamos 2 veces una misma unidad de medida nos arrojara el siguiente error

en tiempo de ejecución.

Lo podemos evitar de la siguiente manera.

El método donde se genera el error déjalo de la siguiente forma

Private Sub UnidadesMedidaBindingNavigatorSaveItem_ Click(ByVal sender _

As System.Object, ByVal e As System.EventArgs) Hand les _

UnidadesMedidaBindingNavigatorSaveItem.Click

Me.Validate()

Me.UnidadesMedidaBindingSource.EndEdit()

Try

Me.UnidadesMedidaTableAdapter.Update _

(Me.DsUnidadesMedida.UnidadesMedida)

Catch err As System.Data.OleDb.OleDbException

MsgBox("Se ha producido un error de consistenci a en los datos

ingresados para guardar o actualizar", MsgBoxStyle. Exclamation)

Catch ex As Exception

MsgBox("Se ha producido un error no contr olado al guardar o

actualizar los datos", MsgBoxStyle.Exclamation)

End Try

End Sub

Con esto controlaremos, errores de consistencia de los datos, y errores de carácter general.

Puedes agregar los que tú quieras. (de Conexión, etc.)

23

Si ejecutamos la aplicación, ya no tendremos los problemas de:

Que pasa si modifico la columna IdUnidadMedida…?

Ya no puede ser modificada por el usuario

Que pasa si ingreso dos veces una unidad de medida…?

Pasará esto:

Bastará con hacer clic en Aceptar, y luego eliminar la fila con error.

Bueno… espero que esta primera parte del manual les sirva. Y recuerden, que esto es

básico y talvez se me puedan pasar muchas ideas, pero… es una base para Uds. Y espero

que saquen provecho a este trabajo.

Saludos desde San Felipe – Chile

Christian Rodriguez Olmos

Si necesitas comprar cuentas Rapidshare.com Premium escríbeme a [email protected]

24

MANUAL DE ACCESO A DATOS CON VB.NET SEGUNDA PARTE

Autor : Christian Rodriguez Olmos

Mail : [email protected]

Fecha : 28 de Junio de 2007

Bueno, continuamos con nuestro proyecto.

Espero que hayas entendido y practicado la creación de los DataSet, pues lo

usaremos bastante en nuestros programas de acceso a datos.

Continuamos con …

CREANDO LOS FORMULARIOS HIJOS (CHILD)

FORMULARIO DE INGRESO DE PRODUCTOS

Agregamos a nuestro proyecto un Nuevo Elemento del tipo Windows Forms, y le

llamamos frmIngresoProductos.

25

Cambiamos su propiedad Text a “Ingreso de Productos”

Para el diseño de la interfaz talvez necesitemos de un recordatorio

Debes lograr esta interfaz:

Nota: Las propiedades que no tienen valor, indica que no se deben cambiar.

Solo haz los cambios en las que se señala algún valor

PROPIEDADES CONTROLES Name txtCodigo txtDescripcion cboUnidadMedida txtPrecioCosto txtPrecioVenta cmdAceptar cmdCancelar Locked True Enabled False MaxLength 50 7 7 TabStop False TabIndex 0 1 2 3 4 5 TextAlign Center Right Right DropDownStyle DropDownList

26

Para probar nuestro formulario de ingreso de productos, debemos cambiar al MDIMain, y

configurar la opción del Menú Tablas � Productos.

El código nos quedará de manera similar al que usamos para mostrar el formulario de

Unidades de Medida.

Private Sub ProductosToolStripMenuItem_Click(ByVal sender _

As System.Object, ByVal e As System.EventArgs) _

Handles ProductosToolStripMenuItem.Click

Dim frmProd As New frmIngresoProductos

frmProd.MdiParent = Me

frmProd.Show()

End Sub

Ejecutamos la aplicación (F5), y al igual que antes, podemos cargar tantas veces queramos

el formulario de Ingreso de Productos.

Ahora, el cboUnidadMedida nos debe listar nuestras unidades de medida, por tanto en la

carpeta DataSets disponemos de un dsUnidadesMedida, que usamos en el formulario para

crear unidades de medida. Debemos tener presente que cuando lo utilicemos, estaremos

creando una nueva instancia, por lo cual podemos reutilizarlo tantas veces necesitemos en

toda la aplicación.

27

Haz clic en el combo unidades de medida

Luego haz clic en la flecha negra que esta en la parte de arriba del control.

Elige Utilizar elementos enlazados a datos

Haz clic en Origen de Datos

Debes expandir Otros orígenes de datos

Debes expandir dsUnidadesMedida

Y seleccionar UnidadesMedida

Y Configura las tareas del combobox de esta forma

28

Se agregan al formulario los componentes necesarios para el acceso a datos del combobox.

Prueba la aplicación (F5), y el combobox debería listar las unidades de medida.

Ahora debemos crear el DataSet que nos permitirá guardar nuestros productos.

Creamos un nuevo elemento de conjunto de datos en la carpeta DataSets, y le llamamos

dsProductos.

Cerramos el escenario del dsProductos creado.

Nos vamos al menú del entorno Datos � Mostrar Orígenes de Datos

Seleccionamos el dsProductos, y lo Configuramos con el asistente.

(Supongo que recuerdas como hacer esto. Sino, vuelve atrás y repasa cuando lo hicimos

con el dsUnidadesMedida, en la pagina 15)

29

Luego de haber seleccionado la cadena de conexión, para el dsProductos, elegimos la

tabla Productos, y hacemos clic en finalizar.

Luego hacemos doble clic en Query, en las opciones de la izquierda.

(Debemos tener seleccionado el DataTable Productos)

Y elegimos la opción que se nos ofrece, y hacemos clic en siguiente.

30

Luego elegimos la opción para insertar un registro, y hacemos clic en siguiente.

La instrucción SQL se genera de forma automática.

Nota: los “?” que aparecen en los Values, indican parámetros, y son los que pasaremos

posteriormente.

Hacemos clic en siguiente, y le damos un nombre más significativo para nosotros, yo le

llamaré InsertarProducto

Damos clic a siguiente, y luego a finalizar.

31

Ahora, debemos arrastrar desde la ventana Orígenes de Datos, el DataTable Productos,

hasta el frmIngresoProductos.

Verifica que esté establecido como DataGridView.

Pero… ahora selecciona el DataGridView que se ha agregado al formulario, y elimínalo.

Si… elimínalo, solo lo insertamos para que a nuestro formulario se le agregaran algunos

elementos que usaremos. (dsProductos, ProductosBindingSource, y

ProductosTableAdapter)

Deja el formulario tal cual como lo habíamos diseñado.

Los elementos que tendremos son

32

Ahora programaremos el botón cmdAceptar. Hazle doble clic al botón.

Private Sub cmdAceptar_Click( ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles cmdAceptar.Click

End Sub

Lo primero que debemos hacer, es validar nuestros controles. En este formulario son

todos los campos requeridos, así que debemos validar su contenido. Private Sub cmdAceptar_Click( ByVal sender As System.Object, ByVal e As _

System.EventArgs) Handles cmdAceptar.Click

If Me.txtDescripcion.Text = "" Then MsgBox( "Ingrese la descripcion" , MsgBoxStyle.Exclamation) Me.txtDescripcion.Focus() Exit Sub End If If Me.txtPrecioCosto.Text = "" Then MsgBox( "Ingrese el precio de costo" , MsgBoxStyle.Exclamation) Me.txtPrecioCosto.Focus() Exit Sub End If If Me.txtPrecioVenta.Text = "" Then MsgBox( "Ingrese el precio de venta" , MsgBoxStyle.Exclamation) Me.txtPrecioVenta.Focus() Exit Sub End If If Not IsNumeric( Me.txtPrecioCosto.Text) Then MsgBox( "Ingrese un precio de costo valido" , MsgBoxStyle.Exclamation) Me.txtPrecioCosto.Text = "" Me.txtPrecioCosto.Focus() Exit Sub End If If Not IsNumeric( Me.txtPrecioVenta.Text) Then MsgBox( "Ingrese un precio de venta valido" , MsgBoxStyle.Exclamation) Me.txtPrecioVenta.Text = "" Me.txtPrecioVenta.Focus() Exit Sub End If End Sub

Con este código podemos garantizar los valores de nuestros controles.

Obviamente, hay otras maneras de hacerlo, incluso podemos cortar este código y crear un

método de validación, pero bueno… si quieres puedes mejorarlo.

Hasta aquí estaríamos listos para poder grabar nuestros productos. Pero…

Debemos generar el Código del producto, pues no es autonumerico en la tabla. Lo diseñé

así para que puedan practicar el uso de consultas de tipo Scalar, y como generar

secuencias numéricas manualmente.

Carga los orígenes de datos, y edita con el diseñador el dsProductos.

33

Ahora al DataTable Productos (del dsProductos), le agregaremos una nueva consulta a

los elementos del TableAdapter.

Seleccionamos Usar Instrucciones SQL, y hacemos clic en siguiente.

Luego elegimos la siguiente opción

34

La instrucción SQL será la siguiente:

SELECT MAX(Codigo)+1 AS NuevoCodigo FROM Productos

Con este código obtendremos el Código más Alto + 1, esto es; el siguiente código.

El único error que nos genera esta consulta es que hasta ahora no tenemos ningún código,

por lo que la primera vez nos devolverá NULL . Pero con el manejo de errores

desviaremos ese caso, a un Código Nuevo = 1.

Hacemos clic en Siguiente, le damos un nombre significativo, en mi caso nuevoCodigo

Hacemos clic en Siguiente y luego en Finalizar.

Cerramos el dsProductos, y guardamos los cambios.

Volvemos a la programación del Botón Aceptar, y agregamos el código (de programación)

necesario para obtener nuestro siguiente Código de producto.

35

Agrega el siguiente código al final de las instrucciones que definimos antes.

(Las del botón Aceptar)

...

...

If Not IsNumeric( Me.txtPrecioVenta.Text) Then

MsgBox( "Ingrese un precio de venta valido" , MsgBoxStyle.Exclamation)

Me.txtPrecioVenta.Text = ""

Me.txtPrecioVenta.Focus()

Exit Sub

End If

Dim nuevoCodigo As Integer

nuevoCodigo = Me.ProductosTableAdapter.nuevoCodigo()

End Sub

Ejecuta la aplicación (F5), llena con algunos datos validos (prueba con datos vacíos y no

validos, para probar las validaciones).

Haz clic en aceptar.

Si los datos no son validos, te dará los mensajes correspondientes, hasta que ingreses datos

validos.

Una vez que los datos son validos, te arrojará el siguiente error en tiempo de ejecución

Supongo que ya sabes de que se trata este error…. (Nos devuelve un valor NULL )

La excepción es: System.InvalidOperationException

36

Debemos controlarla. El código nos quedará así

... ...

If Not IsNumeric( Me.txtPrecioVenta.Text) Then MsgBox( "Ingrese un precio de venta valido" , MsgBoxStyle.Exclamation) Me.txtPrecioVenta.Text = "" Me.txtPrecioVenta.Focus() Exit Sub End If Dim nuevoCodigo As Integer Try nuevoCodigo = Me.ProductosTableAdapter.nuevoCodigo() Catch ex As System.InvalidOperationException nuevoCodigo = 1 End Try End Sub

Ahora, cuando obtengamos un nuevo código, y la base de datos esté vacía, nos asignará el

Código = 1.

Seguimos…

Ahora debemos, codificar la instrucción para que podamos guardar el nuevo producto.

El código nos queda así (Ufffff… que cantidad de código debo programar)

... ...

Dim nuevoCodigo As Integer Try nuevoCodigo = Me.ProductosTableAdapter.nuevoCodigo() Catch ex As System.InvalidOperationException nuevoCodigo = 1 End Try Try

Me.ProductosTableAdapter.InsertarProducto(nuevoCodigo , _ Me.txtDescripcion.Text, _ Me.cboUnidadMedida.SelectedValue, _ CInt ( Me.txtPrecioCosto.Text), _ CInt ( Me.txtPrecioVenta.Text)) txtCodigo.Text = nuevoCodigo MsgBox( "Se ha ingresado el nuevo producto con el Código Nº " & _

nuevoCodigo, MsgBoxStyle.Information) Catch ex As Exception msgbox( "Se ha generado un error al guardar el Producto" , _

MsgBoxStyle.Exclamation) End Try End Sub

Con este código insertamos un nuevo producto, además, si se produce un error mostramos

el correspondiente mensaje (Aunque un poco ambiguo, pero mas adelante lo

mejoraremos), y si la inserción es satisfactoria, indicamos con el Código asignado al

nuevo producto.

37

Ejecutemos (F5), llena el formulario con algún producto, y haz clic en Aceptar.

Ingresa 2 productos…

Debes haberte dado cuenta que lo único que nos esta faltando es que restablezcamos el

formulario.

Bueno eso es fácil…

Crea un método (Sub) llamado resetForm

Private Sub resetForm() End Sub

Corta el código que esta dentro del Evento frmIngresoProductos_Load y lo agregas al

método resetForm.

Agrega código para limpiar los controles.

Private Sub resetForm() Me.ProductosTableAdapter.Fill( Me.DsProductos.Productos) Me.UnidadesMedidaTableAdapter.Fill( Me.DsUnidadesMedida.UnidadesMedida) Me.txtCodigo.Text = "" Me.txtDescripcion.Text = "" Me.cboUnidadMedida.SelectedIndex = 0 Me.txtPrecioCosto.Text = "" Me.txtPrecioVenta.Text = ""

Me.txtDescripcion.Focus() End Sub

38

Ahora debes llamar al método resetForm, desde el Form_Load, al final de las

instrucciones del botón Aceptar, y como instrucción del botón Cancelar.

En el Form_Load

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

resetForm() End Sub

Al finalizar las instrucciones del botón Aceptar

...

... Try

Me.ProductosTableAdapter.InsertarProducto(nuevoCodigo , _ Me.txtDescripcion.Text, _ Me.cboUnidadMedida.SelectedValue, _ CInt ( Me.txtPrecioCosto.Text), _ CInt ( Me.txtPrecioVenta.Text)) txtCodigo.Text = nuevoCodigo MsgBox( "Se ha ingresado el nuevo producto con el Código Nº " & _

nuevoCodigo, MsgBoxStyle.Information) Catch ex As Exception MsgBox( "Se ha generado un error al guardar el producto" , _ MsgBoxStyle.Exclamation) End Try resetForm() End Sub

Como instrucción del botón Cancelar

Private Sub cmdCancelar_Click( ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles cmdCancelar.Click

resetForm() End Sub

Espero que llegues hasta aquí, y ahora que ejecutes la aplicación (F5), ya puedas ingresar

productos sin problemas…..

Te preguntaras… Que pasa si ingreso dos veces un producto con la misma Descripción???

Bueno, la base de datos tiene la columna Descripción Indexada y no permite duplicados.

Y en el manejo de errores controlamos las excepciones al ingresar un producto, por lo que

nos arrojará un mensaje de error, y como dije antes, es un poco ambiguo, pero lo

mejoraremos un poco.

39

Aunque ese error es de tipo general (cualquier excepción), podemos mejorarlo de la

siguiente forma.

Agrega otro manejador Catch para excepciones OleDb

Nos quedará así… (Nota: Cambié el mensaje de error para excepciones generales)

...

... Try

Me.ProductosTableAdapter.InsertarProducto(nuevoCodigo , _ Me.txtDescripcion.Text, _ Me.cboUnidadMedida.SelectedValue, _ CInt ( Me.txtPrecioCosto.Text), _ CInt ( Me.txtPrecioVenta.Text)) txtCodigo.Text = nuevoCodigo MsgBox( "Se ha ingresado el nuevo producto con el Código Nº " & _ nuevoCodigo, MsgBoxStyle.Information) Catch err As System.Data.OleDb.OleDbException MsgBox( "Se ha producido un error de consistencia en los da tos “ & _

ingresados para guardar" , MsgBoxStyle.Exclamation) Catch ex As Exception MsgBox( "Se ha producido un error no controlado al guardar los “ & _

datos" , MsgBoxStyle.Exclamation) End Try

resetForm() End Sub

CREANDO EL FORMULARIO PARA GESTIONAR LOS IMPUESTOS.

Les dejo de tarea el Crear el formulario para los Impuestos.

Es exactamente el mismo procedimiento que usamos para las Unidades de Medida.

El nombre que yo usaré para el formulario será frmImpuestos

El DataSet para los impuestos lo llamaré dsImpuestos

El la tercera parte de este manual, revisaremos de pasada dicho formulario, pero no creo

que tengas problemas. Solo repasa el procedimiento que usamos para el formulario de

Unidades de Medida y listo.

Saludos desde San Felipe – Chile

Christian Rodriguez Olmos

Si necesitas comprar cuentas Rapidshare.com Premium escríbeme a [email protected]