Visual Basic.NET - Sumar datos entre tablas de base de datos

 
Vista:
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 23/04/2020 09:39:25
Porfavor necesito ayuda con un codigo.

Veran lo que pasa es que estoy haciendo un programa para registrar artículos dentro de un almacén, tengo los formularios para buscar productos este solo mostrara los datos del producto y la cantidad que hay en el inventario, en ese formulario se puede consultar, agregar, eliminar y modificar(esto es controlado por un administrador). También tengo el formulario para el registro de productos, este registrara el producto que sale o entra al almacén, osea su funcion es solo la de agregar (esto sera controlado por un invitado).

En la base de datos (Access 2016) tengo 2 tablas, 1 que es la de los productos en el "Inventario" y la otra es la de "Registros", entonces mi problema es que al registrar un producto, la cantidad que este en registro ya sea de entrada o de salida se reste o se sume según sea el caso del Inventario
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 23/04/2020 10:57:13
Hola,

Este es una ilustración del algoritmo. Tienes que lo escribir en detalle.

Para un producto en moviente, tomas su Id (IdR) y la cantidad (CuantidadMov) :

Leer la tabla Registros :
1
SELECT *, Cantidad As CantidadInv FROM Inventario WHERE ID = IdR

Modificar la tabla Inventario :
1
UPDATE Inventario SET Cantidad, … VALUE (CantidadInv + CantidadMov,) WHERE ID = IdR

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 24/04/2020 02:01:11
Amigo gracias por tu comentario pero tengo unas cuantas dudas acerca de la consulta, pasa que soy un poco nuevo en la programacion y estoy aprendiendo un poco como funciona.

en la consulta que me muestras para leer la tabla de registro basicamente esta diciendo que seleccione todos los campos? o solo el campo cantidad de la tabla inventario? porque no entendi muy bien la parte de "Cantidad as Cantidadinv", cantidadinv es una variable?

Tengo este codigo que me habia pasado un amigo pero no me esta funcionando bien, el codigo esta dentro de una clase y en el boton agregar solo llamo a la funcion agregar, luego la de actualizar el datagrid y por ultimo la funcion suma de datos, pero al agregar lo que hace es registrar el producto en la tabla registro y actualiza la tabla, pero la funcion de sumadedatos no la hace, no entiendo porque

la funcion para buscar es esta, con esto cargo la tabla en la voy a buscar los datos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function buscar(ByVal TxtCodigo_de_producto)
 
    tabladeinventario.Rows.Clear()
    MConexion.comandosSQL = "SELECT * FROM Inventario WHERE Codigo_de_producto='" & TxtCodigo_de_producto & "'"
    MConexion.Abrirconexion()
    tabladeinventario.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
    If tabladeinventario.Rows.Count <> 0 Then
        buscar = True
    Else
        buscar = False
    End If
 
    Return buscar
End Function

y esta es la funcion que tengo para sumar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Sumadedatos(ByVal TxtCodigo_de_producto, ByVal TxtNombre_de_Producto, ByVal TxtCantidad)
    Sumadedatos = False
    If buscar(TxtCodigo_de_producto) = True Then
        Dim suma = Convert.ToInt32(tabladeinventario.Rows(0).Item("Cantidad").ToString) + Convert.ToInt32(TxtCantidad)
        MConexion.comandosSQL = "UPDATE Inventario SET Nombre_de_Producto='" & TxtNombre_de_Producto & "', Cantidad='" & suma & "' WHERE Codigo_de_producto='" & TxtCodigo_de_producto & "'"
 
        MConexion.Abrirconexion()
        MConexion.comandoRUN.ExecuteNonQuery()
        MConexion.Cerrarconexion()
    Else
        MsgBox("El Producto no se encuentra registrado", MsgBoxStyle.Information, "Mensaje del Sistema")
        Sumadedatos = False
    End If
End Function

Captura

y este es el codigo del formulario en el que se encuentra el boton agregar

1
2
3
4
5
6
7
8
9
Public Class RegistrodeProductos
Private CRegistrodeproductos As New CRegistrodeproductos
 
Private Sub ButtAgregar_Click(sender As Object, e As EventArgs) Handles ButtAgregar.Click
    CRegistrodeproductos.agregar(TxtCodigo_de_producto.Text, TxtNombre_de_Producto.Text, TxtFecha.Text, ComboBoxTipo_de_registro, TxtCantidad.Text, TxtCedula_del_Solicitante.Text)
    CRegistrodeproductos.Cargartabla(DataGridViewRegistrodeProductos)
    CRegistrodeproductos.Sumadedatos(TxtCodigo_de_producto.Text, TxtNombre_de_Producto.Text, TxtCantidad.Text)
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 24/04/2020 08:34:07
Hola,

Si tengo poco tiempo en la tarde, buscaré un ejemplo y te lo enviaré.

Sobre "Cantidad as Cantidadinv", ... As .... serve para dar otro nombre al campo. Aqui, he escrito CantidaInv para hacer la diferencia entre la Cantidad de la tabla Registro y Cantidad de la tabla Inventario.

Para ta pregunta "... todos los campos? o solo el campo cantidad de la tabla inventario ... ", para cambiar a Cantidad, es necesario de conocer los campos Cantidad de los dos tablas y el identificador del producto.

