Visual Basic.NET - comparar tablas Access

 
Vista:
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 11/09/2020 13:04:34
Hola como estan?? espero que esten todo bien!
yo estoy aca en la lucha, soy personal de salud de argentina aficionado a la programacion. estoy haciendo un programita que me ayude con mis tareas diarias en la clinica, estoy en la parte de farmacia asi que manejo mucho stock.
bueno yendo al punto, se me ocurrio hacer una especie de "alarma" que me avise cuando debo solicitar material o cuando tengo mucho material, para esto genere un tabla en Access donde guardo un maximo y un minimo que los edito yo. tengo en una tabla de excel que se carga al programa los codigos de cada producto con el stock.
mi duda es la siguiente, como puedo relacionar el stock de esa tabla ( que es mi sistema esta en un data grid view) con los valores de los maximo y minimos.
mi idea , en mi cabeza , es que me de un listado con los que elementos que deberia solicitar o no solicitar.
pero basicamente no se como relacionarlos, se me ocurre usar un for each pero creo que tardaria mucho por que son casi 2000 items. ustedes que me recomiendan hacer??
si pueden brindarme algun ejemplo les agradezco.

muchas gracias!
les dejo una imagen de las dos tablas que necesitaria comparar
5f5a9199ec91c-ejemplo
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 11/09/2020 15:42:02
Hola,

No comprendo bien tu pregunta.

Si las tablas estan en la misma DB, porque no agregar los campos Min y Max a la tabla con el Stock_Actual ?
Este es normal para un registro de un gestion de existencia de tener los campos : IdProducto, Nombre, Cantidad_actual, Cantidad_Min, Cantidad_Max, PlazoDeReaprovisionMedio, ... ...

Pero no quiero hacer el análisis para ti.

Queria saber si la tabla de con Stock_Actual y la tabla con las cantidades Min y Max estan en la misma DB ?
Este seria bien que envias el esquemas de estas tablas.

Pienso escribir una sentencia de consulta qui daría todos los productos para los cuales : CantidadActual < CantidadMin OR CantidadActual > CantidadMax.

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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 11/09/2020 17:40:57
Hola Phil como estas?
te comento, lo tengo en distintas tablas. el motivo es porque el stock lo saco de un programa hecho para la clinica donde trabajo y desde ese lugar tomo los codigos con el stock de cada uno, lo exporto a excel y desde ahi lo cargo al sistema.
poner minimo y maximos se me ocurrio despues para que mi compañero y yo lo podamos colocar segun nos parezca la cantidad correcta, como no lo supe hacer de otra manera. lo que hice fue crear una tabla en access donde me guarde la informacion.

y en el caso que pueda lograr que esten en la misma tabla como lo deberia de hacer, tenes algun ejemplo para brindarme.

muchas gracias Phil!
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 11/09/2020 18:25:48
" ... y en el caso que pueda lograr que esten en la misma tabla como lo deberia de hacer, tenes algun ejemplo para brindarme."

Este es el ejemplo pegido :

SELECT * FROM Productos WHERE Stock_Actual < cant_Min OR Stock_Actual > cant_Max

Pero, con dos tablas, debería escribir casi la misma consulta con JOIN.

Es posible que envias una parte de cada tabla para me testar ?
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 11/09/2020 18:51:15
phil te mando las dos tablas.
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 11/09/2020 22:15:54
Hola Pablo,

Puedo leer XLS y Acces, y escribir los registros que no tienen los valores correctos en un DataGridView .

Cantidad

Adjunto el proyecto de este prueba. No olvida de cambiar las cadenas de conexión porque este es diferente en tu PC.

cadena

Claro que este seria mas fácil si la tabla Stock estaría una tabla en la DB, con la tabla tb_minmax. De otra manera, también este seria mas fácil si los campos Min y Mas estarían en la tabla en Excel. Este es difícil de trabajar con tablas que no están en el mismo sistema.

Comenta me ...

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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 11/09/2020 22:42:21
muchas gracias Phil!!

