En la entrada anterior se creó el módulo para conectarnos a nuestra base de datos y poder interactuar a través de nuestra aplicación.
Hoy se introducirá el código al resto de los formularios.
Doy por echo de que ya saben conceptos básicos del lenguaje SQL, sino, les puedo explicar con más detalle el código.
Perfeccionando al contenedor
Abrimos el Formulario: frmPuntoVenta
▪Propiedad:
▪IsMdiContainer – True
▪BackGroundImage
–
Insertamos
logo
de la empresa
▪BackGroundImageLayout
– Stretch
▪MaximizeBox – False
▪MinimizeBox – False
▪Size – 900,
600
▪WindowState – Normal
Perfeccionando a los formularios hijos
Abrimos el Formulario: frmProducto
▪Propiedad:
▪IsMdiContainer – False
▪MaximizeBox – True
▪MinimizeBox –
True
▪WindowState – Maximized
▪Y
lo vamos reordenado.
▪Agregamos
un txt más al inicio con el nombre de TxtId
Deseamos que inicie mostrando todos los datos, y además, que solo el txtNombre esté habilitado. Doble clic al formulario y colocar en el Load:
' Este código llama al procedimiento ActualizarDatos, e inhabilita todas las cajas de texto (TextBox)
ActualizarDatos()
TxtId.Visible = False
TxtDescripción.Enabled = False
TxtMarca.Enabled = False
TxtPrecio.Enabled = False
TxtCosto.Enabled = False
TxtStok.Enabled = False
TxtMinimo.Enabled = False
Txtproveedor.Enabled = False
Se realiza el procedimiento ActualizarDatos()
'En este método cargamos la información de una tabla desde el MySql
' DGProducto es el DataGridView
'Se crea la variable consulta de tipo cadena, y le colocamos la sentencia de mysql para realizar una búsqueda
Private Sub ActualizarDatos()
' Se muestran todos los campos de la tabla productos, donde el nombre sea igual a lo que se escriba en la caja de texto.
' A partir de la primera letra que se pulse empieza a realizar el "filtrado de datos"
Dim consulta As String = " select * from productos where nombre like'" & TxtNombre.Text & "%'"
' Los datos que aparecen en el DataGridView son en base a la consulta y se conecta al módulo de TodoSQL
DGProducto.DataSource =
SQLSEL(consulta).Tables("datos").DefaultView
'Cerramos la conexión con el servidor
conex.Close()
End Sub
Se llama al procedimiento ActualizarDatos() en el TxtNombre, para filtrar datos
ActualizarDatos()
Código al botón Nuevo
'Limpia las
cajas de texto
Me.TxtId.Text = ""
Me.TxtNombre.Text = ""
Me.TxtDescripción.Text = ""
Me.TxtMarca.Text = ""
Me.TxtPrecio.Text = ""
Me.TxtCosto.Text = ""
Me.TxtStok.Text = ""
Me.Txtproveedor.Text = ""
Me.TxtMinimo.Text = ""
Me.TxtNombre.Focus()
'Convierte en visibles los demás TextBox
TxtDescripción.Enabled = True
TxtMarca.Enabled = True
TxtPrecio.Enabled = True
TxtCosto.Enabled = True
TxtStok.Enabled = True
TxtMinimo.Enabled = True
Txtproveedor.Enabled = True
Ahora, lo que se desea, es que
cuando le de clic al DataGridView, me muestre los datos en los TextBox.
Con el control DataGridView se puede mostrar y editar los datos en
tablas a partir de numerosos tipos diferentes de orígenes de datos.
El enlace de datos al control DataGridView es sencillo e intuitivo y en muchos casos es tan fácil como establecer
la propiedad DataSource.
Propiedad
DataGridView.Item
Proporciona un indizador para
obtener o establecer en la celda situada en la intersección de fila y columna
especificadas.
Procedimiento Transportar()
Se tiene que saber la columna y la
fila en que se encuentra el dato que queremos pasar a los TextBox.
Por default, la primera columna, la
que está a la izquierda es 0, la siguiente es 1, y así consecutivamente.
La columna de nuestra tabla siempre
sabremos su posición, en cambio, el de la fila no, para eso está la propiedad:
CurrentCellAddress, que obtiene
los índices de fila y columna de la celda activa actualmente.
TxtId.Text = DGProducto.Item(0, DGProducto.CurrentCellAddress.Y).Value
Procedimiento Transportar
Private Sub Transportar()
'Convierte en visibles los demás TextBox
TxtDescripción.Enabled = True
TxtMarca.Enabled = True
TxtPrecio.Enabled = True
TxtCosto.Enabled = True
TxtStok.Enabled = True
TxtMinimo.Enabled = True
Txtproveedor.Enabled = True
TxtId.Text = DGProducto.Item(0, DGProducto.CurrentCellAddress.Y).Value
TxtNombre.Text = DGProducto.Item(1, DGProducto.CurrentCellAddress.Y).Value
TxtDescripción.Text = DGProducto.Item(2, DGProducto.CurrentCellAddress.Y).Value
TxtMarca.Text = DGProducto.Item(3, DGProducto.CurrentCellAddress.Y).Value
TxtPrecio.Text = DGProducto.Item(4, DGProducto.CurrentCellAddress.Y).Value
TxtCosto.Text = DGProducto.Item(5, DGProducto.CurrentCellAddress.Y).Value
TxtMinimo.Text = DGProducto.Item(8, DGProducto.CurrentCellAddress.Y).Value
Txtproveedor.Text = DGProducto.Item(6, DGProducto.CurrentCellAddress.Y).Value
TxtStok.Text = DGProducto.Item(7, DGProducto.CurrentCellAddress.Y).Value
End Sub
Establecer que cuando le de un clic
al DatagridView, pase los datos a los TextBox
Transportar()
Código al botón Eliminar
If MsgBox("¿Seguro que desea eliminar
el Producto?", vbYesNo + vbCritical) = vbYes Then
MsgBox("Eliminado")
Dim strEliminar As String = "delete from productos where idproducto='" & DGProducto.Item(0, DGProducto.CurrentCellAddress.Y).Value & "'"
SQLIDU(strEliminar)
conex.Close() 'Cerramos la conexión con el servidor
ActualizarDatos()
Else
MsgBox("No Eliminado")
End If
Código al botón Guardar
Dim insertar As String = "insert into productos values('" & TxtNombre.Text & "', '" & TxtDescripción.Text & "','" & _
TxtMarca.Text & "','" & TxtPrecio.Text & "','" & TxtCosto.Text & "','" & TxtMinimo.Text & "','" & _
TxtStok.Text & "', '" & Txtproveedor.Text & "')"
SQLIDU(insertar)
conex.Close()
MsgBox("datos agregados")
Código al botón Modificar / Actualizar
If MsgBox("¿Desea Editar este
Producto?", vbYesNo + vbQuestion) = vbYes Then
Try
Dim Modificar As String = "update productos set nombre='" & TxtNombre.Text & "'," & _
"descripcion='" & TxtDescripción.Text & "'," & _
"marca='" & TxtMarca.Text & "'," & _
"precio=" & TxtPrecio.Text & "," & _
"costo=" & TxtCosto.Text & "," & _
"minimo=" & TxtMinimo.Text & "," & _
"stok="
& TxtStok.Text & "," & _
"idproveedorpro=" & Txtproveedor.Text & " where idproducto =" & TxtId.Text & ""
MsgBox(Modificar)
SQLIDU(Modificar)
conex.Close()
ActualizarDatos()
MsgBox("Producto Modificado", vbInformation)
Catch
End Try
End If
Perfeccionando el código
¿Qué pasaría si el usuario da un
clic al DataGridView, modifica los datos en el TextBox y en lugar de pulsar el botón
Modificar, pulsa el botón guardar?
Para evitar eso, se pueden manejar
tres opciones posibles y manejarlo por medio de un Si condicional:
Opción 0: Iniciar en filtrado
Opción 1: Guardar el dato
Opción 2: Actualizar / Modificar el dato
Se declara una variable en el
formulario
Public Class frmProducto
Dim ACCION As Integer = 0
Al final del código del botón nuevo
le añadimos:
ACCION = 1
Al final del código del
procedimiento Transportar() le añadimos:
ACCION = 2
Perfeccionando el código del botón Guardar
If ACCION = 1 Then
Dim insertar As String = "insert into productos values('" & TxtNombre.Text & "', '" & TxtDescripción.Text & "','" & _
TxtMarca.Text & "','" & TxtPrecio.Text & "','" & TxtCosto.Text & "','" & TxtMinimo.Text & "','" & _
TxtStok.Text & "', '" & Txtproveedor.Text & "')"
SQLIDU(insertar)
conex.Close()
MsgBox("datos agregados")
ElseIf ACCION = 2 Then
If MsgBox("¿Desea Editar este
Producto?", vbYesNo + vbQuestion) = vbYes Then
Try
Dim Modificar As String = "update productos set nombre='" & TxtNombre.Text & "'," & _
"descripcion='" & TxtDescripción.Text & "'," & _
"marca='" & TxtMarca.Text & "'," & _
"precio=" & TxtPrecio.Text & "," & _
"costo=" & TxtCosto.Text & "," & _
"minimo=" & TxtMinimo.Text & "," & _
"stok="
& TxtStok.Text & "," & _
"idproveedorpro=" & Txtproveedor.Text & " where idproducto =" & TxtId.Text & ""
MsgBox(Modificar)
SQLIDU(Modificar)
conex.Close()
ActualizarDatos()
MsgBox("Producto Modificado", vbInformation)
Catch
End Try
Else
MsgBox("Operacion Cancelada", vbInformation)
conex.Close()
ActualizarDatos()
End If
End If
Cambiando el código del botón Modificar
ACCION = 2
Por último, código del botón Salir
Me.Hide()
frmPuntoVenta.Show()
Quizá haya dudas acerca de donde colocar el código, por eso les comparto el proyecto completo, y en posteriores entradas, iré explicando detalles del código restante, así como del Crystal Report y generar un Instalador.
Observación: Crear en la Base de Datos en MySQL a un usuario con cargo de contador, para que se pueda loguear en la aplicación; pueden usar esta sentencia:
insert into empleado(idempleado, nombre, direccion, telefono, usuario, contrasenia, sexo, fecha_nacimiento, cargo)
values (100, 'Iván Vega', 'Izamal', 9999999999, 'Ivan', 'Vega', 'H', '1984-06-24', 'Contador');
values (100, 'Iván Vega', 'Izamal', 9999999999, 'Ivan', 'Vega', 'H', '1984-06-24', 'Contador');
Si en MySQL creas a este usuario, al momento de loguearte, usar como usuario Ivan y como contraseña Vega.
Observación2: Quizá en algunos módulos de la aplicación les genere error, debido a que aún no les he explicado lo de Crystal Reports, pero pueden ver el diseño y en donde van los códigos.
Este comentario ha sido eliminado por el autor.
ResponderEliminar¿Qué deseas saber?
EliminarComo enlazar que en el DataGridView aparezcan los resultados?
¿O qué parte?
Hola Ivan muy bueno tu aporte , pero me da muchos errores
ResponderEliminarSaludos Aldo.
EliminarEnvíame un mail a ivanvegauc@gmail.com con capturas de pantalla, dudas e incluso tu software y te apoyo.
Buenas Ivan Vega un gusto podría ponerme en contacto con Ud. mi correo es sfmg1981@gmail.com me gustaría tener el proyecto de punto de ventas, desde ya muchas gracias.
ResponderEliminarSaludos Sergio. Ya te lo envié.
EliminarBuenas Ivan Vega un gusto saludrle me gustaría tener el proyecto de punto de ventas, seria tan gentil de facilitarmelo a mi correo victor.alejandro62@gmail.com desde ya muchas gracias.
ResponderEliminar¿Qué tal Víctor?
EliminarAcabo de mandartelo a tu correo.
Buenas noches muy buen aporte lo felicito que version crystal reportusa
EliminarIvan, buenas tardes me podria facilitar el punto de venta terminado con todo los codigos fuentes, para guiarme necesito hacer una de abarrote
ResponderEliminarmi correo es martinezhermilo261@gmail.com
ResponderEliminarBuen dia Ivan Vega un gusto saludrle me gustaría tener el proyecto de punto de ventas, seria tan gentil de facilitarmelo a mi correo hepl976@gmail.com muchas gracias.
ResponderEliminarcochinero de sistema
ResponderEliminar