Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rjsma

Mostrar dados em labels

Mensagens Recomendadas

rjsma

boas

Eu queria mostrar dados que estão armazenados numa bd mysql em labels.Eu estou a fazer tudo via código.

Alguem pode me dar um empurrão?

abraço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Onde é que precisas do empurrão?

Ir buscar os dados ou escrevê-los nas labels ?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Essa afirmação diz-me que precisas do empurrão mesmo a nível de ligação à base de dados :thumbsup:

Já sacaste o connector do mysql ?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

sim, ja saquei e ja fiz ligacao para inserir, actualizar e apagar os dados.Ja tenho alguns dados guardados na bd.Precisva era de ajuda para mostrar os dados em labels

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Optimo.

Dá-nos então uma ideia de como tens essa(s) label(s) disposta(s), ou como queres mostrar os dados, porque atribuír-lhe texto é tão simples como

Label1.Text = "Texto"

, e duvido potes que seja isso que te esteja a falhar.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Tenho uma form para registar dados e outra form para mostra os registo( é aqui que está as labels).A minha intencao era ao abrir a form aparecesse logo o 1 registo depois ia movimentando pelo os registo(para frente e para tras)

Abraço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Como estás a chupar os dados?

Presumo que estejas a fazer queries directas, e nesse caso eu sugeria que preenchesses um controlo de listagem como a listbox, onde cada item armazenasse o ID do registo (se o registo não tiver uma coluna de id... devia ter)

Depois podes desde chupar tudo da BD e armazenar todos os dados de cada registo em cada objecto item da listbox, até fazer queries directas por o ID do item seleccionado.

Either way, depois é só distribuír os dados por as labels.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Ainda estou verdinho com ligacoes mysql por codigo, quando dizes queries directas queres disser desta maneira?

 
        Dim conn As String = "server=127.0.0.1;user id=root;password=;database=wiki_animal"

        Dim SQL As String = "INSERT INTO animal(imagem1,imagem2,imagem3,imagem4,imagem5, Nome_Cientifico,Nome_Animal,Classe,Origem,Habitat,Reproducao,Alimentacao,Tamanho,Peso,Outras_Informacoes) VALUES (@imagem1,@imagem2,@imagem3,@imagem4,@imagem5, @Nome_Cientifico, @Nome_Animal, @Classe, @Origem, @Habitat, @Reproducao, @Alimentacao, @Tamanho, @Peso, @Outras_Informacoes);"


        Dim connection As New MySqlConnection(conn)


        Dim command As New MySqlCommand(SQL, connection)


        command.Parameters.Add("@Nome_Cientifico", MySqlDbType.VarChar).Value = TextBox2.Text
        command.Parameters.Add("@Nome_Animal", MySqlDbType.VarChar).Value = TextBox3.Text
        command.Parameters.Add("@Classe", MySqlDbType.VarChar).Value = TextBox4.Text
        command.Parameters.Add("@Origem", MySqlDbType.VarChar).Value = TextBox5.Text
        command.Parameters.Add("@Habitat", MySqlDbType.VarChar).Value = TextBox6.Text
        command.Parameters.Add("@Reproducao", MySqlDbType.VarChar).Value = TextBox7.Text
        command.Parameters.Add("@Alimentacao", MySqlDbType.VarChar).Value = TextBox8.Text
        command.Parameters.Add("@Tamanho", MySqlDbType.VarChar).Value = TextBox9.Text
        command.Parameters.Add("@Peso", MySqlDbType.VarChar).Value = TextBox10.Text
        command.Parameters.Add("@Outras_Informacoes", MySqlDbType.VarChar).Value = TextBox11.Text
        command.Parameters.Add("@Imagem1", MySqlDbType.Blob).Value = Img_perfil.Image
        command.Parameters.Add("@Imagem2", MySqlDbType.Blob).Value = Foto1.Image
        command.Parameters.Add("@Imagem3", MySqlDbType.Blob).Value = Foto2.Image
        command.Parameters.Add("@Imagem4", MySqlDbType.Blob).Value = Foto3.Image
        command.Parameters.Add("@Imagem5", MySqlDbType.Blob).Value = Foto4.Image


        conn = "server=127.0.0.1;user id=root;password=;database=wiki_animal"
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

        connection.Close()
        connection = Nothing
        command = Nothing

E sim, tenho um campo destinado para o id

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Exacto.

Vou te escrever um pequeno exemplo de como podes fazer o que pretendes com uma listbox:

Vamos imaginar que temos uma tabela com ID, Nome, Idade e Morada.