Tu codigo "MConexion.comandosSQL = "UPDATE Inventario SET Nombre_de_Producto='" & TxtNombre_de_Producto & "', Cantidad='" & suma ... " parecerme correcta excepto sobre un detalle : cuando el campo de la tabla es un numérico, no tienes que escribir el caracter '.
Sobre este detalle, tu código debe ser (corrijo algunos detalles) :
1
2
3
4
5
6
7
8
9
10
' Este es necesario de escribir las declaraciones completamente
Public Function Sumadedatos(ByVal TxtCodigo_de_producto As String, ByVal TxtNombre_de_Producto As String, ByVal TxtCantidad As Integer) As Boolean
        Sumadedatos = False
        ' If buscar(TxtCodigo_de_producto) = True Then    ' Si buscar envia True o False, = True no es necesario
If buscar(TxtCodigo_de_producto) Then
            Dim suma As Integer
Suma = Convert.ToInt32(tabladeinventario.Rows(0).Item("Cantidad").ToString) + Convert.ToInt32(TxtCantidad)
            MConexion.comandosSQL = "UPDATE Inventario SET Nombre_de_Producto='" & TxtNombre_de_Producto & "', Cantidad= " & suma & " WHERE Codigo_de_producto=" & TxtCodigo_de_producto
 
' ... ... ...

Hasta luego, quizá ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 24/04/2020 10:04:39
Gracias me funciono el codigo, el detalle era que estaba cargando en la datatable los datos de ambas tablas, cuando en realidad tenia que cargar en una los datos de la tabla inventario y en la otra la de registro y por eso no hacia la suma.

Pero ahora tengo otro problema y es que quiero hacer un perfil de usuario, pero quiero que busque los datos de la persona que esta ingresando en el formulario login y muestre solo los campos, nombre, apellido, telefono y privilegios en el formulario de perfil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 24/04/2020 10:51:51
Entonces no debo buscar un ejemplo completo : este es mejor porque no tengo mucho tiempo ...

Para cargar las informaciones de una persona, tienes que saber como las buscar.

Si tienes el apellido, o el nombre, o el alias de login, y que estas informaciones están en la DB, puedes escribir una consulta que parece como esta :

1
SELECT * FROM TablaDeLasPersonnas WHERE CampoDelLogin = '" & LaTextBoxQueContieneElLogin.Text & "'"

Quizá no bien comprendo tu pregunta ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 24/04/2020 20:46:06
bien entonces mi funcion buscar seria esta

1
2
3
4
5
6
7
8
Public Function buscar(ByVal TxtUsuario As String)
    Tabla.Rows.Clear()
    MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
    MConexion.Abrirconexion()
    Tabla.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
 
End Function

(el txtusuario se estaria refiriendo al textbox del login) pero solo estaria haciendo una busqueda y los datos los guardo en la datatable y entonces tendria como que hacer otra funcion en la que le asigno a los labels correspondientes los datos que necesito, pero entonces como sacaria los datos de los campos que necesito de ese datatable? y como los mostraria en el los labels?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 24/04/2020 21:28:51
Hola,

Supongo que tu Tabla es un DataTable.
En este caso, el codigo parece como este :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Function buscar(ByVal TxtUsuario As String)
    Tabla.Rows.Clear()
    MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
    MConexion.Abrirconexion()
    Tabla.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
 
' Aqui, el Tabla contiene todos los campos. Conoces los nombres de los campos.
' Para mostrar los valores en las zonas de textos :
 
   'DGVTest es un DataGridView
 
    DGVTest.DataSource = Tabla  ' Para ejemplo, todos campos están mostrados
 
    'CBTest es un ComboBox
 
    CBTest.DataSource = Tabla
    CBTest.DisplayMember = "Apellido" ' este es el NombredelCampoQueMeGustaAqui, Apellido
 
    'LBTest es un ListBox
 
    LBTest.DataSource = Tabla
    LBTest.DisplayMember = "Nombre" ' este es ElNombreDelCampoQueMeGustaAqui, ej. Nombre
 
    'TBTest es un TextBox
 
    TBTest.DataBindings.Add("Text", Tabla, "Login") ' este es ElNombredelCampoQueMeGustaAqui, ej. Login
 
    'LTest es un Label
 
    TTest.DataBindings.Add("Text", Tabla, "Apellido") ' este es ElNombredelCampoQueMeGustaAqui, ej. Apellido
' ... ... ...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 25/04/2020 03:21:27
vale, gracias amigo, armare el codigo para ver si funciona , te estare avisando de los resultados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 25/04/2020 07:45:57
Uff amigo estuve intentando y esta algo complicado, porque lo tengo armado asi

Esta es la funcion que va a buscar los datos del usuario en el formulario login y lo va a guardar en la Datatable(Perfil)
1
2
3
4
5
6
7
8
9
Public Function buscar(ByVal TxtUsuario As String)
 
    Perfl.Rows.Clear()
    MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
    MConexion.Abrirconexion()
    Perfl.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
 
End Function

Y esta es la funcion para mostrar e un datagrid que esta en el formulario perfil de usuario los datos que se cargaron en la datatable(perfil) de la funcion de arriba

1
2
3
4
5
Public Sub cargardatos(ByVal DataGridView1)
 
    DataGridView1.datasource = Perfl
 
End Sub

aunque esta algo vacia pero imagine que podria se asi, aunque al abrir el formulario del perfil de usuario no muestra nada en el datagrid

ambas funciones estan en una clase y las estoy llamando para formularios diferentes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 25/04/2020 09:11:09
Hola,

