joaogomes Posted August 25, 2011 at 04:05 PM Report #409271 Posted August 25, 2011 at 04:05 PM 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
Caça Posted August 25, 2011 at 04:36 PM Report #409281 Posted August 25, 2011 at 04:36 PM 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
bioshock Posted August 25, 2011 at 04:42 PM Report #409285 Posted August 25, 2011 at 04:42 PM Não testado, mas deve funcionar: If dr.HasRows Then While dr.Read() ListBox1.Items.Add(dr.Item(0).ToString()) End While Else Listbox1.Items.Add("Ainda não tem serviços") End If
joaogomes Posted August 25, 2011 at 04:45 PM Author Report #409287 Posted August 25, 2011 at 04:45 PM O problema é que esta consulta devolve sempre um registo, mesmo que não tenha resultados, devolve um registo em branco.
bioshock Posted August 25, 2011 at 04:52 PM Report #409289 Posted August 25, 2011 at 04:52 PM 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
joaogomes Posted August 25, 2011 at 08:26 PM Author Report #409345 Posted August 25, 2011 at 08:26 PM 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.
Caça Posted August 25, 2011 at 08:31 PM Report #409347 Posted August 25, 2011 at 08:31 PM Troca por dr.Item(0) = DBNull.Value Pedro Martins Não respondo a duvidas por PM
joaogomes Posted August 25, 2011 at 08:53 PM Author Report #409348 Posted August 25, 2011 at 08:53 PM Continua na mesma. Não percebo.
Caça Posted August 25, 2011 at 08:56 PM Report #409349 Posted August 25, 2011 at 08:56 PM Nem eu, se dizes que vem a null, assim tem de dar. Pedro Martins Não respondo a duvidas por PM
joaogomes Posted August 25, 2011 at 08:58 PM Author Report #409350 Posted August 25, 2011 at 08:58 PM quando eu executo a consulta no mysqlworkbench, vem uma coluna com o seguinte aspecto servico (espaço em branco)
Caça Posted August 25, 2011 at 09:00 PM Report #409351 Posted August 25, 2011 at 09:00 PM E isso é null? De certeza que não. Pedro Martins Não respondo a duvidas por PM
joaogomes Posted August 25, 2011 at 09:00 PM Author Report #409352 Posted August 25, 2011 at 09:00 PM Não. É espaço em branco. Se fosse null, aparecia mesmo escrito null
Caça Posted August 25, 2011 at 09:04 PM Report #409353 Posted August 25, 2011 at 09:04 PM Se é espaço em branco, é com espaço em branco que tens de comparar. Pedro Martins Não respondo a duvidas por PM
joaogomes Posted August 25, 2011 at 09:07 PM Author Report #409354 Posted August 25, 2011 at 09:07 PM Eu fiz isto If dr.Item(0).ToString = "" e também não deu.
Caça Posted August 25, 2011 at 09:10 PM Report #409355 Posted August 25, 2011 at 09:10 PM 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
joaogomes Posted August 25, 2011 at 09:16 PM Author Report #409356 Posted August 25, 2011 at 09:16 PM fiz como disseste, e ele saltou do while para o end sub
Caça Posted August 25, 2011 at 09:18 PM Report #409357 Posted August 25, 2011 at 09:18 PM Então não tem qualquer linha. Já te foi dito para usares o HasRows, ora coloca lá como te foi indicado e vê o comportamento. Pedro Martins Não respondo a duvidas por PM
joaogomes Posted August 25, 2011 at 09:24 PM Author Report #409358 Posted August 25, 2011 at 09:24 PM 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
bioshock Posted August 25, 2011 at 10:00 PM Report #409364 Posted August 25, 2011 at 10:00 PM Estas linhas: Dim texto As String texto = dr.Item(0).ToString ListBox1.Items.Add(texto) São desnecessárias. Basta-te: ListBox1.Items.Add(dr.Item(0).ToString())
joaogomes Posted August 25, 2011 at 10:49 PM Author Report #409371 Posted August 25, 2011 at 10:49 PM Já corrigi. Obrigado. 😁
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now