Antes criamos uma classe que define uma pessoa:

    Public Class Pessoa
        'desculpa lá a falta dos gets sets e declaração de vars internas. Estou com o VS2010 e o Auto-implemented properties entrou em acção. Se não souberes como criar propriedades, goggla que apanhas com relativa facilidade
        Public Property PID As Integer
        Public Property Nome As String
        Public Property Idade As Integer
        Public Property Morada As String

        Public Overrides Function ToString() As String
            Return _Nome
        End Function

    End Class

Temos de alterar ligeiramente a função ToString para devolver o que contém na variável interna _Nome.

Para o efeito fazemos um override. Isto para que a ListBox apresente um valor e não o tipo do objecto que só por ela não tinha representação em string.

Puxas normalmente os dados com um dataadapter, tal como farias em MSSQL e despachas os dados para uma datatable, e logo depois disso vais criar instancias de Pessoa,  os objectos por cada registo, e adicionar à listbox, assim:

        'onde DT é a datatable já com os dados depois do fill do adapter
        For Each DR As DataRow In DT.Rows
            Dim NovaPessoa As New Pessoa
            NovaPessoa.PID = Integer.Parse(DR("ID").ToString)
            NovaPessoa.Nome = DR("Nome").ToString
            NovaPessoa.Idade = Integer.Parse(DR("Idade").ToString)
            NovaPessoa.Morada = DR("Morada").ToString
            ListBox1.Items.Add(NovaPessoa)
        Next

Depois, ao trocares de item na ListBox, podes alimentar as labels assim:

        Dim PessoaSeleccionada As Pessoa = CType(ListBox1.SelectedItem, Pessoa)
        Label1.Text = PessoaSeleccionada.Nome
        Label2.Text = PessoaSeleccionada.Idade.ToString
        Label3.Text = PessoaSeleccionada.Morada

Assim como apanhar o ID do registo, que é da mesma maneira

        Dim IDRegisto As Integer = CType(ListBox1.SelectedItem, Pessoa).PID
        MsgBox(IDRegisto.ToString)

Alternativamente podias guardar apenas o ID e fazer queries novas por cada movimento que fizesses na Listbox.

Existem milhentas maneiras de fazer isto, o que te apresentei é uma mera sugestão.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Vamos lá ver, não percebi onde tenho que colocar cada exemplo e depois adaptar ao meu codigo.

1º tenho que criar um controlo com uma listbox(user control)?Dentro dese controlo crio a class e tambem este exemplo

        'onde DT é a datatable já com os dados depois do fill do adapter
        For Each DR As DataRow In DT.Rows
            Dim NovaPessoa As New Pessoa
            NovaPessoa.PID = Integer.Parse(DR("ID").ToString)
            NovaPessoa.Nome = DR("Nome").ToString
            NovaPessoa.Idade = Integer.Parse(DR("Idade").ToString)
            NovaPessoa.Morada = DR("Morada").ToString
            ListBox1.Items.Add(NovaPessoa)
        Next

Depois os outros exemplos já é no form load da form que serve para mostrar os dados.

Diz me se estou a pensar bem?

PS:Desculpa em estar a ser chato, mas ainda estou verdinho nesta parte  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

fiz uma coisa assim:

    Dim seguinte As Integer
        seguinte = "ID" + 1

        'ligas-te à BD
        Dim conn As String = "server=127.0.0.1;user id=root;password=;database=wiki_animal"
        'crias o comando DR (por exemplo)

        'Fazes esta consulta

        Dim SQL As String = "SELECT imagem1,imagem2,imagem3,imagem4,imagem5, Nome_Cientifico,Nome_Animal,Classe,Origem,Habitat,Reproducao,Alimentacao,Tamanho,Peso,Outras_Informacoes WHERE ID = seguinte"
        ' Cria uma nova ligação à base de dados
        Dim connection As New MySqlConnection(conn)

        ' Criação do comando indicando a instrução e a ligação
        Dim command As New MySqlCommand(SQL, connection)

        DR.read()
        TextBox13.Text = DR.item("Nome_Cientifico")
        TextBox14.Text = DR.item("Nome_Animal")
        TextBox15.Text = DR.item("Classe")
        TextBox16.Text = DR.item("Origem")
        TextBox17.Text = DR.item("Habitat")
        TextBox18.Text = DR.item("Reproducao")
        TextBox19.Text = DR.item("Alimentacao")
        TextBox20.Text = DR.item("Tamanho")
        TextBox21.Text = DR.item("Peso")
        TextBox22.Text = DR.item("Outras_Informacoes")

        'fechas e limpas tudo
        connection.Close()
        connection = Nothing
        Command = Nothing
    End Sub