No pienso que este es la fuente del error pero tienes que escribir las declaraciones completamente. Declaraciones no completas están fuentes de errores que vienen cuando no lo esperamos.
1
2
3
4
5
6
7
8
9
' Para esta funcion, hacia debido lo decir mas temprano ...  :(
Public Function buscar(ByVal TxtUsuario As String) As Boolean
' ... ... ...
 
' Y tambien :
 
Public Sub cargardatos(ByVal DataGridView1 As DataGridView)   ' porque ByVal y no ByRef ?
        DataGridView1.datasource = Perfl
End Sub

Para verificar, agregas un MessageBox en Function buscar. Es normale que esta función no envia resultado ? :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function buscar(ByVal TxtUsuario As String) As Boolean
 
        Perfl.Rows.Clear()
        MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
        MConexion.Abrirconexion()
        Perfl.Load(MConexion.comandoRUN.ExecuteReader)
        MConexion.Cerrarconexion()
 
' Para ver directamente si la consulta es buena
MessageBox.Show (Perfl.Rows.Count)
' Si Count es 0, verificar la variable TxtUsuario
' Si la variable TxtUsuario es bien, testas con  ... WHERE Nombre_de_usuario LIKE '" & TxtUsuario & "'"
       If Perfl.Rows.Count <> 0 Then
           Return True
        Else
            Return False
        End If
    End Function

Testas y dice me tus comentarios.
No olvidas las correcciones de las declaraciones.

Hasta pronto ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 26/04/2020 01:31:48
vale pero no entiendo muy bien el codigo, selecciona todo los datos de la tabla usuario segun el nombre de usuario que coloquen en el textbox pero el msgbox que va a mostrar? la datatable perfil? otra cosa, el byref que funcion tiene? porque solo se del byval y se refiere a un valor ingresado en el item que se declare, ya sea un texbox o combobox, pero byref no se como usarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 26/04/2020 09:22:18
Hola Richard,

La diferencia entre ByVal y ByRef :

ByVal : este es un duplicad completa del objecto o variable que pasa en la Function o Sub.
La modificación del objecto o variable en la Function o Sub no modifica el objecto en el código llamando.
Este es una seguridad pero muchos bytes están copiados.

ByRef : este es la dirección en memoria del objecto o variable (Pointer, ptr, adressOf, ...) que pasa en la Function o Sub.
La modificación del objecto o variable en la Function o Sub modifica el objecto localizado a esta direccion. Entonces, este modifica el objecto en el código llamando.
Este es peligroso si no hay precaución en la programación pero solamente 8 bytes están pasados. Generalmente, pasamos objectos complexos (TextBox, Button, DatagridView, UnaClasa, ...) con ByRef y no afectamos las propiedades del objecto en Function o Sub.

En tu caso, debes utilizar ByRef para el DataGridView :
1
2
3
Public Sub cargardatos(ByRef DGV As DataGridView)
        DGV.datasource = Perfl
End Sub
y cuando debes llamar este función, escribes solamente : cargardatos(DataGridView1)

Para la función buscar(ByVal TxtUsuario As String) As Boolean, este es el texto del TextBox que pasas. Este es bien.
Y cuando debes llamar este función, escribes solamente : buscar(LaTextBoxQueContieneElNombreDelUsario.Text)

Mi MessageBox debe mostrar rápido si vienen registros con la consulta. Este es para comprender de dónde no funciona.

Para el resto del código, debes lo comprender, este es tu código !

Que tenga un buen día.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 26/04/2020 09:44:19
Buenas amigo estuve testando y aun no e logrado cargar el datagrid

el codigo de buscar lo tengo asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function buscar(ByVal TxtUsuario As String) As Boolean
 
 
    MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
    MConexion.Abrirconexion()
    Perfl.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
 
    MessageBox.Show(Perfl.Rows.Count)
 
    If Perfl.Rows.Count <> 0 Then
        Return True
    Else
        Return False
    End If
 
End Function

y la de mostrar los datos en el datagrid esta asi

1
2
3
4
5
Public Sub cargardatos(ByRef DataGridView1 As DataGridView)
 
    DataGridView1.DataSource = Perfl
 
End Sub

implemente lo del byref que me dijiste pero aun nada :c de todas maneras asi estoy usando la funcion buscar en el formulario login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class Login
Private Clogin As New CLogin
 
Private Sub ButtEntrar_Click(sender As Object, e As EventArgs) Handles ButtEntrar.Click
 
    If TxtUsuario.Text <> "" And TxtContraseña.Text <> "" Then
 
        Clogin.Entrar(TxtUsuario.Text, TxtContraseña.Text)
        Clogin.buscar(TxtUsuario.Text)
 
    Else
 
            MsgBox("Disculpe debe rellenar todos los campos ", MsgBoxStyle.Information, "Mensaje del Sistema")
 
    End If
 
End Sub

y esta es la funcion de entrar en el login(para que entienda un poco como funciona)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Function Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String)
 
    Tabla.Rows.Clear()
    MConexion.comandosSQL = "SELECT Nombre_de_usuario, Clave FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "' AND Clave='" & TxtContraseña & "'"
    MConexion.Abrirconexion()
    Tabla.Load(MConexion.comandoRUN.ExecuteReader)
    MConexion.Cerrarconexion()
    'si los datos en las columnas son correctos (mayor o menor a 0) entonces
    If Tabla.Rows.Count <> 0 Then
        Entrar = True
        MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
        Login.Hide()
 
        If Comprobar(TxtUsuario) = True Then
                MDIMenu_admin_.Show()
            Else
                MDIMenu_Usuariocomun_.Show()
            End If
 
    Else
            Entrar = False
        MsgBox("Usuario/Contraseña Incorrectos", MsgBoxStyle.Critical, "Advertencia")
    End If
 
    Return Entrar
