Ir para conteúdo


- - - - -

ComboBox/PictureBox


  • Por favor inicie sessão para responder
15 respostas a este tópico

#1 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 08 de Junho de 2011 - 11:20

Bom dia a todos =]

Queria-vos pedir aqui uma ajuda para uma coisa que estou a desenvolver...

Então é assim, eu tenho um sistema de login um pouco diferente daquele que estou habituado a fazer.

O que eu tenho é um form com uma PictureBox, uma comboBox e uma textBox.

Se escolher o nome na combobox, gostava que aparecesse a fotografia na picturebox, mas não estou a conseguir fazer isso, eu pensei em criar um SELECT no evento da comboBox_SelectedIndexChanged e meti o seguinte código:

Código (vb.net):
Dim sqlStrr = "SELECT Fotografia FROM dbo.Tbl_User WHERE Nome = '" & Me.ComboBox1.SelectedItem.ToString() & "'"

        Dim sqlComm2 As New SqlClient.SqlCommand(sqlStrr, sqlDB)

        sqlDB.Open()
        Dim reader = sqlComm2.ExecuteReader()

        While reader.Read
            PictureBox1.Image = Image.FromFile()' Aqui estava a meter uma coisa de outro site, mas não consegui perceber como se fazia =X
        End While
        sqlDB.Close()
    End Sub

Se alquém me puder ajudar, agradecia ;)

Cumpz...

#2 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 08 de Junho de 2011 - 12:35

Boas.

Guardas a imagem na BD??

Ou guardas a imagem numa pasta e na BD, apenas guardas o caminho para a imagem?

#3 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 08 de Junho de 2011 - 13:04

Eu meti para ela guardar na BD, mas agr é que me lembrei que pode ser esse o problema, eu quando vou ver o conteudo na tabela aparece no campo Fotografia (que é a imagem) um texto  dzr 0x =X

Sbs o que é isso?

Qual é que  conselhas mais?

Guardar na BD ou numa pasta ligada à app?

Obrigado =]

Cumpz

#4 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 08 de Junho de 2011 - 13:53

Guardar na BD tem a vantagem de que basta pegar no Ficheiro da BD, que está la tudo dentro.

A desvantagem é que fica um ficheiro muito grande, e se tivermos necessidade de passar a BD de um lado para o outro, temos que passar as fotos todas, pois estão incorporadas.

Guardar as imagens numa pasta e guardar a localização na BD, é o Inverso. Temos que pegar na BD e na pasta das imagens

Mas se precisarmos de mudar apenas a BD, já é um ficheiro muito mais leve

Partindo do principio que já conseguiste guardar a imagem na BD em Binario, para ler basta fazer assim

Código (vb.net):
Dim foto() As Byte = x.Item("Foto") 'valor que vem da BD
Dim foto_stream As New System.IO.MemoryStream(foto)
PictureBox1.Image = Image.FromStream(foto_stream)


#5 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 08 de Junho de 2011 - 14:31

A minha forma de registar é esta:

Código (vb.net):
Dim sqlStr = "INSERT INTO dbo.Tbl_User (Nome, Password, Fotografia, Nivel ) VALUES ('" & Me.TextBox1.Text & "', '" & Me.TextBox2.Text & "', '" & Me.PictureBox1.ImageLocation & "', '" & Nivel & "' )"

        Dim sqlComm As New SqlClient.SqlCommand(sqlStr, sqlDB)

        sqlDB.Open()
        Dim Inserir = sqlComm.ExecuteNonQuery
        sqlDB.Close()
       
        If Inserir Then
            MsgBox("Registo Inserido com Sucesso!", MsgBoxStyle.Information, "Sucesso")
        Else
            MsgBox("Falha na tentativa de Registo!", MsgBoxStyle.Information, "Erro")
        End If

Não sei se é a mais correcta ou não =X

Se me puderes ajudar =]

#6 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 08 de Junho de 2011 - 14:34

O que estas a fazer é a guardar na BD a localização da imagem que está na PictureBox

Nesse caso, para apresentar a imagem, basta fazer

Código (vb.net):
PictureBox1.Image = image.fromFile(x.item("Foto"))


#7 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 08 de Junho de 2011 - 14:40