el lunes cuando regrese a mi trabajo lo pruebo y te digo como me fue!!

voy a pensar este fin de semana la manera de que este todo en una tabla

muchas gracias nuevamente!
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 15/09/2020 20:05:43
phil como estas?

ahi lo pude implementar en mi programa, me falta darle la forma para que nos sea de utilidad.

muchas gracias !!
ejemplo1
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 15/09/2020 20:51:40
Entonces, problema solucionado ?
Perfecto !

Buena continuación con tu proyecto.

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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 15/09/2020 21:05:24
en principio si Phil, ahora estoy viendo como puedo hacer para identificar con colores si es que detecto el minimo o si detecto el maximo.
y viendo como puedo ocultar la tabla de Access ya que no necesito que se visualize.,
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 15/09/2020 21:40:41
Para ocultar un DGV, es suficiente de amadir la linea .... .Hide. Y es posible en el Form de poner el DGVResultado encima el DGV de Access.

1
2
3
4
5
6
7
8
... ... ...
        odt = New DataTable
        oda.Fill(odt)
        odt.TableName = "tb_minmax"
        ods.Tables.Add(odt)
        dgvMinMax.DataSource = ods.Tables("tb_minmax")
        dgvMinMax.Hide()
... ... ...

Para otro detalles, es necesario que dices me mas. Quizá que tendré tiempo mañana para testar.

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
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 16/09/2020 18:24:16
hola Phil espero que estes bien.

tengo la siguiente duda

este seria el codigo que me has proporcionado

1
2
3
4
If Not RLeido Is Nothing Then
    If RLeido.Item("stock_actual") < R.Item("cant_min") Or RLeido.Item("stock_actual") > R.Item("cant_max") Then
        odt.Rows.Add(RLeido.Item("laboratorio_producto"), RLeido.Item("stock_actual"), R.Item("cant_min"), R.Item("cant_max"))
    End If

lo quiero separar para que en cada caso me pinte de color la fila, por ejemplo si el stock es menor que can_min pinte de rojo y de la otra forma se pinte en azul.

lo estoy haciendo asi, pero claramente esta mal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
If Not RLeido Is Nothing Then
    If RLeido.Item("stock_actual") < R.Item("cant_min") Or RLeido.Item("stock_actual") > R.Item("cant_max") Then
        odt.Rows.Add(RLeido.Item("laboratorio_producto"), RLeido.Item("nombre_medicamento"), RLeido.Item("stock_actual"), R.Item("cant_min"), R.Item("cant_max"))
    End If
 
    If RLeido.Item("stock_actual") > R.Item("cant_max") Then
 
 
        dgvresultados.RowsDefaultCellStyle.BackColor = Color.Blue
 
 
    ElseIf RLeido.Item("stock_actual") < R.Item("cant_min") Then
 
 
        dgvresultados.RowsDefaultCellStyle.BackColor = Color.DarkRed
 
    End If
 
 
    dgvresultados.DataSource = odt
End If

pero no me esta funcionando como quiero, claramente lo estoy haciendo mal.
sospecho que lo deberia hacer algo similar a esto:
1
2
3
4
5
6
7
8
9
Private Sub DVG_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DVG.CellFormatting
    If DVG.Columns(e.ColumnIndex).Name = "estado" Then
        If e.Value.ToString() = "A" Then
            DVG.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Blue
        ElseIf e.Value.ToString() = "B" Then
            DVG.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Red
        End If
    End If
End Sub

pero no logro darme cuenta de como hacerlo o capaz hay alguna manera mucho mas simple y no la veo.

agradezco tu ayuda de antemano

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
Imágen de perfil de Phil Rob
Val: 3.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 16/09/2020 18:38:12
Hola Pablo,

Durante que trabajas sobre tu proyecto, divertía me con lo ...

Veas el resultado que obtengo. Adjunto mi proyecto.

He creado un fichero StocksParaPruebas.xls y he cumplido la tabla Access porque si no existe todos productos en t_MinMax, puedo tener problemas.

