SISTEMA DE INVENTARIO BÁSICO EN VISUAL BASIC Y SQL SERVER

SISTEMA INVENTARIO DE PRODUCTOS

Este sistema trabaja con una base de datos, tiene un login, un formulario principal, inventario, categoría, usuarios y cambiar contraseña, en cada formulario puedes realizar el mantenimiento de los datos, buscar, registrar, modificar y eliminar.
 
¿Cómo funciona?

EL LOGIN esta validado para permitir el ingreso solo a los usuarios registrados en la base de datos.

Login

El formulario principal se hizo con FORMULARIOS ISMDICONTAINER contiene los formularios inventario, categoría, usuarios y cambiar contraseña.


Formulario inventario puedes realizar el mantenimiento (registrar, modificar y eliminar) de un producto y buscar el producto por nombre y/o categoría. 

Al registrar un producto se agrega de inmediato a lista de los productos.


Puedes modificar, eliminar un producto al presionar en su fila o también buscar un producto.


Formulario categoría puedes realizar el mantenimiento de una categoría y buscar la categoría por código y/o nombre. No se puede eliminar una categoría porque la tabla de productos depende del código de las categorías.

 
Formulario usuario puedes realizar mantenimiento y brindar permisos a los usuarios, al crear un nuevo usuario su contraseña será igual que su nick de usuario, por lo que deberá de cambiar al iniciar sesión.


Solo hay 2 tipo de permisos usuario y administrador. El usuario no puede ingresar al formulario Usuarios.


El formulario cambiar contraseña, el usuario solo debe de ingresar su nueva contraseña y cambiar.

¿Cómo iniciar?

Primero debemos de crear la base de datos VaiInventario123 y sus tablas.

CREATE DATABASE [VaiInventario123]
GO

USE [VaiInventario123]
GO

