Jump to content

Recommended Posts

Posted

Boa tarde. Tenho o seguinte código para preencher uma listbox.

   Private Sub BtVerServico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtVerServico.Click
        Dim ligacao As String = My.Settings.voluntariadoConnectionString
        Dim db As New MySqlConnection(ligacao)
        db.Open()

        Dim varsql As String
        varsql = "SELECT servico.Servico FROM servico LEFT OUTER JOIN servico_informacao ON servico.ID_Servico = servico_informacao.Servico LEFT OUTER JOIN pedido_informacao ON servico_informacao.Informacao = pedido_informacao.ID_Informacao WHERE ID_Informacao = '" & TxtNumeroInformacao.Text & "' "


        Dim cmd As New MySqlCommand(varsql, db)
        Dim dr As MySqlDataReader
        dr = cmd.ExecuteReader


        Do While dr.Read()
            Dim texto As String

            'Dim i As Integer

            If dr.Item(0).ToString = Nothing Then
                ListBox1.Items.Add("Ainda não tem serviços")
            Else
                texto = dr.Item(0).ToString
                'For i = 0 To dr.FieldCount - 1

                'texto &= " | " & dr.Item(i).ToString

                'Next i

                ListBox1.Items.Add(texto)
            End If
        Loop

    End Sub

O problema é que quando não há dados para preencher a listbox, isto devia escrever a frase "Ainda não tem serviços" na listbox, mas não escreve nada. Já corri esta consulta no mysqlworkbench e quando não tem nenhum serviço associado devolve um registo vazio, em vez de devolver a dizer null

Posted

Não podes colocar isso dentro do 'Do While dr.Read()', ele só entra ai dentro se a consulta retornar alguma linha, usa antes o HasRows

If dr.HasRows Then
   Do While dr.Read()
   '(...)
Else
   'Mensagem
End If

Pedro Martins

Não respondo a duvidas por PM

Posted

Vê lá se isto funciona:

While dr.Read()
  If dr.Item(0).ToString() = Nothing
    Listbox1.Items.Add("Ainda não tem serviços")
  Else
    Listbox1.Items.Add(dr.Item(0).ToString())
  End If
End While
Posted

Assim é como já está no meu primeiro post. Não percebo. Até já fiz isto

If dr.Item(0).ToString().Length = 0 Then
                ListBox1.Items.Add("Ainda não tem serviços")

Mas nada. Continua a não mostrar a frase. Tenho um outro formulário em que utilizo uma consulta semelhante e ele mostra a frase, mas neste não. Contudo a outra consulta sql, quando a corri no mysql workbench, se não encontrasse valores mostrava o resultado null, esta mostra um registo vazio.

Posted

Antes de mais, tens a certeza que ele te está a trazem pelo-menos um registo?

Selecciona a linha 'While dr.Read()' e clica no F9 e põe o programa a correr. Ele vai parar ai e essa linha vai ficar a amarelo, depois clica no F10 para ele mudar de linha e diz por que linhas é que ele passou.

Pedro Martins

Não respondo a duvidas por PM

Posted

Obrigado. Já está. Afinal vocês estavam correctos desde o inicio. Devo ter feito qualquer coisa mal e não me apercebi.

       If dr.HasRows Then
            Do While dr.Read()
                Dim texto As String
                texto = dr.Item(0).ToString
                ListBox1.Items.Add(texto)
                
            Loop
         
        Else
        
            ListBox1.Items.Add("Ainda não tem serviços")
           
        End If

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.