Si quieres nunca mostrar los DGV MinMax y Resultados, puedo escribir un código con solamente 2 DataTable.


Pablo
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 16/09/2020 22:32:57
Phil frunciona de mil maravillas lo pude adaptar correctamente!!

estoy viendo como lo puedo filtrar, seguramente lo haga con algun radiobutton o con un check. tengo que empezar a colocar en cada item su maximo y minimo para que realmente funcione. cosa que va a llevar bastante tiempo.
pero en principio funciona muy bien!!
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 16/09/2020 23:22:15
Felicitaciones !!!

Como lo he hecho, adjunto mi version con solamente 1 DGV.
Este version es en Form2 y el proyecto comienza con Form2 (ajustado en las propiedades de proyecto).

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
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 17/09/2020 18:28:21
buenas tardes Phil!

me quedo muy parecido al tuyo!!

ahora estoy indagando como puedo hacer para poner filtros, no se si tocando un boton o un check o algo asi.
para que solo muestre los minimos o lo maximos o todo juntos.

que opinas sirve esa idea??
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 17/09/2020 18:52:19
escribi otra cosa mas pero no salio

cuando toco el nombre de las columnas, que hace que se ordene de A a Z o de mayor a menor, se borra el color del cual esta pintado dependiendo su condicion.

no se que puede provocar esto, vos sabes?
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 17/09/2020 22:00:44
Hola Pablo,

Los colores cambian. Este es según el evento que utilizas para escribir mis códigos.
En mi ejemplo, he puesto los codigos en el evento Load del Form. El DGV es coloreido a este momento. Cuando ordeno el DGV por un Header, el DGV es "Refresh" por el sistema sin pasar para Form_Load, el DGV es hecho con sus colores por defecto.

Pregunta como seleccionar el filtro. Cuando tendras tu método, tendras que mandar la nueva visualizacion del DGV. A este momento, tendras que rehacer los colores.

Para los fltros, peudes utilizar RadioButton o ComboBox o un solo Button que pasa de un filtro a otro para cada Click.
RadioButton o ComboBox : 1 solo valor a un momento.
Button solo : 1 solo valor a un momento pero utiliza menos espacio (mañana, escribiré un prueba con el proyecto con 1 DGV).

...
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 17/09/2020 22:06:00
Hola Phil, yo lo puse como que me abra un form nuevo y me cargue todo, basicamente seria un form load.
entonces hay manera de cuando se toca un header no haga nada?? o lo correcto seria que crear un evento para cuando se toca el header se ordene pero no pierda la coloracion de cada fila? se puede hacer eso?
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 17/09/2020 22:46:26
Para no ordenar con Header :

1
2
3
For C As Integer = 0 To dgvStock.Columns.Count - 1
     dgvStock.Columns(C).SortMode = DataGridViewColumnSortMode.NotSortable
Next C

Este sera todavía posible de ordenar el DGV con el codigo.

Cuidado, si utilizas filtros, a cada vez sera necesario de rehacer los colores.
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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 17/09/2020 23:09:01
Hice asi y me funciona Phil

