none
Consulta Banco de Dados com ProgressBar VB.net RRS feed

  • Discussão Geral

  • Bom pessoal, queria uma ajuda, quero fazer um filtro no meu banco de dados MYSQL, enquanto ele vai fazendo a consulta queria que a progressBar vá carregando em tempo real até chegar aos 100%

    vou deixa abaixo como faço minha consulta hoje.... o resultado aparece tudo em um DataGridViewr.

    Obrigado!

     Private Sub PbuscaCondutor()
            Using con As MySqlConnection = GetConnection()
                Try
                    con.Open()
                    Dim sql As String = "SELECT condutor,autorizado, destino, veiculo, placa, cor, dataentrada,datasaida,porteiro FROM tbl_saidacondutores "
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable

                    da.Fill(dt)
                    dt_itens.DataSource = dt
                    PFormataDataGridViewRelatorio()
                    dt_itens.Filter = "condutor Like '%" & txtfiltro.Text & "%' "

                Catch ex As Exception
                    MsgBox(ex.Message)
                Finally
                    con.Close()
                End Try
            End Using
        End Sub
    terça-feira, 8 de agosto de 2017 19:50

Todas as Respostas

  • Para usar uma progress bar vc deve saber a quantidade total de itens ou o tempo para processamento. No caso de consulta a banco de dados geralmente isto não é previamente sabido.
    Se você tivesse lendo com um data reader e adicionando a uma lista os registros do banco poderia fazer um count antes e definir o step da progress bar igual a 100 dividido pelo resultado do count, e então incrementar a cada item adicionado na lista. Mas isto é bem ineficiente e desnecessário.
    Uma outra ideia é estimar o tempo da consulta e incrementar a progress bar, por exemplo, em 1% por segundo.
    Aí quando o a grid view for preenchida setar pra 100%. Esta ideia seria só com finalidade de enfeite mesmo, pois não iria representar o andamento real da rotina.

    quarta-feira, 9 de agosto de 2017 11:18
  • Olá, estou com mesmo propósito, conseguiu funcionar?
    segunda-feira, 8 de março de 2021 16:04
  • tente isso
    Dim limite As Integer = 10000
            Dim cntr As Integer = 0
            Dim i As Integer
    
            PB.Value = 0
            PB.Step = 1
    
            For i = 0 To limite
                cntr = cntr + 1
                If cntr Mod 100 = 0 Then
                    'lbl.Text = cntr.ToString() & "%"
                    PB.PerformStep()
                    Application.DoEvents()
                    System.Threading.Thread.Sleep(40)
                End If
            Next

    quarta-feira, 3 de novembro de 2021 00:16