Visual Basic.NET - Dudas y más dudas

 
Vista:
sin imagen de perfil

Dudas y más dudas

Publicado por Jorge Luis (3 intervenciones) el 21/06/2022 21:08:58
Estimados amigos, ya he formulado mi consulta en varios foros pero las respuestas que recibí no me dieron resultado.
El tema es el siguiente:

En una base de datos tengo dos tablas, tbl Empresas (idCli; nombre; etc.) y la otra tblFacturas (idFac; idCli; Monto; etc).
En un formulario tengo un combobox que debo enlazar con la tabla tblEmpresas para que me muestre la lista de Empresas de mi base y un Datagridview.

La idea es que al seleccionar una de las empresas del cbEmpresas, en el DGV se listen las facturas correspondientes a la empresa seleccionada provenientes de la tblFacturas y tener la posibilidad de imprimir un reporte con el nombre de la empresa como título y todas las facturas que corresponden a esta empresa.

Espero haber sido claro y, de no ser así, por favor díganmelo.

No soy muy ducho en programación y no me resulta fácil.

Desde ya muchas gracias.
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

Dudas y más dudas

Publicado por Phil Rob (1318 intervenciones) el 22/06/2022 08:23:49
Hola,

Con primera idea, te propongo de escribir 2 consultas.
Una consulta que llena el ComboBox con IdCli y NombreCli, y una consulta que llena el DataGridView con las facturas del client eligido en el ComboBox.
Esta manera llena el ComboBox con todos clientes y rehace la consulta de las facturas por cada cambia del ComboBox.

Con segunda idea, te propongo de escribir 1 consulta JOIN.
Esta consulta llena el ComboBox con IdCli y NombreCli y el DataGridView con las facturas del client eligido en el ComboBox.
Esta manera llena el ComboBox con solamente los clientes que tienen facturas. No necesario otra consulta.

Ejemplo de códigos, quasi bien, para el primera manera.
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
' MiDatos es un DataSet
' ...
        Consulta = "SELECT IdCli, NombreCli FROM tblEmpresas"
 
        Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(Consulta, MiConexion)
 
        MiAdapter.Fill(UnaTabla)
        UnaTabla.TableName = "Empresas"
        MisDatos.Tables.Add(UnaTabla)
 
' ...
       CbEmpresas.DataSource =  MisDatos.Tables.("Empresas")
       CbEmpresas.DisplayMember = "NombreCli"
       CbEmpresas.ValueMember = "IdCli"
' ...
 
' ...
 
    Private Sub CbEmpresas_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CbEmpresas.SelectedIndexChanged
 
' ...
Dim IdClienteBuscado As integer
        Try    ' Try porqué no es disponible el CbEmpresas.SelectedValue durante se carga la aplicacion
            IdClienteBuscado = CbEmpresas.SelectedValue
 
        Consulta = "SELECT * FROM tblFacturas WHERE IdCli = " &  IdClienteBuscado
 
        Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(Consulta, MiConexion)
 
        MiAdapter.Fill(UnaTabla)
        UnaTabla.TableName = "FacturasDeEsteCliente"
        MisDatos.Tables.Add(UnaTabla)
 
' ...
       DGVFacturasDelCliente =  MisDatos.Tables.("FacturasDeEsteCliente")
 
' ...
 
        Catch
 
        End Try
    End Sub


Ejemplo de códigos, quasi bien, para el segunda manera.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' MiDatos es un DataSet
' ...
 
Consulta = "SELECT  tblEmpresas.IdCli, NombreCli, tblFacturas.IdCli, Monto, ... " & _
                   "FROM  tblFacturas INNER JOIN  tblEmpresas ON  tblEmpresas.IdCli = tblFacturas.IdCli"
 
        Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(Consulta, MiConexion)
 
        MiAdapter.Fill(UnaTabla)
        UnaTabla.TableName = "EmpresasConSusFacturas"
        MisDatos.Tables.Add(UnaTabla)
 
' ...
       CbEmpresas.DataSource =  MisDatos.Tables.("EmpresasConSusFacturas")
       CbEmpresas.DisplayMember = "NombreCli"
 
       DGVFacturasDelCliente =  MisDatos.Tables.("FacturasDeEsteCliente")  ' El DGV siempre es synchro con el ComboBox
' ...
 
' ...

Quiza que estos ejemplos de códigos están defectuoso, no los probados exactamente.

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
0
Comentar
sin imagen de perfil

Dudas y más dudas

Publicado por Jorge Luis (3 intervenciones) el 22/06/2022 16:15:33
Estimado amigo:
Te transcribo como quedó mi programa.
Disculpa mi ignorancia pero no entendí lo de "UnaTabla". No se que debo ingresar allí.
Fijate en mi texto y dime, por favor si es correcto o si hay algún error.
Gracias.
*********************************************************************************************************
Option Explicit On
Imports System.Data
Imports System.Data.OleDb
Public Class frmListado
Private Sub Listados_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim SQL As String = "select * from tblClientes order by Empresa"
Dim DA As New OleDb.OleDbDataAdapter(SQL, cnn)
Dim DS As New DataSet

cnn.Open()
DA.Fill(DS, "EMPRE")
cnn.Close()