que opinas??
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Public Class controldestock
    Dim cnnXLS As OleDbConnection
    Dim cnnMDB As OleDbConnection
    Dim oda As OleDbDataAdapter
    Dim odt As DataTable
    Dim ods As New DataSet
    Dim consulta As String
 
 
    Dim connectionStringExcel As String = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & Form1.TXTORIGEN_S.Text & ";Extended Properties='Excel 8.0;'"
    Dim connectionStringAccess As String = CADENA
    Public Sub controldestock_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Ordenar()
    End Sub
 
    Public Sub Ordenar()
        cnnXLS = New OleDbConnection(connectionStringExcel)
        consulta = "select LABORATORIO_PRODUCTO,STOCK_ACTUAL,NOMBRE_MEDICAMENTO from [stock$] "
        oda = New OleDbDataAdapter(consulta, cnnXLS)
 
        odt = New DataTable
        oda.Fill(odt)
        odt.TableName = "stock"
        ods.Tables.Add(odt)
 
        dgvstock.DataSource = ods.Tables("stock")
        FORMATOSTOCK()
 
 
        cnnMDB = New OleDbConnection(connectionStringAccess)
        consulta = "select * from tb_minmax"
        oda = New OleDbDataAdapter(consulta, cnnMDB)
 
        odt = New DataTable
        oda.Fill(odt)
        odt.TableName = "tb_minmax"
        ods.Tables.Add(odt)
        dgvminmax.DataSource = ods.Tables("tb_minmax")
 
        comparar()
 
 
 
    End Sub
    Sub comparar()
        Dim IdProducto As Integer
        odt = New DataTable()
 
        'Add 5 columnas para laboratorio_producto, item, stock_actual, cant_min y cant_max
        odt.Columns.Add("Codigo")
        odt.Columns.Add("Item")
        odt.Columns.Add("Stock")
        odt.Columns.Add("Min")
        odt.Columns.Add("Max")
        '*************************** next
 
 
 
 
        For Each R As DataRow In ods.Tables("tb_minmax").Rows
            IdProducto = R.Item("cod_gen")
            Dim RLeido As DataRow
            RLeido = ods.Tables("stock").Select("laboratorio_producto = '" & IdProducto & "'")(0)
            If Not RLeido Is Nothing Then
                If RLeido.Item("stock_actual") < R.Item("cant_min") Or RLeido.Item("stock_actual") > R.Item("cant_max") Then
                    odt.Rows.Add(RLeido.Item("laboratorio_producto"), RLeido.Item("nombre_medicamento"), RLeido.Item("stock_actual"), R.Item("cant_min"), R.Item("cant_max"))
                End If
                dgvresultados.DataSource = odt
                dgvresultados.Hide()
            End If
        Next
 
        dgvstock.AllowUserToAddRows = False
        dgvresultados.AllowUserToAddRows = False
        dgvresultados.Sort(dgvresultados.Columns("Codigo"), System.ComponentModel.ListSortDirection.Ascending)
        For RStock As Integer = 0 To dgvstock.Rows.Count - 1
            IdProducto = dgvstock.Item("laboratorio_producto", RStock).Value
            For RResultados As Integer = 0 To dgvresultados.Rows.Count - 1
                If dgvresultados.Item("Codigo", RResultados).Value = IdProducto Then
                    dgvstock.Rows(RStock).DefaultCellStyle.BackColor = Color.LightCoral
                    If dgvresultados.Item("Stock", RResultados).Value < dgvresultados.Item("Min", RResultados).Value Then
                        dgvstock.Rows(RStock).DefaultCellStyle.BackColor = Color.DarkRed
                        dgvstock.Rows(RStock).DefaultCellStyle.ForeColor = Color.White
 
                    Else
                        dgvstock.Rows(RStock).DefaultCellStyle.BackColor = Color.PaleGreen
                        dgvstock.Rows(RStock).DefaultCellStyle.ForeColor = Color.DimGray
                    End If
                    Exit For
                End If
            Next
        Next
    End Sub
    Sub FORMATOSTOCK()
        With dgvstock
            .Columns(0).HeaderText = "Cod Generico"
            .Columns(1).HeaderText = "Stock"
            .Columns(2).HeaderText = "Descripción"
            '.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
            .AutoResizeRows()
            .AutoResizeColumns()
            '.Columns(3).Visible = False
 
        End With
    End Sub
 
    Private Sub dgvstock_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvstock.ColumnHeaderMouseClick
        comparar()
 
    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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 17/09/2020 23:39:19
Felicitaciones!
Este es muy bien.

Este es bien que eres con mi Form1 porque existe error en mi Form2, los colores estan mal seleccionados.

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
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 17/09/2020 23:47:20
Me queda ver cómo hacer lo de los filtros, mi idea es hacer tres botones uno que diga stock critico, uno que diga sobrestock y el otro que me muestre toda la lista normal.

Tengo una idea de cómo realizarlo pero bueno me tengo que poner con eso

Buenas noches Phil y muchas gracias!
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 18/09/2020 10:06:19
Hola Pablo,

