• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vasco16

Inserir imagem numa aplicação vb.net

19 mensagens neste tópico

Boas pessoal tenho este código:

 Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        ' Define a Connection String
        Dim dbConn As OleDb.OleDbConnection = New OleDb.OleDbConnection()
        dbConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Bless - Gestão de Stands & Oficinas.mdb;"
       

        Try
            ' Cria um novo FileStream para leitura da imagem

            Dim fs As New IO.FileStream("C:\image.jpg", IO.FileMode.Open, IO.FileAccess.Read)

            ' Cria um array de Bytes do tamanho do FileStream 

            Dim ImageData(fs.Length() - 1) As Byte

            ' Lê os bytes do FileStream para o array criado

            fs.Read(ImageData, 0, ImageData.Length)

            ' Fecha o FileStream ficando a imagem guardada no array

            fs.Close()

            Using connection As New OleDb.OleDbConnection(dbConn.ConnectionString)



                ' Define o commando Transact-SQL para inserir dados

                Dim SQL As String = "INSERT INTO contacts ([matricula],[foto]) VALUES (@matricula,@foto);"

                Dim command As New SqlClient.SqlCommand(SQL, connection)



                ' Define os parametros para a inserção de dados, onde está o array 

                ' de bytes(imagem) a ser inserida. O tipo do campo é Image

                command.Parameters.Add("@matricula", SqlDbType.VarChar).Value = "jpaulino"

                command.Parameters.Add("@foto", SqlDbType.Image).Value = ImageData

                connection.Open()



                ' Insere os campos no SQL

                command.ExecuteNonQuery()




            End Using



        Catch ex As Exception

            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub

para alem de nao estar a fazer o que eu quero.. que é abrir uma caixa para localizar a imagem, este código esta-me a dar um erro no provider.. terei eu a fazer mal a ligação á BD? :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

A tua base de dados Acess e estas a usar o

Dim command As New SqlClient.SqlCommand(SQL, connection) que é para sql server

em vez de OleDb

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

A tua base de dados Acess e estas a usar o

Dim command As New SqlClient.SqlCommand(SQL, connection) que é para sql server

em vez de OleDb

entao em vez disso fica

Dim command As New Ole.OleCommand(SQL, connection)
?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim command As New OleDB.OleCommand(SQL, connection)

exacto só que agora devo estar a definir mal os parametros..

Dim SQL As String = "INSERT INTO contacts ([matricula],[foto]) VALUES (@matricula,@foto);"

                Dim command As New OleDb.OleDbCommand(SQL, connection)

                ' Define os parametros para a inserção de dados, onde está o array

                ' de bytes(imagem) a ser inserida. O tipo do campo é Image

                command.Parameters.Add("@matricula", OleDb.OleDbType.VarChar).Value = "jj"

                command.Parameters.Add("@foto", OleDb.OleDbType.Image).Value = ImageData

                connection.Open()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda se mal que pergunte... o acess permite blob's?

Objectos permite ... mas sinceramente também nunca usei.  :P

Fiz sempre em SQL.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois.... Oracle, Sql, mysql e outros sei que permite... agora access... sei que permite objectos, mas através daquele método de inserção bué estranho... agora... assim não fazia ideia...

De qualquer maneira... a forma de armazenar deve ser estranha porque as BD's crescem exponenciamente quando se usa esses métodos.

Quando trabalhava em access... utilizava sempre a path.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois.... Oracle, Sql, mysql e outros sei que permite... agora access... sei que permite objectos, mas através daquele método de inserção bué estranho... agora... assim não fazia ideia...

De qualquer maneira... a forma de armazenar deve ser estranha porque as BD's crescem exponenciamente quando se usa esses métodos.

Quando trabalhava em access... utilizava sempre a path.

Eu também não sei se dá ... logo se tiver tempo vou testar.

E também uso sempre o path.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exacto só que agora devo estar a definir mal os parametros..

devo ter de errado aqui :s da-me erro nos parametros..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

 command.Parameters.Add("matricula", OleDb.OleDbType.VarChar).Value = "jj"

command.Parameters.Add("foto", OleDb.OleDbType.Image).Value = ImageData

tenta assim, acho que o Access não leva com as "@"'s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas de qualquer maneira tu tens ai muita cena ainda em SQL server acho eu...

OleDb.OleDbType.Image

acho que isto no existe em access

continuo a achar que era melhor guardares apenas o link para a imagem e não a imagem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

continuo a achar que era melhor guardares apenas o link para a imagem e não a imagem...

Aqui também concordo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui também concordo!

mas isto vai ser para trabalhar em vários computadores...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

crias um ficheiro num servidor....normalmente em ambiente de rede à sempre uma unidade mapeada... ou entao crias isso tu.

da experiência que eu tenho e eu trabalho bastante com blob's em Oracle... só tem sentido quando há dispoersão geográfica das instalações...sendo tudo local... não há nada que chegue à utilização de paths para guardar ficheiros, até pk:

- é incomparavelmente mais rápido;

- não tens que criar nenhum mecanismo de controle de edição;

- não tens criar rotinas de upload e comparação dos files sempre que alguma coisa correr mal (por exemplo fechares o form, faltar a luz, ficares sem rede...)

Avalia todas estas variáveis antes de avançares....

além de que, não tenho a certeza que o access suporte o que queres fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relação ao uso de images no access.. sim funciona tal qual sql ... transforma a imagem num array de bytes e guardo no access como OLE Object.. e funciona .. se é a melhor solução isso já so depende das tuas necessidades ... Atenção se usares access no vb tens que trabalhar com comandos OLEDB e não SQLClient ...

0

Partilhar esta mensagem


Link 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