End Function

y para cargar el datagrid en el perfil de usuario esta asi

1
2
3
4
5
6
7
8
Public Class Perfildeusuario
Private Cperfil As New CLogin
 
Private Sub Perfildeusuario_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    Cperfil.cargardatos(DataGridView1)
 
End Sub

se supone que al abrir el perfil de usuario debe cargar el datagrid y por eso llame la clase en el load del form

pero aun no logra cargar nada

#Un detalle, cuando pasa el formulario de login se ejecuta el MessageBox.show, pero este solo muestra un numero 1 imagino que quiere decir que en la bd esta 1 fila con ese dato que se esta ingresando

aca dejare unas imagenes de como esta

este es el login:
log

despues de darle "aceptar" me sale el messagebox.show
msg
pero al abrir el formulario del perfil no aparece nada en el datagrid
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 26/04/2020 10:54:14
Bien. Entonces, obtienes un registro con la consulta. Puedes eliminar mi MessageBox. Y tienes tu MessageBox con “Aceptado”.

El problema que todavía existe es el DataGridView.

Algunos detalles …

Public Function Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String)
No es una declaración completa. Tienes que escribir :
Public Function Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String) As Boolean

Pero, no veo que lo utilizas como funcion, pero veo que lo utilizas como procedimiento :
Clogin.Entrar(TxtUsuario.Text, TxtContraseña.Text)
En este caso, no necesario de escribir una función, un procedimiento es bien :
Public Sub Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String)

Sobre el DataGridView :
Tienes que escribir
1
2
3
Public Sub cargardatos(ByRef DGV_O_Otra_Cosa_Pero_No_DataGridView1 As DataGridView)
        DGV_O_Otra_Cosa_Pero_No_DataGridView1.DataSource = Perfl
End Sub
No tienes que utilizar el nombre del objecto como nombre de parámetro, este puede dar errores más tarde.
No est bien la escritura cargardatos(ByRef DataGridView1 As DataGridView).

Para mas testar, propongo que llamas NombreDelFormQueLoContiene.cargardatos(NombreDelFormQueLoContiene.DataGridView1) adonde escibes la MessageBox “Aceptado” :
1
2
3
4
5
6
7
8
9
‘ … … …
        If Tabla.Rows.Count <> 0 Then
            Entrar = True   ' No necesario si procedimiento
            MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
 
            NombreDelFormQueLoContiene.cargardatos(NombreDelFormQueLoContiene.DataGridView1)
 
            Login.Hide()
 ‘ … … …

Debo partir y vendré a la 1h p.m.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 26/04/2020 16:29:03
Hola,

Disculpa, cuando digo “… vendré a la 1h15 p.m.”, este no tiene mucha significación si no sabes que hablo de MI hora local (en Bélgica).
Ahora, aquí, este es casi la 4h45 a.m. y a Caracas, este es 6 horas más temprano, yo pensó. Este es la 10h45 a.m.

Soy presente ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 27/04/2020 02:13:40
tranquilo amigo, cuando tengas tiempo puedes responderme, pero tengo una duda para testar la carga de datos, y es que el lugar donde me pides este codigo:

1
2
3
4
5
6
7
If Tabla.Rows.Count <> 0 Then
    Entrar = True   ' No necesario si procedimiento
    MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
 
    NombreDelFormQueLoContiene.cargardatos(NombreDelFormQueLoContiene.DataGridView1)
 
    Login.Hide()

es en una clase por lo que tendria que declarar el parametro para el datagrid en la funcion buscar, y para llamar esa funcion al formulario tengo que establecer un objeto al parametro datagrid, y a que de lo contrario me saldra un error que dira que no se especifico ningun argumento para el parametro datagrid, y por eso tengo el datagrid aparte, porque el formulario login solo quiero que guarde los datos del nombre de usuario y esos datos mostrarlo en un datagrid que esta en otro formulario.

no servira tal vez guardar los datos de una datatable en una variable y luego estos llamarlos al datagrid? algo asi como:

1
2
3
4
Public Nombre as string
Public Apellido as string
Public Telefono as string
Public privilegio as string

y luego mostrar esos datos de esas variables en unos labes (porque mi idea principal era que mostrar la informacion en unos labels) algo asi como:

1
2
3
4
lbNombre.text= Nombre
lbApellido.text= Apellido
lbTelefono .text= Telefono
lbprivilegio .text= privilegio

pero claro eso lo debo hacer en una clase ya sea como una funcion o un procedimiento y luego llamarlo a el formulario perfil
es una idea, aunque la verdad tengo poca experiencia con la programacion y por eso hay cosas que no se como utilizar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 27/04/2020 11:19:13
Hola Richard,

No es un buena idea :

Public Nombre as string
Public Apellido as string
' ... ... ...
lbNombre.text= Nombre
lbApellido.text= Apellido
' ... ... ...


Eso que debe ser Public, este es la DataTable. Lo cargas en un funcion Buscar que vuelve True o False.
Dónde llamas Buscar, si respuesta es True, llamas Cargardatos(NombreDelObjectoQueContieneDataGrid.DataGridView1), quizá mas : NombreDelObjectoQueContieneCargardatos.Cargardatos(NombreDelObjectoQueContieneDataGrid.DataGridView1)
En el procediemento Cargardatos(DGV As DataGridView), escribes DGV.DataSource = NombredeLaDataTable, , quizá mas :
DGV.DataSource = NombreDelObjectoQueContieneLaDataTable.NombredeLaDataTable.