CREATE TABLE [dbo].[Categoria](
	[IdCategoria] [varchar](5) NOT NULL,
	[Nombre] [varchar](50) NULL,
 CONSTRAINT [PK_Categoria] PRIMARY KEY CLUSTERED 
(
	[IdCategoria] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Permisos](
	[IdPermisos] [varchar](5) NULL,
	[TipoPermiso] [varchar](50) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Productos](
	[Codigo] [varchar](5) NOT NULL,
	[Nombre] [varchar](50) NULL,
	[IdCategoria] [varchar](5) NULL,
	[Precio] [decimal](16, 2) NULL,
	[Stock] [int] NULL,
 CONSTRAINT [PK_Productos] PRIMARY KEY CLUSTERED 
(
	[Codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Usuarios](
	[Codigo] [varchar](5) NOT NULL,
	[Nombre] [varchar](50) NULL,
	[Correo] [varchar](50) NULL,
	[Usuario] [varchar](50) NULL,
	[Password] [varchar](50) NULL,
	[IdPermisos] [varchar](5) NULL,
 CONSTRAINT [PK_Usuarios] PRIMARY KEY CLUSTERED 
(
	[Codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Productos]  WITH CHECK ADD  CONSTRAINT [FK_Productos_Categoria] FOREIGN KEY([IdCategoria])

REFERENCES [dbo].[Categoria] ([IdCategoria])
GO
ALTER TABLE [dbo].[Productos] CHECK CONSTRAINT [FK_Productos_Categoria]
GO

Procedimientos almacenados.

Use VaiInventario123
go

--Login--
create proc vai_logueo
@usuario varchar(50),
@clave varchar(50)
as
select Nombre,Usuario,Password,IdPermisos,Codigo from Usuarios 
where usuario=@usuario and Password=@clave
go

--Listar categoria--
create proc vai_listar_categoria
as
select '' as IdCategoria,'--Seleccione--' as Nombre
union all
select * from Categoria
go
------------PRODUCTOS------------
--Listar productos--
create proc vai_buscar_productos 
@nombre varchar(50),
@idcategoria varchar(5)
as
select Codigo,pro.Nombre,pro.IdCategoria as idcategoria,cat.Nombre as Categoria, Precio,Stock 
from Productos pro,Categoria cat where pro.IdCategoria=cat.IdCategoria 
and pro.nombre like @nombre + '%' and pro.IdCategoria like @idcategoria + '%'
go

--Registrar productos---
create proc vai_nuevo_producto
@nombre varchar(50),
@idcategoria varchar(5),
@precio money,
@stock int
as
declare @codigonuevo varchar(5)
set @codigonuevo= (select MAX(Codigo) from Productos)
set @codigonuevo= 'P' + RIGHT ('0000' + LTRIM (right(isnull(@codigonuevo,'0000'),4)+1),4)
insert into Productos values (@codigonuevo,@nombre,@idcategoria,@precio,@stock)
go

--Elimina productos---
create proc vai_eliminar_producto
@codigo varchar(5)
as
delete from Productos where Codigo=@codigo
go

--Modificar productos---
create proc vai_modificar_producto
@codigo varchar(5),
@nombre varchar(50),
@idcategoria varchar(5),
@precio money,
@stock int
as
update Productos set Nombre=@nombre,IdCategoria=@idcategoria,Precio=@precio,Stock=@stock
where Codigo=@codigo
go
------------CATEGORIA------------
--Buscar categoria--
create proc vai_buscar_categoria
@idcategoria varchar(5),
@nombre varchar(50)
as
select IdCategoria,Nombre from Categoria where IdCategoria like @idcategoria + '%' and Nombre like @nombre + '%'
go
--Registrar categoria---
create proc vai_nueva_categoria
@nombre varchar(50)
as
declare @codnuevocat varchar(5)
set @codnuevocat= (select MAX(IdCategoria) from Categoria)
set @codnuevocat= 'C' + RIGHT ('0000' + LTRIM (right(isnull(@codnuevocat,'0000'),4)+1),4)
insert into Categoria values (@codnuevocat,@nombre)
go
--Modificar categoria---
create proc vai_modificar_categoria
@codigo varchar(5),
@nombre varchar(50)
as
update Categoria set Nombre=@nombre where IdCategoria=@codigo
go
------------USUARIOS------------
--Buscar usuarios--
create proc vai_buscar_usuarios
@nombre varchar(50)
as
select codigo,Nombre,Correo,Usuario,per.IdPermisos,per.TipoPermiso
from Usuarios usu,Permisos per where usu.IdPermisos=per.IdPermisos
and Nombre like @nombre + '%'
go

--Nuevo usuarios--
create proc vai_nuevo_usuario
@nombre varchar(50),
@correo varchar(5),
@usuario varchar(50),
@permiso varchar(5)
as
declare @codigonuevo varchar(5)
set @codigonuevo= (select MAX(Codigo) from Usuarios)
set @codigonuevo= 'A' + RIGHT ('0000' + LTRIM (right(isnull(@codigonuevo,'0000'),4)+1),4)
insert into Usuarios values (@codigonuevo,@nombre,@correo,@usuario,@usuario,@permiso)
go
--Modificar usuarios--
create proc vai_modificar_usuario
@codigo varchar(5),
@nombre varchar(50),
@correo varchar(50),
@permiso varchar(5)
as
update Usuarios set Nombre=@nombre,IdPermisos=@permiso,Correo=@correo where Codigo=@codigo
go

create proc vai_eliminar_usuario
@codigo varchar(5)
as
delete from Usuarios where Codigo=@codigo
go

------------PERMISOS------------
create proc vai_listar_permisos
as
select '' as idpermisos,'--Seleccione--' as Permiso
union all
select * from Permisos
go
------------RESETEAR PASSWORD------------
create proc vai_reset_pass
@codigo varchar(5)
as
update Usuarios set Password=Usuario where Codigo=@codigo
go

------------CAMBIAR PASSWORD------------
create proc vai_pass
@codigo varchar(5),
@clavenueva varchar(50)
as
update Usuarios set Usuarios.Password=@clavenueva where Codigo=@codigo
go

Llenar datos (Opcional), recuerda que algunas tablas están enlazadas por lo que los datos tienen que coincidir, por ejemplo el código de categoría esta enlazado con una columna de la tabla productos.

Use VaiInventario123
go

--Insertar datos de usuarios--
--B0001 = ADMIN
--B0002 = USUARIO
insert into Usuarios values('A0001','VaidrollTeam','correo@gmail.com','admin','admin','B0001')
insert into Usuarios values('A0002','Usuario2','correo2@gmail.com','admin2','admin2','B0001')
insert into Usuarios values('A0003','Usuario3','correo3@gmail.com','usu1','usu1','B0002')
insert into Usuarios values('A0004','Usuario4','correo4@gmail.com','usu2','usu2','B0002')
insert into Usuarios values('A0005','Usuario5','correo5@gmail.com','usu3','usu3','B0002')
insert into Usuarios values('A0006','Usuario6','correo6@gmail.com','usu4','usu4','B0002')

select * from Usuarios
go

--Insertar datos de permisos--
insert into Permisos values('B0001','Administrador')
insert into Permisos values('B0002','Usuario')

--Insertar datos de categorias--

insert into Categoria values('C0001','Categoria1')
insert into Categoria values('C0002','Categoria2')
insert into Categoria values('C0003','Categoria3')
insert into Categoria values('C0004','Categoria4')
insert into Categoria values('C0005','Categoria5')
insert into Categoria values('C0006','Categoria6')
insert into Categoria values('C0007','Categoria7')
insert into Categoria values('C0008','Categoria8')
insert into Categoria values('C0009','Categoria9')
insert into Categoria values('C0010','Categoria10')

select * from Categoria
go
--Insertar datos de productos--

insert into Productos values('P0001','Producto1','C0001','12.00',10)
insert into Productos values('P0002','Producto2','C0002','6.00',6)
insert into Productos values('P0003','Producto3','C0003','4.00',20)
insert into Productos values('P0004','Producto4','C0004','20.00',42)
insert into Productos values('P0005','Producto5','C0005','90.00',2)
insert into Productos values('P0006','Producto6','C0006','30.00',65)
insert into Productos values('P0007','Producto7','C0001','47.00',2)
insert into Productos values('P0008','Producto8','C0005','41.00',4)
insert into Productos values('P0009','Producto9','C0003','26.00',1)
insert into Productos values('P0010','Producto10','C0001','31.00',8)
insert into Productos values('P0011','Producto11','C0010','64.00',16)
insert into Productos values('P0012','Producto12','C0009','85.00',74)
insert into Productos values('P0013','Producto13','C0008','95.00',30)
insert into Productos values('P0014','Producto14','C0007','16.00',5)
insert into Productos values('P0015','Producto15','C0004','3.00',8)
insert into Productos values('P0016','Producto16','C0002','8.00',54)
insert into Productos values('P0017','Producto17','C0001','7.00',10)
insert into Productos values('P0018','Producto18','C0003','14.00',16)
insert into Productos values('P0019','Producto19','C0010','64.00',2)
insert into Productos values('P0020','Producto20','C0006','38.00',8)

select * from Productos
go
--------------------------------

En el proyecto > Class1, puedes encontrar la conexión, tienes que modificar con el nombre del servidor de tu SQL Server.

Dim cnx As New SqlConnection("server=localhost\SQLEXPRESS;integrated security=true;Database=VaiInventario123")


Una vez creado la base de datos, los procedimientos almacenados, agregar data y modificar la conexión, recién funcionará el proyecto. 


ClassLibrary1, contiene toda las funciones para la comunicación entre el SQL Server y el Visual Studio 2019.

img, contiene los iconos y el fondo.

VaidrollTeamWindowsApp1, contiene los formularios.

Errores y soluciones

E: System.Data.SqlClient.SqlException: 'Cannot open database

S: La base de datos no esta creada o el nombre esta mal escrito en la cadena de conexión.


E: System.Data.SqlClient.SqlException: 'Error relacionado con la red o específico de la instancia mientras se establecía una conexión con el servidor SQL Server...

S: Debes de modificar el server en la cadena de conexión con el nombre de tu SQL SERVER, el mío es "server=localhost\SQLEXPRESS" el tuyo posiblemente sea "localhost", ".","el nombre de tu pc", etc.

Recuerda

Este proyecto es una versión básica de un sistema y te puede ser muy útil si recién estas iniciando o si estas practicando.


  • Visual Studio 2019
  • Microsoft SQL Server Management Studio 18

  • Nombre: SistemaInventarioVB1.rar
  • Tamaño: 1.8 MB

 Descargar