Falta e fazer o comando dr, alguem me explica como se faz?

Abraço

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Boas,

 Dim DR As MySqlDataReader = commando.ExecuteReader()
        If DR.HasRows Then
            'O código que tens
        End If

Agora se o objectivo é depois poderes saltar de registo em registo, deves mudar de lógica...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Não tem nada a haver com usercontrols.

A lógica que te sugeri permite "saltar" de registo em registo sem qualquer problema.

Agora não posso, mas quando puder já te explico melhor.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

@ribeiro55

Sim a tua ideia também funciona, mas parece-me que irá ter muito mais trabalho...

@azevedo

Talvez utilizando data tables, binding source,  e data binding dos labels..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

já estou todo baralhado :D eheheheh

Continua a fazer como estava a fazer ou sigo a logica do ribeiro.Qual e que e a melhor e mais facil'

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Eu sou suspeito, pois confesso detestar databinds.

Mas será, provavelmente, a maneira mais fácil de navegares registos de forma fácil.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Podes mostrar me alguns exemplos onde possa guia rme? Queria fazer tudo á via codigo.Já sei fazer por wizards agora queria aprender via codigo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Vou seguir a logica do ribeiro,para mim é o que está a ser mais facil de compreender.Ribeiro55 podes explicar um bocado melhor como fazer da tua maneira?

Abraço

:)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

A classe podes adicionar depois da classe do form, ou podes adicionar a uma classe à parte.

O ciclo FOR podes adicionar logo após um fill do dataadapter para uma datatable.

Os outros dois blocos, um deves meter no evento SelectedIndexChanged para consultar o objecto na listbox a cada alteração do índice seleccionado (deves também controlar se existe algum índice seleccionado, porque seleccionar nenhum, é uma alteração de índice e portanto dispara o evento)

O outro bloco, serve só para te demonstrar como podes apanhar o ID, o que serve por exemplo para alterares ou apagares o registo.

Muito stress? Eu mando-te num projecto.

Acho importante "impingir" o mais próximo de OOP que se consiga, sempre que que possível.

Se a listbox consegue manter listas de objectos, porque havemos de nos cingir à string?

Até forms inteiros podes listar por lá... objecto é objecto.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rjsma

Já compreendi meia parte.Não compreendi foi esta parte:

O ciclo FOR podes adicionar logo após um fill do dataadapter para uma datatable.

Eu não tenho nenhuma dataadapter e nem uma datatable, isso são objecto que costuma aparecer quando se faz por wizards.

Se podesses mostrar me um projecto tornava se  mais facil para estudar este assunto.

Abraço

:)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Sim por wizards esses objectos são criados automaticamente, mas também os podes criar à mão.  :)

Continuo a achar que deves optar pelo outro método.

Tens aqui um exemplo:

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=329658

O processo passa habitualmente, por teres um comando qualquer que preenche um datatable (para tal precisas de um adapter e do método fill), após teres os dados na datatable associas a um binidingsource, para os controlos que queres que estejam associados aos campos da base de dados tens de adicionar um databinding.

Depois o bindingsource trata do resto, ou seja, andara para a frente para trás, para o inicio e para o fim...

Se precisares de ajuda na implementação deste modo, avisa.

Eu podia meter-te aqui o código completo, mas assim não te ajuda a aprender...  :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

Algo muito semelhante a isto...

Dim conn As String = "server=127.0.0.1;user id=root;password=;database=wiki_animal"
        Dim SQL As String = "SELECT imagem1,imagem2,imagem3,imagem4,imagem5, Nome_Cientifico,Nome_Animal,Classe,Origem,Habitat,Reproducao,Alimentacao,Tamanho,Peso,Outras_Informacoes WHERE ID = seguinte"
        ' Cria uma nova ligação à base de dados
        Dim connection As New MySqlConnection(conn)
        Dim command As New MySqlCommand(SQL, connection)
        Dim adapter As New MySqlDataAdapter(command)

        Dim dt As New DataTable
        Dim bs As New BindingSource

        adapter.fill(dt)
        bs.DataSource = dt

        TextBox13.DataBindings.Add("text", bs, "Nome_Cientifico")
        TextBox14.DataBindings.Add("text", bs, "Nome_Animal")
        '.... tu fazes o resto para as restantes só tens de mudar o nome do campo...

        'para te movimentares nos registos, deves meter cada um destes métodos associados a um botão se precisares deles é claro
        bs.MoveFirst()
        bs.MoveLast()
        bs.MoveNext()
        bs.MovePrevious()

'Só para saber quantos registos tens
        MsgBox(String.Concat("Numero Registos : ", bs.Count.ToString))

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.