Sobre NombreDelObjectoQueContieneDataGrid y NombredeLaDataTable, debes saber que cuando los objectos (variables y herramientas) no estan escritas en el mismo Form, Class o Module, debes escribir el nombre del Form, Class o Module que los contiene.
Claro, estos objectos o variables que quieres llamar adondé otro Form, Class o Module beban ser declarados Public (o Friend).

Ejemplos :

En un Module llamado MiModule : Public UnaDataTabla As New DataTable
En este Module : UnaDataTabla = ...
En otro Form, Class o Module : MiModule.UnaDataTatla

En un Form llamado MiForm, he puesto un DataGridView llamado DataGridView1. Es declarado Friend por inicializacion
En este Form : DataGridView1.Itme( ... ).Value = ..., o tambien DataGridView1.DataSource =
En otro Form, Class o Module : MiForm.DataGridView.DataSource = ...

En una Classe llamada ClConnexion : Public Function Buscar( ...)
En este Classe : puedo llamar Buscar( ...) si necesario.
En otro Form, Class o Module :
Dim Conex As New ClConnexion ' Debo instanciar una Classe
' ...
Conex.Buscar( ...

Las declaraciones Public y Friend permitan de ver las variables, o objectos, function, sub, ..., de cualquiera lugar. Pero, en esto lugar, debamos escribir "la ruta" para encontrar el objecto.

No tengo una vista general de tus códigos. Es ti que debe saber dónde están los objectos.

Este es la razon que te pregunto de llamar cargardatos() en la function Buscar, pero debes escribir "la ruta" de la función y también " la ruta" del DataGrigView1. Pero, en cargardatos, tiene que la DataTable es conocida. Si existe dificultad a eso momento, puedes afectar directamente le DataGrigView con el DataTable que vienes de llenar en este funcion :

1
2
3
4
5
6
7
' ... ... ...
           MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
 
           NombreDelFormQueLoContiene.cargardatos(NombreDelFormQueLoContiene.DataGridView1)
' o
           NombreDelFormQueLoContiene.DataGridView1.DataSource = LaDataTableQueVienesDeLlenarAqui
' ... ... ...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 28/04/2020 08:57:07
Entiendo un poco lo que me quieres explicar, te refieres a esto

1
2
3
4
5
Public Sub cargardatos(ByRef DataGridView1 As DataGridView)
 
    DataGridView1.DataSource = Perfl
 
End Sub

aca la clase en la que se encuentra el la funcion y la llamo al formulario como Clogin porque es el nombre de la clase y cargardatos para referirme a la funcion y el datagridview1 seria el nombre del objeto entonces seria como Clogin.cargardatos(datagridview1)

pero igual no funciona :c si quieres te podria enviar mi programa para que lo veas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 28/04/2020 09:49:22
Si, envias.
Tambien envias el esquema de la tabla utilisada en la DB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 28/04/2020 10:26:46
1
2
3
4
5
Public Sub cargardatos(ByRef DataGridView1 As DataGridView)
 
    DataGridView1.DataSource = Perfl
 
End Sub
Por favor, tienes que pensar a mis comentarios que dicen las informaciones de base. Debes reemplazar este código por :
1
2
3
4
5
Public Sub cargardatos(ByRef DGV As DataGridView)
 
    DGV.DataSource = Perfl
 
End Sub

Este debe funcionar si Perfl es conocido aqui y en la funcion Buscar Y SI esta funcion cargardatos es escrita en el mismo Form que el DataGridView1.

Si funcion cargardatos es escrita en CLogin, y buscar es escrito en otro lugar, debes escribir CLogin.cargardatos(DataGridView1), y que DataGridView1 es puesto en mismo Form que Buscar, ...

El mas fácil, respuestas a mis 3 preguntas :

Como se llama el Form que contiene DataGridView1 ?
Como se llama el Classe o Form o Module que contiene la función Buscar ?
Como se llama el Classe o Form o Module que contiene el procedimiento cargardatos ?

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 29/04/2020 05:20:24
asi es como deberia estar funcionando esa parte para cargar el datagrid

explicacion

El form que contiene el datagrid es el de perfil de usuario

ylas funciones Buscar y Cargar datos estan en una misma Classe, solo que se llaman para formularios distintos
la funcion de buscar se llama al Form Login para hacer la busqueda
y la funcion Cargar datos se llama a Form Perfil de usuario para mostrar los datos de la busqueda

para llamarla al Form Login uso el sig codigo que es
1
Clogin[/b
](esta seria el nombre de la Clase)
1
.Buscar
(esta seria el nombre de la funcion)
1
.([b]Txtnombredeusuario.text)
(este seria el nombre del objeto al cual estoy declarando como parametro en la funcion Buscar)

quedaria asi
1
Clogin.Buscar(Txtnombredeusuario.text)
para el Form de login

y en el Form perfil de usuario seria
1
Clogin.Cargardatos(Datagridview1)

por lo que no puedo llamar el datagridview al Formulario de login o a la funcion de Buscar ya que no se encuentra en ninguna de las 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 29/04/2020 09:13:10
Hola,

Si me recuerdo bien, cuando llamas Buscar, verificas que el resultado es bien (True) ante de llamar CargarDatos. Si no es el caso, borras el If ... Then ...

Comprendo que CLogin, contiene Buscar y Cargardatos y que el DataGirdView es en Form Perfil, también que el DataTable es conocido en CLogin y en Perfil. Pero tengo doute sobre este detalle.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 ' ************** En Form Login, tienes :
 Dim CLog As New Clogin
 
' !!! Si Buscar no da resultado
Clog.Buscar( Txtnombredeusuario.text )   ' Llenar el DataTable
Clog.CargarDatos(Perfil.DataGridView1)  ' Pedir de mostrar el DataTable en el DataGridView
 
 ' !!! Si Buscar da resultado True o False
 If Clog.Buscar( Txtnombredeusuario.text ) Then
    Clog.CargarDatos(Perfil.DataGridView1)
 Else
   MessageBox.Show ("No encontrado usario")
 End If
 
' Y supongo que escribes entonces :
 Perfil.Show
' ... ... ...
 
 
 ' ************** En Classe CLogin, tienes :
' ... ... ...
Public CargarDatos( ByRef DGV As DataGridView)
   DGV.DataSource = NombreDelDataTabla
End Sub
' ... ... ...

Si no funciona, envias tu codigo. No es necesario la DB porque sabemos que el usuario es encontrado y que el DataTable es llenado. Deberé solamente ajustar las comunicaciones entre Login, CLogin y Perfil.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 29/04/2020 11:14:03
Bueno amigo, uff esta llevando algo de trabajo hacer esta cosa del perfil pero bueno escribi el codigo que me mando en la parte de el login pero aun no a querido mostrar ningun dato,

Este es el codigo que uso en la Classe login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Public Class CLogin
    Public Tabla As New Data.DataTable
    Public Perfl As New Data.DataTable
 
 
    Public Function Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String)
 
        Tabla.Rows.Clear()
        MConexion.comandosSQL = "SELECT Nombre_de_usuario, Clave FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "' AND Clave='" & TxtContraseña & "'"
        MConexion.Abrirconexion()
        Tabla.Load(MConexion.comandoRUN.ExecuteReader)
        MConexion.Cerrarconexion()
        'si los datos en las columnas son correctos (mayor o menor a 0) entonces
        If Tabla.Rows.Count <> 0 Then
            Entrar = True
            MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
 
            Login.Hide()
 
                If Comprobar(TxtUsuario) = True Then
                    MDIMenu_admin_.Show()
                Else
                    MDIMenu_Usuariocomun_.Show()
                End If
 
            Else
                Entrar = False
            MsgBox("Usuario/Contraseña Incorrectos", MsgBoxStyle.Critical, "Advertencia")
        End If
 
        Return Entrar
    End Function
 
 
    Public Function Comprobar(ByVal TxtUsuario As String) As Boolean
        Comprobar = False
        Tabla.Clear()
        MConexion.comandosSQL = "Select Privilegio FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
        MConexion.Abrirconexion()
        Tabla.Load(MConexion.comandoRUN.ExecuteReader)
        'Buscar en la columna Privilegios el campo administrador
        If Tabla.Rows(0).Item("Privilegio").ToString = "Administrador" Then
            Comprobar = True
 
        Else
 
            Comprobar = False
 
        End If
 
    End Function
 
    Public Function buscar(ByVal TxtUsuario As String)
 
 
        MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
        MConexion.Abrirconexion()
        Perfl.Load(MConexion.comandoRUN.ExecuteReader)
        MConexion.Cerrarconexion()
 
 
 
        If Perfl.Rows.Count <> 0 Then
            Return True
        Else
            Return False
        End If
 
    End Function
 
    Public Sub cargardatos(ByVal DGV As DataGridView)
 
        DGV.DataSource = Perfl
 
    End Sub
 