cbEmpresa.DataSource = DS.Tables("EMPRE")
cbEmpresa.DisplayMember = "Empresa"
cbEmpresa.ValueMember = "idCli"

End Sub
Private Sub cbEmpresa_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEmpresa.SelectedIndexChanged
Dim idCliBus As Integer
Try
idCliBus = cbEmpresa.SelectedValue
Dim Consulta As String = "Select * From tblFacturas where idCli=" & idCliBus
Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(Consulta, cnn)
Dim MiDato As New DataSet
MiAdapter.Fill(UnaTabla)
UnaTabla.TableName = "FacturasDeEsteCliente"
MiDato.Tables.Add(UnaTabla)
dgwListado = MiDato.Tables.("FacturasDeEsteCliente")
Catch ex As Exception

End Try

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
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

Dudas y más dudas

Publicado por Phil Rob (1318 intervenciones) el 22/06/2022 17:21:04
Hola,

UnaTabla es una DataTable.
Atención de no mezclar : en tu mensaje anterior, hablas de tblEmpresa y ahora, utilizas tblClientes.
No sé que es la buena version ...

Hago 1 comentario importante.

El DataSet MisDatos debe existir para todo el Form y cada consulta llena una DataTable que es añadida en el DataSet. El DataTabla llenada tiene un nombre que permita de la llamar en otro procedimiento.

Comentario segundario : Con el DataAdpater, no necesario de hacer cnn.Open y cnn.Close. OleDbDataAdapter hace todo.

Mira como organizar los objetos para trabajar con la base de datos :
https://www.dropbox.com/s/puc2jbj5vmzz4uo/TestAccesDBSimpleConMostrar.zip?dl=0
Puedes ejecutar este aplicación cuando cambias la cadena de connexion según tu PC.

En este aplicación existe una sola tabla en la DB y la consulta es simple. La lectura es hecha con el DataReader y con el DataAdapter para comparación. Pero este ejemplo muestra como declarar bien las variables y como añadir una nueava DataTabla a el DataSet "general".

Cuando envias me tu DB, puedo adpatar este ejemplo a tus datos.

Espero que digo bien ...
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

Dudas y más dudas

Publicado por Jorge Luis (3 intervenciones) el 22/06/2022 22:37:31
Estimado Phil:
Te envío mi DB para que la puedas utilizar en el ejemplo.
Cómo habrás podido ver, mis conocimientos acerca de Visual Studio no son muy amplios.
Es por esto que pregunto varias veces lo mismo.
Una vez más gracias,
Jorge

***********************************************************************************************************************
Option Explicit On
Imports System.Data
Imports System.Data.OleDb

Public Class frmListado

Dim Consulta As String = "SELECT IdCli, Empresa FROM tblClientes"
Dim MiAdapter As New OleDbDataAdapter=New oledbdataadapter(consulta, cnn)
Dim MiDato As New DataSet
Dim UnaTabla As New DataTable

MiAdapter.Fill(UnaTabla)
UnaTabla.TableName="Empresas"
MiDato.Tables.Add(UnaTabla)

CbEmpresas.DataSource = MisDatos.Tables.("Empresas")
CbEmpresas.DisplayMember = "Empresas"
CbEmpresas.ValueMember = "IdCli"

Private Sub cbEmpresa_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEmpresa.SelectedIndexChanged
Dim idCliBus As Integer
Try
idCliBus = cbEmpresa.SelectedValue
Dim Consulta As String = "Select * From tblFacturas where idCli=" & idCliBus
Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(Consulta, cnn)

MiAdapter.Fill(UnaTabla)
UnaTabla.TableName = "FacturasDeEsteCliente"
MiDato.Tables.Add(UnaTabla)
dgwListado = MiDato.Tables.("FacturasDeEsteCliente")
Catch ex As Exception
MsgBox(ex.Message)
End Try

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
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

Dudas y más dudas

Publicado por Phil Rob (1318 intervenciones) el 22/06/2022 23:15:36
Veo tu mensaje con mi smartphone.
Lo miraré mañana ... (aquí es la 23h pm).
Buenas noches
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

Dudas y más dudas

Publicado por Phil Rob (1318 intervenciones) el 23/06/2022 12:39:06
Hola,

He hecho 2 ejemplos.
Para saber como cambiar la ConnectionString, mira el video : https://www.dropbox.com/s/xe7u0rjg8snezoo/Jorgeluis.mp4?dl=0

El primero ejemplo muestra como unir las herramientas de mostrada con el DataTable. Es el mismo ejemplo que lo de ayer pero con la utilización de tu DB.
El segundo ejemplo es la adaptación del precedente para mostrar las clientes y, por cado, sus facturas. Es el que responde a tu pregunta.

He vista tu DB y pienso que es complexa, tienes mucho trabajo si debes todo administrar con VB.Net....

Adjunto JorgeLuis.zip que contiene los 2 proyectos de pruebas.

....
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

Dudas y más dudas

Publicado por Phil Rob (1318 intervenciones) el 23/06/2022 13:36:31
Adjunto este comentario:
El algoritmo utilazadó en mis ejemplos es una manera entre otras.
No es la mejora y no es más mala, ella más fácil a leer ...
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