Mas este código meto a substituir o do picturebox.imagelocation?

#8 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 08 de Junho de 2011 - 15:05

Onde é que declaras o x?

#9 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 08 de Junho de 2011 - 15:11

O PictureBox1.Image = image.fromFile(x.item("Foto")) é para mostrares a imagem que está guardada na BD.

O x foi a variavel que eu criei para ler os dados

dim x as sqldatareader = sqlComm.Executereader e o "foto" e o nome da tabela

Ou seja cria um leitor com os resultados da consulta e vai ler o item onde o nome da tabela seja Foto

#10 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 09 de Junho de 2011 - 09:51

Boas tudo bem?

André estive a ver o teu código mas não consigo fazer com que ela apareça =X

Não sei se me ti o código no sitio certo, eu meti no load do formulário que vai fazer o login...

É esse o correcto?

Obrigado desde já =)

#11 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 09 de Junho de 2011 - 09:56

Boas

Podes meter onde quiseres.

Apenas tens de ir buscar a localização da imagem à BD.
Estás a guardar na BD apenas a localização da imagem, em formato string?
Ou como é que estas a guardar na BD? Qual o tipo do campo da BD (varchar, byte,...)

BTW, se continuares a não conseguir, mostra o código que não está a funcionar

#12 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 09 de Junho de 2011 - 11:50

O tipo de campo na BD e image =X

Eu vou meter código de como estou a inseri-la, para ir buscar estou a usar o select mas de certeza que falta mais qualquer coisa =X

Eis o código de Inserir:

Código (vb.net):
Dim sqlStr = "INSERT INTO dbo.Tbl_User (Nome, Password, Fotografia, Nivel ) VALUES ('" & Me.TextBox1.Text & "', '" & Me.TextBox2.Text & "', '" & Me.PictureBox1.ImageLocation & "', '" & Nivel & "' )"

        Dim sqlComm As New SqlClient.SqlCommand(sqlStr, sqlDB)

        sqlDB.Open()
        Dim Inserir = sqlComm.ExecuteNonQuery
        sqlDB.Close()
       
        If Inserir Then
            MsgBox("Registo Inserido com Sucesso!", MsgBoxStyle.Information, "Sucesso")
            Login.ComboBox1.Items.Add("Nome")
        Else
            MsgBox("Falha na tentativa de Registo!", MsgBoxStyle.Information, "Erro")
        End If

O código do select:

Código (vb.net):
Dim sqlStr = "SELECT Fotografia FROM dbo.Tbl_User WHERE Nome = '" & Me.ComboBox1.Text & "'"
        'MsgBox(sqlStr, MsgBoxStyle.OkOnly, "verificação de query")

        sqlDB.Open()
        Dim sqlComm As New SqlClient.SqlCommand(sqlStr, sqlDB)

        Dim reader = sqlComm.ExecuteReader()
        While reader.Read
            Nome = reader(0)
        End While

        sqlDB.Close()
 

O que eu também queria fazer era ligar de uma maneira a combobox para que quando eu registasse na BD um novo user, na combobox aparecesse o nome que eu tinha registado =X

Se me puderem ajudar =]

#13 Caça

Caça

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 4942 mensagens

Publicado 09 de Junho de 2011 - 11:52

Ver MensagemElrosnum, em 09 de Junho de 2011 - 11:50, disse:

O tipo de campo na BD e image =X

E estás a guardar lá uma string???
Altera para texto.

#14 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 09 de Junho de 2011 - 11:54

O formato do campo fotografia?

#15 Elrosnum

Elrosnum

    void

  • Membro
  • PipPip
  • 82 mensagens

Publicado 09 de Junho de 2011 - 11:55

Já alterei =]

#16 Andrepereira9

Andrepereira9

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1068 mensagens

Publicado 09 de Junho de 2011 - 13:00

Conforme o @Caça disse, estavas a guardar um localização da imagem que é texto num campo para imagens. Por isso é que não dava.

Citar

O que eu também queria fazer era ligar de uma maneira a combobox para que quando eu registasse na BD um novo user, na combobox aparecesse o nome que eu tinha registado =X

Podes. Depois de inserires o novo user, voltas a ler os dados da Bd e preenches novamente a combobox