End Class

Este es el codigo en el Form Login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Class Login
    Private Clogin As New CLogin
    Public tabladedatos As New DataTable
 
    Private Sub ButtEntrar_Click(sender As Object, e As EventArgs) Handles ButtEntrar.Click
 
        If TxtUsuario.Text <> "" And TxtContraseña.Text <> "" Then
            If Clogin.buscar(TxtUsuario.Text) = True Then
                Clogin.cargardatos(Perfildeusuario.DataGridView1)
 
                Clogin.Entrar(TxtUsuario.Text, TxtContraseña.Text)
 
            Else
                MessageBox.Show("No encontrado usario")
            End If
 
        Else
 
 
                MsgBox("Disculpe debe rellenar todos los campos ", MsgBoxStyle.Information, "Mensaje del Sistema")
 
        End If
 
    End Sub
 
    Private Sub ButtSalir_Click(sender As Object, e As EventArgs) Handles ButtSalir.Click
        Dim R = MsgBox("¿Seguro desea salir?", MsgBoxStyle.Information + vbYesNo, "Mensaje del sistema")
        If R = vbYes Then
            Close()
        Else
            MsgBox("Proceso anulado", MsgBoxStyle.Information, "Mensaje del sistema")
        End If
    End Sub
 
 
 
End Class

Y este es el codigo del Form Perfil de usuario

1
2
3
4
5
6
7
8
9
10
Public Class Perfildeusuario
    Private Cperfil As New CLogin
 
    Private Sub Perfildeusuario_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Cperfil.cargardatos(DataGridView1)
 
    End Sub
 
End Class

#Cabe mencionar que una vez que pasa el Login, entra en el menu llamado MDIMenu(admin) o (usuario comun) dependiendo el caso del privilegio en la BD. Luego en ese Menu esta la opcion para abrir el Form de Perfil de usuario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 29/04/2020 14:42:57
Hola,