Te muestro mi solucion con uno botón porque tiene menos espacio.
Mira este vidéo : https://www.dropbox.com/s/j1czvbpvsf3fjqu/OneButton.mp4?dl=0

Pero escribo este mensaje porque veo errores en mi códigos anterior para la selección de los colores (en Form1 y en Form2).

Para testar bien, he escrito las tablas XLS et MDB completas con textos significativos. Propongo ti de utilizar las mismas tablas para tus pruebas.
Datos

Tambien he veo que una linea vacía en XLS da problemas. Este por que he cambiado la consulta sobre XLS :
1
consulta = "select * from [stock$] WHERE laboratorio_producto > 0"

Adjunto mi proyecto con las selecciones des los colores corregidas.

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
0
Comentar
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 18/09/2020 19:31:01
hola Phil, hoy me tome el dia libre estoy en mi casa estudiando que mañana rindo en la facultad. el domingo si puedo lo voy a implementar a mi proyecto.
vi el video y quedo excelente!, pero te consulto, hay manera de que quede ordenado, quiero decir, cuando haces el fitro real<min o real> max
que esten todas las lineas juntas al principio de la tabla, creo que seria una manera mas facil de visualizar todos los items con problema y no tener que revisar todo el largo de la tabla.
muchisimas gracias por tomar todo este tiempo conmigo!
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 18/09/2020 20:05:45
Hola,

Voy reflexionar a este nuevo problema ..., te comentaré ...

Entre tiempo, me he permitado de escribir un programa de ayuda para escribir los valores Min y Max en le DB Access. Lo permite de escribir los valores para uno o algunos registros. Este es útil cuando productos tienen los mismos envasados. No sé si es todavía necesario pero me he divertido.

Mira la vidéo : https://www.dropbox.com/s/ttkpha9vbw2btq9/Actualizar.mp4?dl=0

Para el caso donde este puede te servir, adjunto el proyecto. Ahora, este el Form3 que contiene los códigos. Este es un programa que puede funcionar independiente de tu proyecto.
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 19/09/2020 08:58:06
Hola,

He encontrado la solución que permite de agrupar las líneas según sus filtros, pero también permite de re-colorear cada vez que gustamos.

Mira la vidéo : https://www.dropbox.com/s/ql82pdmkjjao0wg/Agrupar_.mp4?dl=0

He trabajado con el Form2 porque es mejor de utilizar las DataTable que los DGV. He puesto en comentario las líneas que sirven a llenar los DGV :

1
2
' dgvMinMax.DataSource = ods.Tables("tb_minmax") ' !!! Si existe este DGV en el Form
' dgvResultados.DataSource = ods.Tables("Resultado") ' !!! Si existe este DGV en el Form

Los datos de la tabla XLS están en el DataTable “stock”. He añadido una columna “X” que no es visible en dgvStocks (ver la vidéo).
Esta columna contiene el tipo para colorear. En primero, los valores de esta columna estan puestos en el procedimiento ColorearStock cambiado desde la versión anterior.
No colorear en ColorearStock, pero ponemos el valor de “X” y llamanos el procedimiento PonerColor que cambia las colores de la línea.
He escrito un procedimiento ReColorearStock que llama PonerColor cada vez que queremos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub ReColorearStock()    ' *******  agrupar las lineas coloreadas ***
    For R As Integer = 0 To dgvStock.Rows.Count - 1
        PonerColor(R)
    Next
End Sub
 
Private Sub PonerColor(Linea As Integer)    ' *******  agrupar las lineas coloreadas ***
    Dim Manera As Integer = ods.Tables("stock").Rows(Linea).Item("X")
    Select Case Manera
        Case 0
            dgvStock.Rows(Linea).DefaultCellStyle.BackColor = Color.White
            dgvStock.Rows(Linea).DefaultCellStyle.ForeColor = Color.Black
        Case 1
            dgvStock.Rows(Linea).DefaultCellStyle.BackColor = Color.Yellow
            dgvStock.Rows(Linea).DefaultCellStyle.ForeColor = Color.Red
        Case 2
            dgvStock.Rows(Linea).DefaultCellStyle.BackColor = Color.Yellow
            dgvStock.Rows(Linea).DefaultCellStyle.ForeColor = Color.Green
        Case 3
            ' Nada hacer porque este es los colores de los casos 0, 1 y 2
    End Select

