none
Botón de búsqueda en VB2010 no funciona mas de dos (2 veces) RRS feed

  • Pregunta

  • Tengo un pequeño código en VB que básicamente realiza un búsqueda en una base de access comparando un TextBox con la DB por medio de un botón ejecuto el código que agrega también el dato encontrado a la DatagridView. El problema esta en que el botón funciona correctamente la primera vez, incluso si da error e intento de nuevo funciona, pero cuando haya un dato y lo muestra en la datagridview, y luego busco otro dato ya no hace nada, tendrá esto alguna solución?

    adjunto mi codigo

    ***aclaracion***

    textbox = txtconsultar

    datagrid... = dgcconsultar

    -----------------

    Imports System.Data
    Imports System.Data.OleDb
    Public Class frmBuscar
        Dim conexion As New OleDbConnection
        Dim adaptador As New OleDbDataAdapter
        Dim registros As New DataSet
        Private Sub frmBuscar_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Try
                'verdad
                conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abraham\Documents\db.accdb"
                conexion.Open()
                MsgBox("Conexión exitosa a la base de datos", vbInformation, "Éxito")
            Catch ex As Exception
                'falso
                MsgBox("No he podido conectarme a la base de datos", vbCritical, "Error")
            End Try
        End Sub

        Private Sub cmdBuscar_Click(sender As System.Object, e As System.EventArgs) Handles cmdBuscar.Click
            Dim consultar As String
            Dim lista As Byte
            If txtconsultar.Text <> "" Then
                consultar = "SELECT * FROM datos WHERE Nombre ='" & txtconsultar.Text & "'"
                adaptador = New OleDbDataAdapter(consultar, conexion)
                registros = New DataSet
                adaptador.Fill(registros, srcTable:="Nombre")
                lista = registros.Tables("Nombre").Rows.Count
                If lista <> 0 Then
                    dgccontactos.DataSource = registros
                    dgccontactos.Columns.Clear()
                    dgccontactos.DataMember = "Nombre"

                Else
                    MsgBox("No existe registro con dicho codigo", vbCritical, "Atencion")
                    txtconsultar.Clear()
                    txtconsultar.Focus()
                End If
            End If
        End Sub

      
    domingo, 5 de octubre de 2014 1:30

Respuestas

  • Hola Abraham, la cadena de conexión debe cerrarse siempre. Creo que utilizar DataTable es más óptimo.

    mports System.Data
    Imports System.Data.OleDb
    
    Public Class frmBuscar
        Dim conexion As New OleDbConnection
        Dim adaptador As New OleDbDataAdapter
        Dim registros As New DataTable
    
        Private Sub frmBuscar_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Try
                'verdad
                conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Abraham\Documents\db.accdb"
                conexion.Open()
                MsgBox("Conexión exitosa a la base de datos", vbInformation, "Éxito")
                conexion.Close()
            Catch ex As Exception
                'falso
                conexion.Close()
                MsgBox("No he podido conectarme a la base de datos", vbCritical, "Error")
            End Try
        End Sub
    
        Private Sub cmdBuscar_Click(sender As System.Object, e As System.EventArgs) Handles cmdBuscar.Click
            Dim consultar As String
            Dim lista As Byte
            If string.IsNullOrEmpty(txtconsultar.Text) Then
                consultar = "SELECT * FROM datos WHERE Nombre ='" & txtconsultar.Text & "'"
                adaptador = New OleDbDataAdapter(consultar, conexion)
                registros = New DataTable
                Try
                    conexion.Open()
                    adaptador.Fill(registros)
                    conexion.Close()
                    lista = registros.Rows.Count
    
                    If lista <> 0 Then
                        dgccontactos.Columns.Clear() ' Creo que no es necesaria esta linea
                        dgccontactos.DataSource = registros
    
                    Else
                        MsgBox("No existe registro con dicho codigo", vbCritical, "Atencion")
                        txtconsultar.Clear()
                        txtconsultar.Focus()
                    End If
               Catch ex As Exception
                    conexion.Close()
               End Try
            End If
        End Sub

    Espero sea de utilidad.

    Saludos.


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile

    lunes, 6 de octubre de 2014 13:49