Miras este vidéo : https://www.dropbox.com/s/xmzjh1mq6myxpbg/Richard.mp4?dl=0

Te adjunto el proyecto que contiene tus códigos un poco corregidos, estos de la vidéo.

El problema de mostrar los datos en el DVG es solucionado.

Pienso que debes verificar tu algorítmica porque Entrar, Comprobar y Buscar ejecutan casi la misma consulta....
También, pienso que todos los códigos de la Classe CLogin puedan ser escritos en le Form Login porque estos códigos hacen ningún otra cosa.

Espero que este te ayudara ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 30/04/2020 05:19:53
Buenas amigo, sabe que intente implementar el codigo y el programa que me paso para testa con el mio, y en el login, al darle al boton le pongo perfildeusuario.show osea para que cargue el formulario de perfil sin pasar por el menu, si carga la datagrid

1
2
3
4
5
6
7
8
9
If TxtUsuario.Text <> "" And TxtContraseña.Text <> "" Then
    If Clogin.buscar(TxtUsuario.Text) = True Then
        Clogin.cargardatos(Perfildeusuario.DataGridView1)
 
        Perfildeusuario.Show()
 
    Else
        MessageBox.Show("No encontrado usario")
    End If

Pero si lo pongo de esta manera:

1
2
3
4
5
6
7
8
9
If TxtUsuario.Text <> "" And TxtContraseña.Text <> "" Then
    If Clogin.buscar(TxtUsuario.Text) = True Then
        Clogin.cargardatos(Perfildeusuario.DataGridView1)
 
        Clogin.Entrar(TxtUsuario.Text, TxtContraseña.Text)
 
    Else
        MessageBox.Show("No encontrado usario")
    End If

no me carga el datagrid, sabe que despues de pasar el login viene el menu mdi, y dps de este menu se abre el perfil de usuario y esta es la forma en la que debe funcionar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 30/04/2020 08:26:41
Hola Richard,

Es suficiente que desplazas la linea Perfildeusuario.Show() en el procedimiento evento que se ejecuta cuando este es seleccionada en el menu MDI.

El DataGridView1 de Perfildeusuario es cargar de todas maneras y después, muestras este Form de donde te gusta.

No he testado con Form MDI, tambine, dices me tus comentarios.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 02/05/2020 06:57:38
Buenas amigo no le habia respondido porque estaba realizando algunos trabajos en la pc pero ya volvi, y descubri el problema que tengo con la carga de datos en formulario de perfildeusuario, lo que pasa es que si lo abro desde el MDI que estoy usando como menu principal como que interfiere con los datos que debe mostrar en la Datagrid de el form perfildeusuario, estuve testando con otro mdi en blanco y si cargo los datos correctamente al abrir el form, pero desde el MDI que tengo no, mi MDI principal contiene 1 panel y 1 menustrip, para abrir los formularios utilizo el siguente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Public Class MDIMenu_admin_
 
 
    Private Shared Sub SendMessage(ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer)
    End Sub
    Private Sub BusquedaDeArticulosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BusquedaDeArticulosToolStripMenuItem.Click
        AbrirFormularios(New Busquedadeinventario)
    End Sub
 
    Private Sub ConfiguracionDeInventarioToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ConfiguracionDeInventarioToolStripMenuItem.Click
        AbrirFormularios(New GestiondeInventario)
    End Sub
 
    Private Sub CuentasDeUsuariosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CuentasDeUsuariosToolStripMenuItem.Click
        AbrirFormularios(New GestiondeUsuario)
    End Sub
 
    Private Sub SalirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalirToolStripMenuItem.Click
        Dim R = MsgBox("¿Seguro desea salir?", MsgBoxStyle.Information + vbYesNo, "Mensaje del sistema")
        If R = vbYes Then
            Close()
        Else
            MsgBox("Proceso anulado", MsgBoxStyle.Information, "Mensaje del sistema")
        End If
    End Sub
 
    Private Sub RegistroDeArticulosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RegistroDeArticulosToolStripMenuItem.Click
        AbrirFormularios(New RegistrodeProductos)
 
    End Sub
 
    Private Sub ReporteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ReporteToolStripMenuItem.Click
        AbrirFormularios(New ReportInventario)
    End Sub
 
    Private Sub AbrirFormularios(ByVal formhijo As Object)
 
 
        Dim fh As Form = TryCast(formhijo, Form)
        fh.TopLevel = False
 
        fh.Dock = DockStyle.Fill
        Me.PanelFormularios.Controls.Add(fh)
        Me.PanelFormularios.Tag = fh
        fh.Show()
    End Sub
 
    Private Sub GestionDeEmpleadosToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GestionDeEmpleadosToolStripMenuItem.Click
        AbrirFormularios(New CGestiondeempleados)
    End Sub
 
    Private Sub GestionDeUsuarioToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GestionDeUsuarioToolStripMenuItem.Click
        AbrirFormularios(New Perfildeusuario)
 
    End Sub
End Class

no se que puede tener este codigo que interfiera con el perfil de usuario