La solución para agrupar las líneas es de ordenar los datos sobre la columna “X” y de re-colorear el DGV.
Están los procedimientos agregados BAgrupar_Click y PermutacionLineasStock que trabajan con el DataTable a lugar del DGV.

En manera genérale, las líneas tocadas por solucionar este problema están comentario con :
1
2
3
' *******  agrupar las líneas
O
' *******  

Adjunto el proyecto.

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
0
Comentar
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 24/09/2020 16:56:55
Hola Phil , espero que te encuentres muy bien.

hoy retomo el programa, tuve una semana complicada mucho trabajo y aparte estudiar para la facultad.

me pongo a compilar la programación que me enviaste y te cuento como me fue!

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
Imágen de perfil de Phil Rob
Val: 3.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 24/09/2020 17:52:37
No problema.
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
0
Comentar
sin imagen de perfil
Val: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 24/09/2020 21:47:04
Hoal Phil!
termine de compilar y quedo de maravilla!!!

ahora me surge una duda, cambie la forma de cual agrupa los items con problema para que me aparezcan arriba.

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub BAgrupar_Click(sender As Object, e As EventArgs) Handles BAgrupar.Click    ' *******  agrupar las lineas coloreadas ***
    Dim TestigoDePermutacion As Boolean = True
    While TestigoDePermutacion
        TestigoDePermutacion = False
        For R As Integer = 0 To dgvstock.Rows.Count - 2
            If ods.Tables("stock").Rows(R).Item("X") > ods.Tables("stock").Rows(R + 1).Item("X") Then  ' Ordenar Ascending
                PermutacionLineasStock(R, R + 1)
                TestigoDePermutacion = True
            End If
        Next
    End While
    ReColorearStock()
End Sub

basicamente cambie
1
If ods.Tables("stock").Rows(R).Item("X") > ods.Tables("stock").Rows(R + 1).Item("X")
por
1
If ods.Tables("stock").Rows(R).Item("X") < ods.Tables("stock").Rows(R + 1).Item("X")

me aparecen arriba pero tarda en procesar, y de la manera que la hiciste vos no tarda casi nada.

a que se puede deber este pequeño retraso que noto al cambiar la forma que se ordena??
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 24/09/2020 22:21:46
Felicitaciones ! Cambiar el operador > en < es la buena operación para invertir las lineas.
Este es el corazón del algoritmo de clasificación que he programado.
La primera ejecución del procedimiento puede durar mas tiempo cuando las lineas están ordenadas de manera inversa.

Miraré mis códigos y los escribiré para cambiar la clasificación durante la ejecución.
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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 24/09/2020 22:50:33
Continuación ...

Adjunto una version con clasificación creciente y decreciente.
Con el pequeño cantidad de datos, no veo diferencie entre dos clasificaciones contrarias.

Este es el Form2 que contiene el código.

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: 62
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por pablo (22 intervenciones) el 25/09/2020 16:52:31
hola Phil, estoy revisando lo que enviaste, funciona muy bien!!

me sorprende de la manera que lo programaste! no sabia que se podia hacer de esa manera en un mismo sub aplicar dos botones distintos sinceramente quede sorprendido con eso!

muchas gracias por tu 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.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

comparar tablas Access

Publicado por Phil Rob (937 intervenciones) el 25/09/2020 17:41:28
Y sí ! Un procedimiento evento puede responder a varios eventos. Pero, a menudo, como en este caso, debemos hacer identificar los objetos que lo ha activado.
Para este ejemplo que he enviado, otra solucione estaba de hacer con un solo botón (como he hecho para los filtros) : un vez ==> creciente, un vez ==> decreciente, ...

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