Llenar ListView desde base de datos

Escrito en Diciembre 16, 2008 por Alex

En este ejemplo como siempre lo explico utilizando la base de datos Mysql porque todos los ejemplos por la web son ya con Sql server.

Necesitamos un proyecto con un Windows Form y un ListView.

Para no complicarnos mucho vamos a poner el código desde el evento Load del formulario.

Así queda el código:

Imports System.Data
Imports MySql.Data.MySqlClient
 
Public Class Form1
    Dim Constr As String = "server=localhost;uid=user;password=mipass;database=mibase"
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        Dim Con As New MySqlConnection(Constr)
        Dim Cmd As New MySqlCommand("select * from articulos", Con)
        Dim Dr As MySqlDataReader
 
        Try
            ListView1.Items.Clear()
 
            Con.Open()
            Dr = Cmd.ExecuteReader
            Dim item As New ListViewItem
            While Dr.Read()
                item = ListView1.Items.Add(CStr(Dr("upc")))
                item.SubItems.Add(CStr(Dr("descripcion")))
                item.SubItems.Add(CStr(Dr("precio")))
            End While
        Catch ex As MySqlException
            MsgBox(ex.Message)
 
        Finally
            Con.Close()
            Cmd = Nothing
            Dr = Nothing
        End Try
    End Sub
End Class

Si te gusto este artículo Suscribete a nuestro feed

65 Comentarios en “Llenar ListView desde base de datos”

  1. Martha |

    hola

    Soy nueva en esto, muchas felicidades por tu pagina muy bueno para aprender, estoy probando tus ejemplos y en uno de ellos es este como le haria si deseo eliminar un item, solo con seleccionar una de las filas y apretando “supr” o con boton que dija delete.

    espero que me alla explicado.

  2. Alex |

    Gracias Martha:
    Mira aquí esta el código adicional para que puedas suprimir un item con solo presionar la tecla SUPR.

    ‘Dentro del evento KeyDown
    Private Sub ListView1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListView1.KeyDown
    ‘Si se presiona tecla Supr
    If e.KeyCode = Keys.Delete Then
    ’si hay algun item seleccionado
    If ListView1.SelectedItems.Count > 0 Then
    ‘remueve el item
    ListView1.SelectedItems(0).Remove()
    End If
    End If
    End Sub

    Saludos…

  3. Martha |

    gracias…
    apenas lo cheque jejeje. si funciona

  4. manuel |

    hola

    oye acabe de checar tu codigo con una base de datos distinta a la tuya pero tuve un error, me dice

    “Unable to convert MySQL date/time value to System.DateTime”

    creo es pork hay un campo de tipo fecha que hago ya le busque y observe por ahi que se declara de otra forma:

    item.SubItems.Add(CDate(Dr(”fecha_nacimiento”)))

    pero ahun asi me marca error…

    agradeceria tu ayuda.

    felicidades muy buena tu pagina.

  5. Gerardo |

    hola

    tambien tengo el mismo problema, el list view no acepta campos de mysql de tipo “date” que se hace en esos casos, oyes y tambien resuelveme una duda que tengo como le hago para que al momento de hacer una busqueda de una fecha me arroge solo la fecha…

    ya que cuando vacio los datos en un textbox me da la fecha y la hora

    y yo solo quiero la hora,

    Tu pagina es muy interaesante ***(-_-)***

  6. Alex |

    Manuel:
    Creo que no es necesario convertir un valor de tipo DateTime en DateTime nuevamente.
    Lo debes de convertir a string.

    Acabo de hacer una prueba en una tabla con tres campos:

    Nombre
    Apellido
    Fecha de nacimiento

    Fecha de nacimiento es tipo DateTime (tambien existe en mysql el tipo Date e igual funcionó)

    La parte que te da el error quedó de esta manera:

    While Dr.Read()
    item = ListView1.Items.Add(CStr(Dr(”nombre”)))
    item.SubItems.Add(CStr(Dr(”apellido”)))
    item.SubItems.Add(CStr(Dr(”fecha_nacimiento”)))
    End While

    Y me muestra la fecha así en el tercer subitem:
    01/11/2001

    Lo que hacemos es convertir el valor que nos devuelve mysql de tipo Date o de tipo Datetime a tipo String y no da error.
    Si te da errores así mandame un ejemplo de tu código, dime en que version de visual basic lo haces (yo probe en 2005 y 2008) y que me suena más a que si hay un error sea porque usas alguna versión de mysql mas antigua.

  7. Alex |

    Gerardo:
    Aplica lo mismo que para manuel y para la duda que tienes del campo Date que te muestra la fecha y la hora, dejame decirte que mysql maneja un campo Date y otro Datetime, el campo Date no usa la hora por lo que solo te devolveria la fecha.

    Aun así si no te es posible cambiar el tipo de dato en mysql hay maneras de formatear una DateTime:

    TextBox1.Text = CDate(CStr(Dr(”fecha_nac”))).ToString(”dd/MM/yyyy”)

    De esta manera le pides con ayuda del método Tostring que te muestre solo los primero dos dígitos del día, dos dígitos de mes y cuatro para el año.

    MMM=Mes Abreviado (Nov, Dic …)
    MMMM= Mes Completo(noviembre)

    Respetando mayúsculas y minúsculas.

    Saludos y gracias por sus comentarios.

  8. Gerardo |

    si es cierto me funciono solo tuve que instalar un mysql mas actualizado

    gracias…

  9. Martin |

    hola

    oye y como le hare para imprimir todo el contenido del listview en papel…ho como le hago para pasarlo a un formato de excel…

    excelente pagina.

  10. Alex |

    Con el control PrintDocument y un botón puedes imprimir los datos.

    Aquí dejo el código completo, solo tienes que jugar con los márgenes, colores y posiciones.

    Public Class Form1
    Dim Item As ListViewItem
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Item = ListView1.Items.Add(”Carlos Ignacio”)
    Item.SubItems.Add(”Hernández López”)
    Item.SubItems.Add(”285456″)
    Item = ListView1.Items.Add(”Jose Luis”)
    Item.SubItems.Add(”Meza García”)
    Item.SubItems.Add(”456545″)
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    Dim font As Font = New System.Drawing.Font(”Arial”, 9.75!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    Dim i As Integer
    Dim m As Integer

    For i = 0 To ListView1.Items.Count - 1
    If i = 0 Then
    m = 40
    Else
    m = i * 20 + 40
    End If
    e.Graphics.DrawString(ListView1.Items(i).Text, font, Brushes.Blue, 100, m)
    e.Graphics.DrawString(ListView1.Items(i).SubItems(1).Text, font, Brushes.Brown, 300, m)
    e.Graphics.DrawString(ListView1.Items(i).SubItems(2).Text, font, Brushes.Red, 500, m)
    Next

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim previo As New PrintPreviewDialog
    previo.Document = Me.PrintDocument1
    previo.Show()
    End Sub
    End Class

  11. Martin |

    hola…

    ok. boy a probar el codigo… gracias por tu aporte.

  12. Elena Meneses |

    Hola Alex

    muy buena esta pagina

    tengo un problema con el listview yo necesito que se me agreguen varios item pero me agrega uno solo y horizontalmente este es mi codigo.

    Dim Cmd As New MySqlCommand(”select * from productos”, Con)
    Dim Dr As MySqlDataReader

    Try
    ListView1.Items.Clear()

    Con.Open()
    Dr = Cmd.ExecuteReader
    Dim item As New ListViewItem
    While Dr.Read()
    item = ListView1.Items.Add(CInt(Dr(”Co_producto”)))
    item.SubItems.Add(CStr(Dr(”Producto”)))
    item.SubItems.Add(CStr(Dr(”Tipo_corte”)))
    item.SubItems.Add(CStr(Dr(”Precio”)))
    End While
    Catch ex As MySqlException
    MsgBox(ex.Message)

    Finally
    Con.Close()
    Cmd = Nothing
    Dr = Nothing

  13. Alex |

    Hola Elena:
    El problema esta en que estas llenando un solo item con varios subitems.
    Simplifica el código así:
    Dim Cmd As New MySqlCommand(”select * from productos”, Con)
    Dim Dr As MySqlDataReader

    Try
    ListView1.Items.Clear()

    Con.Open()
    Dr = Cmd.ExecuteReader

    While Dr.Read()
    ListView1.Items.Add(CInt(Dr(”Co_producto”)))
    ListView1.Items.Add(CStr(Dr(”Producto”)))
    ListView1.Items.Add(CStr(Dr(”Tipo_corte”)))
    ListView1.Items.Add(CStr(Dr(”Precio”)))
    End While
    Catch ex As MySqlException
    MsgBox(ex.Message)

    Finally
    Con.Close()
    Cmd = Nothing
    Dr = Nothing

    Esto hace que se llenen en vez de un item, varios items con diferentes datos.
    Espero haber entendido el problema bien.

    Saludos.

  14. jesus |

    como saber si la conslta está vacia ?? que me lo mande en un msgbox o algo por el estilo, porque al ejecutarla consulta si no hay nada… no hace nada, tal cual si no tubiera codigo la accón…

  15. Alex |

    Que tal Jesus.
    Después de ejecutar el comando puedes utilizar el metodo HasRows que te devuelve un valor lógico de verdadero o falso en caso de no encontrar datos.

    Algo así:
    Dr = Comando.ExecuteReader()

    If Dr.HasRows = False Then
    msgbox(”No existen datos”)
    End If

  16. Guillermo M. |

    K onda Alex:

    Yo se k ya paso mucho tiempo de ke pusiste este gran aporte pero me gustaria k me ayudaras yo estoy usando el Visual Basic 2005 y ps me gustaria agregar a un listview como lo haces pero si tienes una manera de aplicarlo a en Visual Basic 2005 k no sea .NET me arias un gran favor…

    O si de pura casualidad tienes la manera de bajar este programa ya hecho te lo agradeceria de ante mano nomas para entender lo que pones por favor si me lo puedes pasar a mi correo o mostrarme una pagina de donde pueda conseguir este ejemplo….o otras paginas k me recomiendes donde encuentre lo siguiente:

    Hacer conexion con una base de datos access poder agregar e eliminar de la misma desde botones y ademas otro k me diga como agregar al listview como el k hiciste y los agregue a la base de datos.

    te lo agradeceria de ante mano…

    Y si el ejemplo que tienes si me sirve el problema es k no se como implementarlo te pido disculpas pero por favor si pudieras hacerme el favor te lo agradeceria infinitamente….

  17. Alex |

    El 2005 es .Net
    Solo que quieras Visual Basic 6.0

  18. Guillermo M. |

    haaa ok… y este programa de arriba en k esta hecho????

    Este fijate que tengo un proyecto que hacer tengo enlazada la base de datos y todo con OLE… lo que quiero hacer es actualize mi base de datos cuando agrego desde los textboxs pero no lo hace solo de manera temporal nomas estan guardados en lo que esta corriendo el proyecto pero al cerrarlo ya no estan cuando checo la base o vuelvo a correr el proyecto…

    Si logro hacer que se graben en la base de datos cuando uso un DATAGRIDVIEW pero no se ve muy presentable kiero usar los textbox a ver si puedes ayudarme con eso????

    aki esta el codigo de algo k tengo:

    Imports System.Windows.Forms

    Public Class Clientes
    Dim dt As New DataTable
    Dim intFila As Integer = 0
    Private Sub Limpiar()
    TextBox1.Clear()
    TextBox2.Clear()
    TextBox3.Clear()
    TextBox4.Clear()
    TextBox5.Clear()
    TextBox1.Focus()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ‘Es el boton para agregar datos a la base de datos
    Dim Nocli As String
    Dim NoCre As String
    Dim Nomb, Dire, Tele As String

    Nocli = TextBox1.Text
    NoCre = TextBox2.Text
    Nomb = TextBox3.Text
    Dire = TextBox4.Text
    Tele = TextBox5.Text

    Dim strConexion As String = “Provider = Microsoft.jet.OLEDB.4.0; Data Source=BaseWell.mdb”
    Dim sql As String
    sql = “INSERT INTO Clientes (NoCliente,NoCredencial,Nombre,Direccion,Telefono) Values (” + Nocli + “,” + NoCre + “,’” + Nomb + “‘,’” + Dire + “‘,’” + Tele + “‘)”
    Dim dataAdapter As New OleDb.OleDbDataAdapter(sql, strConexion)

    SetClientes1.Clear()
    OleDbDataAdapter1.SelectCommand.CommandText = sql
    OleDbDataAdapter1.Fill(SetClientes1)
    Button2.PerformClick()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    ‘Actualiza la base de datos
    OleDbDataAdapter1.Update(SetClientes1)
    MsgBox(”Se Agrego Exitosamente”)
    Limpiar()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    ‘Es el boton para Buscar
    Dim strConexion As String = “Provider = Microsoft.jet.OLEDB.4.0; Data Source=BaseWell.mdb”
    Dim strSQL As String = “SELECT * FROM Clientes”
    Dim dataAdapter As New OleDb.OleDbDataAdapter(strSQL, strConexion)
    dataAdapter.Fill(dt)
    dataAdapter.Dispose()

    Dim strBusca As String
    Dim Encontrado As Boolean = False
    Dim i As Integer

    strBusca = CStr(InputBox(”Escribe el Numero del Cliente a Buscar”, “Cliente a Buscar”))
    For i = 0 To dt.Rows.Count - 1
    If CStr(dt.Rows(i)(”NoCliente”)) = strBusca Then
    Encontrado = True
    intFila = i
    TextBox1.Text = CStr(dt.Rows(intFila)(”NoCliente”))
    TextBox2.Text = CStr(dt.Rows(intFila)(”NoCredencial”))
    TextBox3.Text = CStr(dt.Rows(intFila)(”Nombre”))
    TextBox4.Text = CStr(dt.Rows(intFila)(”Direccion”))
    TextBox5.Text = CStr(dt.Rows(intFila)(”Telefono”))
    End If
    Next
    If Not Encontrado Then
    MsgBox(”No se encontro el Numero del Cliente : ” & strBusca, , “Busqueda Finalizada”)
    End If
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    ‘El boton de salir
    OleDbDataAdapter1.Update(SetClientes1)
    MessageBox.Show(”Origen de datos Actualizado”)
    Me.Close()
    End Sub

    Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    SetClientes1.Clear()
    OleDbDataAdapter1.Fill(SetClientes1)
    End Sub
    End Class

    Aver k me puedes decir al respecto o si conoces una pagina donde venga lo que busco de agregar ala base de datos desde los textbox en VB 2005 te lo agradeceria….

  19. Alex |

    Guillermo:
    Yo lo haría así:
    Imports System.Data.OleDb

    Dim Con As OleDbConnection
    Dim cmd As OleDbCommand
    Dim Dr As OleDbDataReader
    Dim ResAs Integer
    Dim sql As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_
    System.EventArgs) Handles Button2.Click
    Try
    Con = New OleDbConnection(”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mibase.mdb;”)
    Con.Open()
    sql = “INSERT INTO Clientes (NoCliente,NoCredencial,Nombre,Direccion,Telefono) Values (” + Nocli + “,” + NoCre + “,’” + Nomb + “‘,’” + Dire + “‘,’” + Tele + “‘)”

    cmd = New OleDbCommand(sql, Con)
    res= cmd.ExecuteNonQuery
    MessageBox.Show(res) ‘este mensaje te muestra en numero de registros afectados

    Catch
    End Try
    Con.Close()
    End Sub

    Claro, aqui te pongo solo la parte del insert utilizando el método ExecuteNonQuery que solo devuleve cuantos registros fueron afectados y solo te sirve para las operaciones de Insert, update y Delete que no devuelven valores.

    Saludos.

  20. Guillermo M. |

    haaa gracias heee!!!

    si me funciono! muchas gracias man olle no necestio agregar los componentes o si???

    bueno espero que no te alla perdido mucho tiempo te agradesco de antemano por tomarte el tiempo en ayudarme gracias man lo bueno es k no fue en vano!!!

  21. Alex |

    Mientras funcione no necesitas agregar nada mas que ya este agregado.

  22. Manuel |

    que tal alex como hago para que me muestre los datos en la columna corespondiente ya que en la tabla de la base de datos tengo 3 campos nombre, apellido, calificacion pero cuando quiero mostrar los datos almacenados en el listview en donde ya tengo creadas las tres columnas, me aparesen todos los datos en la primera columna y no de manera ordenada entonces cual es la solucion

  23. Manuel |

    lo siento ya solucione el problema bien dicen que una cerbeza te ayuda a abrir la mente jejejeje de cualquier forma muchas gracias

  24. Alex |

    Bueno la solucion era poner el listview en modo details

  25. Ramon |

    alex me podrias ayudar?quiero saber como se obtiene el numero de registros en una tabla y convertirlo propiamente a numero para hacer operaciones con el utilizando mysql+visualbasic.net………me alivianarias un chingo

  26. Alex |

    Ramon: Lo otienes con la query:
    Select count(nombreCampo) from tabla

    y Lo almacenas en una variable de tipo integer o short.

  27. crysthian |

    Tengo una base de datos en excel nesecito llenar un listview con los datos de la columna a - f al dar click en un boton peron no lo he logrado!!!!!

    ayudemnme!!!!

  28. Alex |

    Crystian, es algo estenso ponerlo aqui en comentarios, pero en unos dias lo pongo en un post.

  29. guido |

    bueno yo quiero saver sobre el codigo de las 4 operaciones suma resta multiplicacion y division utilizando el if then else por favor le boya suplicar

  30. Alex |

    Guido:
    dim Tipo_operacion as string
    dim Numero1 as double
    dim Numero2 as double
    dim Resultado as double
    numero1=10
    numero2=15

    If Tipo_operacion=”suma” then
    Resultado=numero1+numero2
    else if Tipo_operacion=”resta” then
    Resultado=numero1-numero2
    else if Tipo_operacion=”multiplicacion” then
    Resultado=numero1 * numero2
    else if Tipo_operacion=”division” then
    Resultado=numero1 / numero2
    endif

    msgbox (Resultado)

    Lo ideal es usar Select Case en Vez de If else …

    Saludos.

  31. manuel |

    Estoy usando un listview como en tu ejemplo y mi duda es como puedo cambiar el ancho de las columnas del listview, lo que pasa es que cuando realizo una consulta y llamo los datos al listview no caben en el espacio en que se muestran y salta de linea y no quiero que salte.

    De antemano gracias!!

  32. Esther |

    Hola estoy probando tu ejemplo pero en mi caso la BD esta en un escritorio remoto y me marca un error en la linea de Dim Constr As String = “server=localhost;uid=user;password=mipass;database=mibase”
    como se le hace para acceder mediante escritorio remoto?????

  33. Alex |

    Manuel:
    El list view se ajusta con el mouse en el diseñador y también se ajusta desde la propiedad Width-

  34. Alex |

    Esther: Si tu base de datos esta en otro equipo, tienes que poner el nombre o la direccion IP del equipo remoto en donde dice server=localhost.
    Localhost significa Local.

  35. Javier |

    saludis alex muy buena pagina y buenas practicas q me han ayudado
    tengo una pregunta y espero me pueda responder porfavor

    esto asiendo algo similar pero en lenguaje C# y utilizo sql server 2005 y pues apenas comienso

    no tenrdas u tuto de como insertar los datos de una tabla de sql a un listview en C#???

    te lo agradeceria mucho.

  36. Alex |

    No tengo ningún tutorial en C# y el problema que por el trabajo no tengo casi tiempo de postear, pero si me da un tiempecito te lo posteo.

  37. PIPELINE |

    HOLA AMIGO,TENGO UNA GRAN DUDA ,OJALA Y PUEDAS AYUDARME HE HECHO UNA INTERFAZ EN VISUAL ESTUDIO 2005 QUE ME CONECTA A MYSQL PUEDO DAR BAJAS Y ALTAS, PERO LO QUE NO HE PODIDO HACER ES COMO HACER UNA CONSULTA,POR EJEMPLO PONGO UN TEXTBOX Y POR MEDIO DE UN BOTON”CONSULTA POR EJEMPLO” QUE ME BUSQUE EL CAMPO LLAVE” EN MI CASO ES DE TIPO “INT”
    Y QUE SOLO ME MUESTRE EL DATO QUE HE TECLEADO EN EL TEXBOX Y ME LO MUESTRE EN MI LISTVIEW ESPERO QUE AYUDES YA QU ES URGENTE LO ENTREGO EL DIA DE MAÑANA

  38. Alex |

    PIPELINE
    Es exactamente igual la consulta solo que mencionas el campo llave.

    SELECT campollave FROM tabla WHERE campollave=textbox1.text

    Saludos.

  39. Edwin |

    Hola alex, sos un groso, tengo una consulta, como obtengo el numero de la fila seleccionada en un listwiew, para luego mostrar la informacion de dicha fila en otro dormulario..
    saludos

  40. Edwin |

    bueno ya lo solucione, pero ahora viene otra gran duda como hacer un istview editable en vb2005 u vb2008 , reurgente

  41. Alex |

    Un listview editable? Lo que yo haria seria sobreponer un textbox a cada campo de la primera fila y ahi metes los datos. Pero .NET no trae uno editable.
    Podrias conseguir uno en internet ya hecho.

  42. Reno Ranes |

    Buenas Tardes,

    Deseo mostrar una tabla en un listview, pero a la hora de cargar los datos cuándo agregó el ITEM me aparece que no coinciden los tipos, pero ya tengo definida la variable ITEM. Anexo código

    Dim ITEM as ListItem

    Set ITEM = ListView.ListItems.Add(, , (Rst.Fields(0).Value) <== Aquí me marca el error

    Ya intenté varias veces y me sigue marcando el error, necesito configurar el objeto ListView??’

    Agradezco tú ayuda.

  43. Alex |

    Reno ListItem no es lo mismo que listViewItem. ese es el problema.

  44. Santiago |

    Hola alguien me puede decir como cargo los datos en el listview, pense que era como en el datagrid, pero nada que ver.. Estoy empezando a programar en visual.net..
    Agradecido de antemano.

  45. Alex |

    Precisamente lee este Post @Santiago

  46. Santiago |

    Alguien sabe como hacer enter en un datagrid y que solo me seleccione esos datos de esa fila..

  47. Santiago |

    el tema es que quiero pasar esos datos en otro datagrid y no son exactamente los mismos datos, ambos datagrid tienen datos distintos.

  48. Alex |

    Con el evento keypress.
    Hay muchas maneras.

  49. Alex |

    Debes acceder a las columnas por su nombre.
    Checa que en el editor de columnas les hayas puesto un nombre a cada una.

    Maneja el evento RowEnter del datagridView.

    El valor lo obtienes con un código parecido a este. remplazando los nombres correctos.

    Dim Valor as integer

    valor = datagridView1.CurrentRow.Cells(”NombreColumna”).Value

    Te devolverá un valor de tipo object así que debes hacer la conversión adecuada.

  50. daniel |

    Que ondas alex

    es muy apreciable tu ayuda enserio a mi me a servido mucho, de echo utlize el codigo de imprimir y me funciono perfectammente…

    oyes tengo una duda espero y me sepa explicar mira ya tengo un listView funcionando con un proyecto de punto de venta con el metodo key press…el detalle es que cuando realizo una venta primero debo de checar que la cantidad que boy a vender sea menor o igual a la cantidad de la base de datos…el detalle que no encuentro la forma de validar esa parte del codigo.

    ya que debe mandar un msj que la cantidad es insuficiente a vender o que no hay en existencia…ayuda plz o dame una idea de como validar…

    gracias amigo

  51. Alex |

    Daniel: No comprendo muy bien, pero si el evento keypress lo tienes en un texbox donde metes el codigo de barras o la clave del producto, necesitas solamente hacer una consulta ala BD y dependiendo del resultado mandas el mensaje que dices y pones un exit sub o exit function y evitas que se llene el listview con esto.

  52. Recuperar Archivos Formateados |

    Este artículo es muy bueno e interesante. Suerte!

  53. Jorge |

    Hola que tal Alex, mira tengo una duda bien grande y he estado batallando con este problemita… mira te explico

    Estoy haciendo un punto de venta en el cual tengo un textbox donde coloco el codigo del producto y tengo un listview donde se va imprimiendo el producto, el problema es ke al poner un codigo que no existe, me manda el mensaje de que no existe pero de igual forma me imprime el codigo que puse en el textbox en el listview pero sin las demas columnas obviamente porque no existe, me gustaria que me mandara el mensaje de que no existe y no se imprima nada, te mando como lo tengo.

    If e.KeyCode = Keys.Enter Then
    Try
    Dim db As New MySqlCommand(”SELECT * FROM productos” & ” WHERE CodigoProducto =’” & txtCodigoBarras.Text & “‘”, con)
    con.Open()

    mysqldr = db.ExecuteReader()

    Dim item As New ListViewItem

    While mysqldr.Read()
    txtDescripcion.Text = mysqldr.Item(2)
    txtCantidad.Text = mysqldr.Item(3)
    txtPrecioporUnidad.Text = mysqldr.Item(5)
    End While

    mysqldr.Close()
    con.Close()
    Catch
    txtCodigoBarras.Focus()
    End Try

    If txtCodigoBarras.Text = “” Then
    SaurinaMBox.ShowWinMessage(”Introduzca el codigo del producto para añadir a la venta”, Windows.Forms.MessageBoxButtons.OK)
    txtCodigoBarras.Focus()
    Else
    Try
    Dim strSQL As String
    strSQL = “INSERT INTO ventaporproducto ” & _
    “(Ticket, FechaVenta, CodigoBarras, Descripcion, Cantidad,PrecioUnidad) VALUES ” & _
    “(’” & lblTicket.Text & “‘, ‘” & lblDate.Text & “‘,’” & txtCodigoBarras.Text & “‘,” & _
    “‘” & txtDescripcion.Text & “‘,’” & txtCantidad.Text & “‘, ” & _
    “‘” & txtPrecioporUnidad.Text & “‘)”
    con.Open()

    Dim db As New MySqlCommand(strSQL, con)

    db.ExecuteNonQuery()
    Call listview()

    Catch
    SaurinaMBox.ShowWinMessage(”No existe el producto en la base de datos.!”, Windows.Forms.MessageBoxButtons.OK)
    txtCodigoBarras.Focus()

    End Try
    con.Close()
    End If

    Aki te mando un link de una imagen para que veas como se ve en el programa http://yfrog.com/c9noexistej

  54. Jorge |

    Bueno, de igual manera ya solucione ese problema, aplicando otros metodos ;D si alguien esta desarrollando un punto de venta podemos intercambiar ideas.. ;)

  55. alex |

    Tienes que poner Exit Sub en el momento que sepas que noe xiste el producto y antes de agregar al listview.

  56. Jorge |

    Que onda gracias alex por responder, mira tengo otra duda, no se si me pudieras asesorar, por ejemplo ya tengo mi Form de ventas bien añade los productos al listview me hace el conteo de productos los subtotales etc etc, si presiono F3 sale un nuevo Form que indica el metido de pago, bueno mi duda es

    Como puedo hacerle para que ese nuevo form, pueda leer cuanto es el subtotal del Form Ventas y cuantos productos esta comprando, es algo asi como poder ver las variables de un form en otro… sorry soy nuevo en vb.net :/ gracias alex

  57. alex |

    Declara tus variables de tipo Friend o Public y leelas desde el otro form así:

    nombreform.variable

    Donde nombreform es el nombre de tu form de ventas y variable es la variable friend donde tienes el subtotal.

    Saludos.

  58. Jorge |

    Amigo necesito un poco de tu ayuda, como puedo hacer si tengo un login y quisiera imprimir en la ventana que sigue del login el nombre de quien ha entrado?

    por ejemplo tengo en mi base de datos una tabla llamada cuentasdeacceso la cual contiene solo 4 campos que es Id, Usuario, Contrasena, Nombres

    en el login te pide el usuario y contrasena y quisiera que al entrar al sistema te aparezca el nombre del usuario que jale el dato del campo Nombres

    Estoy trabajando con mysql gracias bro y Feliz navidad

  59. alex |

    Jorge:
    Hya muchas maneras. Yo declararía una variable tipo public en modulo creado especialmente para variables globales.

    Public nombreUsuario as string

    Al logearse con el form login verificas que el usuario y contraseña sean correctos y de ser así, sacas el nombre desde ese mismo formulario y lo asignas a la variable public:
    nombreUsuario=”usuario”

    Y durante toda la ejecución de tu aplicación puedes tener acceso a esa variable para ocuparla como quieras.

  60. Jorge |

    Ok muchas gracias ya lo conseguir y pongo por si a alguien le interesa:

    Private Sub txtUsername_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUsername.TextChanged
    Dim db1 As New MySqlCommand(”SELECT * FROM cuentasdeacceso WHERE Usuario=’” & txtUsername.Text & “‘”, con)
    con.Open()

    mysqldr = db1.ExecuteReader

    While mysqldr.Read()
    lblNombre.Text = mysqldr.Item(3)
    End While

    mysqldr.Close()
    con.Close()

    nombreEmpleado = lblNombre.Text
    End Sub

    Automaticamente va ir cambiando si nosotros en nuestra caja de texto cambiamos de usuario.

  61. Jorge |

    Bro disculpa como puedo hacer una consulta a 2 campos de mi tabla ?

    es ke por ejemplo al momento de poner ya sea el codigo de barras o codigo del producto dentro de un txtbox quisiera que busque en los 2 campos de mi tabla para ver si se encuentra…

    solo puedo hacer que busque en 1 campo pero no lo consigo como kiero, te lo agradeceria mucho brother

    Feliz año

  62. Edwin |

    Hola Alex, durante tiempo me ha servido de mucho tu blog, pero ya termine una pequeña aplicacion en vb2008 y Mysql pero ahora mi problema es que no puedo o mejor dicho nose como agregar el mysql al instalador de mi aplicacion cosa que el usuario final no tenga que instalar mysql para poder operar la aplicacion, he buscado por la red y encontre algo sobre mysql desatendido, pero la verdad kisiera tu ayuda por fa.
    saludos desde ya mil gracias

  63. jamesham |

    Hola Alex, soy nuevo en esto, podrias poner el codigo de llenar el ListView pero con una base de datos de acces, me esta siendo complicado el adaptarlo.

  64. logan |

    Hola alex este tutorial me ha servido pues he logrado parte, cuando elimino una linea del ListView solo lo elimina del ListView en pantalla pero no de la base de datos, como se puede solucionar,tambien cuando hay un campo vacio de algun dato de una fila no pone las siguientes filas como se puede solucionar.
    Pongo el codigo por si me puedes alludar y si tambien puede alludar a alguien, e logrado hacerlo con base datos de acces.
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Cliente
    Dim Constr As String = (”Provider=Microsoft.Jet.Oledb.4.0;Data source=D:\BaseDatos.mdb”)
    Dim dt As New DataTable
    Private Sub Cliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Con As New OleDbConnection(Constr)
    Dim Cmd As New OleDbCommand(”SELECT * FROM CLIENTE”, Con)
    Dim DR As OleDbDataReader
    Try
    ListView1.Items.Clear()
    Con.Open()
    DR = Cmd.ExecuteReader
    Dim item As New ListViewItem
    While DR.Read()
    item = ListView1.Items.Add(CStr(DR(”CODIGO”)))
    item.SubItems.Add(CStr(DR(”CLIENTE”)))
    item.SubItems.Add(CStr(DR(”NIF”)))
    item.SubItems.Add(CStr(DR(”TELEFONO”)))
    item.SubItems.Add(CStr(DR(”FAX”)))
    End While
    Catch ex As Exception
    ‘Catch ex As ReadOnlyException
    MsgBox(ex.Message)
    Finally
    Con.Close()
    Cmd = Nothing
    DR = Nothing
    End Try
    ‘DR = Comando.ExecuteReader()
    ‘If DR.HasRows = False Then
    ‘ MsgBox(”No existen registros”)
    ‘End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ventana As New Inicio()
    ventana.Show()
    Me.Finalize()
    End Sub

    ‘Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
    ‘Dentro del evento KeyDown
    Private Sub ListView1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListView1.KeyDown
    ‘Si se presiona tecla Supr
    If e.KeyCode = Keys.Delete Then
    ‘ ’si hay algun item seleccionado
    If ListView1.SelectedItems.Count > 0 Then
    ‘ ‘remueve el item
    ListView1.SelectedItems(0).Remove()
    End If
    End If
    End Sub
    End Class

  65. roberto carlos |

    estos codigos si que estan completos y entendibles usted si sabe responder una pregunta gracias por responder preguntas tan concreta mente siga asi

Escribe un comentario