Los ajustes que use en la classe Clogin fueron estos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Public Class CLogin
    Public Tabla As New Data.DataTable
    Public Perfl As New Data.DataTable
 
 
    Public Function Entrar(ByVal TxtUsuario As String, ByVal TxtContraseña As String) As Boolean
 
        ' Tabla.Rows.Clear()
        ' MConexion.comandosSQL = "SELECT Nombre_de_usuario, Clave FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "' AND Clave='" & TxtContraseña & "'"
        'MConexion.Abrirconexion()
        'Tabla.Load(MConexion.comandoRUN.ExecuteReader)
        'MConexion.Cerrarconexion()
        'si los datos en las columnas son correctos (mayor o menor a 0) entonces
        'If Tabla.Rows.Count <> 0 Then
        ' Entrar = True
        'MsgBox("Aceptado", MsgBoxStyle.Information, "Acceso Permitido")
 
        Login.Hide()
 
        '    If Comprobar(TxtUsuario) = True Then
        MDIParent1.Show()
        'MDIMenu_admin_.Show()
        'Else
        'MDIMenu_Usuariocomun_.Show()
        'End If
 
        'Else
        'Entrar = False
        'MsgBox("Usuario/Contraseña Incorrectos", MsgBoxStyle.Critical, "Advertencia")
        'End If
 
        'Return Entrar
 
        Return True
 
    End Function
 
 
    Public Function Comprobar(ByVal TxtUsuario As String) As Boolean
        'Comprobar = False
        'Tabla.Clear()
        'MConexion.comandosSQL = "Select Privilegio FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
        'MConexion.Abrirconexion()
        'Tabla.Load(MConexion.comandoRUN.ExecuteReader)
        'Buscar en la columna Privilegios el campo administrador
        'If Tabla.Rows(0).Item("Privilegio").ToString = "Administrador" Then
        'Comprobar = True
 
        'Else
 
        'Comprobar = False
 
        'End If
        Return True
 
    End Function
 
    Public Function buscar(ByVal TxtUsuario As String)
 
 
        MConexion.comandosSQL = "SELECT * FROM Usuario WHERE Nombre_de_usuario='" & TxtUsuario & "'"
        MConexion.Abrirconexion()
        Perfl.Load(MConexion.comandoRUN.ExecuteReader)
        MConexion.Cerrarconexion()
 
 
 
        If Perfl.Rows.Count <> 0 Then
            Return True
        Else
            Return False
        End If
 
    End Function
 
    Public Sub cargardatos(ByRef DGV As DataGridView)
 
        DGV.DataSource = Perfl
 
    End Sub
 
End Class

y los que use en el MDI que cree para testar fue este:

1
2
3
4
5
Public Class MDIParent1
    Private Sub PerfilToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PerfilToolStripMenuItem.Click
        Perfildeusuario.Show()
    End Sub
End Class

pero este no contiene ningun panel, no se si el codigo que tengo para abrir los form en el panel sea el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 02/05/2020 09:34:01
Hola,

Primero, pienso que no debes escribir MDIParent1.Show en funcion Entrar(...) porque el MDI es el parent de todos otros y es siempre visible.
Segundo, pienso que no recibes el resultado porque escribes AbrirFormularios(New Perfildeusuario). Este hace a nueva instancia que contiene ningúna valor de tu programa.
Si escribes :
1
2
Dim F As New Form
F = Perfildeusuario
este significa que F recibe la Ref de Perfildeusuario del proyecto, no un nuevo Form. Este es mucho diferente.

En el proyecto que he te enviado, en el MDIParent.vb, puedes reemplazar todo el código por esta :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Imports System.Windows.Forms
 
Public Class MDIParent
 
    Private Sub InformacionesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InformacionesToolStripMenuItem.Click
        Dim ChildForm As New System.Windows.Forms.Form
        ChildForm = Perfildeusuario
 
        AbrirFormularios(ChildForm)  ' o directamente : 'Perfildeusuario)
        'ChildForm.MdiParent = Me
        'ChildForm.Show()
    End Sub
 
    Private Sub LoginToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoginToolStripMenuItem.Click
        'Dim ChildForm As New System.Windows.Forms.Form
        'ChildForm = Login
        'ChildForm.MdiParent = Me
        'ChildForm.Show()
 
        ' esta tambien funciona, porque designamos siempre el formulario que existe en le proyecto, no un nuevo:
        Login.MdiParent = Me
        Login.Show()
 
    End Sub
 
 
    Private Sub AbrirFormularios(ByRefl formhijo As Form)
 
        '*** Dim fh As Form = TryCast(formhijo, Form) ' no necesario cuando el parámetro es bien escrito : No utilizar Object !!!
 
        formhijo.TopLevel = False
 
        formhijo.Dock = DockStyle.Fill
        Me.PanelFormularios.Controls.Add(formhijo)
        Me.PanelFormularios.Tag = formhijo
        formhijo.Show()
 
 
    End Sub
 
End Class

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 38
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Richard (15 intervenciones) el 02/05/2020 11:05:04
Listo amigo era eso, el problema estaba en el código para abrir los formularios en el panel, corregi los cambios en la funcion de abrir formularios y para abrir los form lo puse asi:

1
AbrirFormularios(ChildForm)

muchas gracias amigo, y disculpa los tantos testes que tuvo que hacer, aparte de mis errores pero aun hay cosas que debo aprender para saber como y cual es su funcion. Muchas gracias por su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar datos entre tablas de base de datos

Publicado por Phil Rob (1554 intervenciones) el 02/05/2020 12:15:00
Felicitaciones ...

No olvidas de también corregir Private Sub AbrirFormularios(ByRef formhijo As Form). En este caso, ByRef y Form al lugar de Object mejora las performances.

Hasta la próxima
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar