Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Claudio Neto

Imagem no VB do SQL

Recommended Posts

No SQLServer é possível criar colunas do tipo image, onde ele aloca o hexadecimal de cada imagem armazenada.Alguém sabe como fazer o VB abrir essa imagem. Há pouco vi que alguém postou como abrir uma imagem através do endereço da imagem, mas e através do código dela, como fazer?Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No SQLServer é possível criar colunas do tipo image, onde ele aloca o hexadecimal de cada imagem armazenada.Alguém sabe como fazer o VB abrir essa imagem. Há pouco vi que alguém postou como abrir uma imagem através do endereço da imagem, mas e através do código dela, como fazer?Obrigado.

Olha Claudio, não conheço o funcionamento do SQL Server, mas no Access há o campo OLE aonde é possível armazenar qualquer tipo de informação, inclusive imagem. Essa rotina que estou postando, inclui a imagem no banco de dados e a próxima retira e mostra em uma picturebox.Obs.: Use o File System Object (FSO) e estou admitindo que você já criou um recordset para seu tabela aonde a imagem deve ficar
Dim FSO As New FileSystemObjectDim strLOCAL As StringDim byARQUIVO() As Byte  Screen.MousePointer = vbHourglass  Erase bytARQUIVO()  ReDim bytARQUIVO(0)  strLOCAL = LocalAondeAImagemSeEncontra    If FSO.FileExists(strLOCAL) Then 'Verifica se o arquivo existe no disco	  Open strLOCAL For Binary As #1	  ReDim bytARQUIVO(LOF(1))	  Get #1, , bytARQUIVO()	  Close #1	Else	  Screen.MousePointer = vbDefault	  Erase bytARQUIVO()	  Exit Sub	End If  MeuRecordSet.AddNew	MeuRecordSet![ca_arquivo] = bytARQUIVO()  MeuRecordSet.Update  Screen.MousePointer = vbDefault  Erase bytARQUIVO()
Para recuparar a imagem do banco de dados Access
Dim byARQUIVO() As ByteDim sSQL As StringDim strTEMP  As  String  byARQUIVO()  =  MeuRecordset![ca_arquivo]  strTEMP = App.Path & "\Arq_TMP.tmp"  Open strTEMP For Binary As #1  Put #1, , byARQUIVO()  Form.Picturebox.Picture = LoadPicture(strTEMP)  Close #1
Bem, espero ter ajudado você em alguma coisa... :) Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça meu camarada ...Você tem que criar um campo do tipo BLOB ...Coloquei um exemplo de como utilizar este tipo de capo no topico Gravando arquivos campo BLOB - ORACLE Olhe este codigo e aplique para o SQL Server ...deve funcionar da mesma maneira ...um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No SQLServer é possível criar colunas do tipo image, onde ele aloca o hexadecimal de cada imagem armazenada.Alguém sabe como fazer o VB abrir essa imagem. Há pouco vi que alguém postou como abrir uma imagem através do endereço da imagem, mas e através do código dela, como fazer?Obrigado.

Olha Claudio, não conheço o funcionamento do SQL Server, mas no Access há o campo OLE aonde é possível armazenar qualquer tipo de informação, inclusive imagem. Essa rotina que estou postando, inclui a imagem no banco de dados e a próxima retira e mostra em uma picturebox.Obs.: Use o File System Object (FSO) e estou admitindo que você já criou um recordset para seu tabela aonde a imagem deve ficar
Dim FSO As New FileSystemObjectDim strLOCAL As StringDim byARQUIVO() As Byte  Screen.MousePointer = vbHourglass  Erase bytARQUIVO()  ReDim bytARQUIVO(0)  strLOCAL = LocalAondeAImagemSeEncontra    If FSO.FileExists(strLOCAL) Then 'Verifica se o arquivo existe no disco	  Open strLOCAL For Binary As #1	  ReDim bytARQUIVO(LOF(1))	  Get #1, , bytARQUIVO()	  Close #1	Else	  Screen.MousePointer = vbDefault	  Erase bytARQUIVO()	  Exit Sub	End If  MeuRecordSet.AddNew	MeuRecordSet![ca_arquivo] = bytARQUIVO()  MeuRecordSet.Update  Screen.MousePointer = vbDefault  Erase bytARQUIVO()
Para recuparar a imagem do banco de dados Access
Dim byARQUIVO() As ByteDim sSQL As StringDim strTEMP  As  String  byARQUIVO()  =  MeuRecordset![ca_arquivo]  strTEMP = App.Path & "\Arq_TMP.tmp"  Open strTEMP For Binary As #1  Put #1, , byARQUIVO()  Form.Picturebox.Picture = LoadPicture(strTEMP)  Close #1
Bem, espero ter ajudado você em alguma coisa... :) Abraço!
André, o Acess não armazena a imagem, somente o caminho até a imagem, já havia olhado esse post que você pôs.O SQL armazena o código hexadecimal da imagem (um monte de números e letras não se entende nada). Preciso saber como, no VB, "traduzo" esse código.Isso é oq não sei fazer.Postei a mesma coisa no Fórum SQL, alguém havia me dito que basta configurar as propriedades DataSource e DataMember do objeto imagem, mas somente isso não adiantou.Mas obrigado de qq forma.

Faça meu camarada ...Você tem que criar um campo do tipo BLOB ...Coloquei um exemplo de como utilizar este tipo de capo no topico Gravando arquivos campo BLOB - ORACLE Olhe este codigo e aplique para o SQL Server ...deve funcionar da mesma maneira ...um abraço.

André, só para tentar me facilitar a vida um pouco, já que vi seu código e não entendi muita coisa. Para que serve um campo do Tipo BLOB no oracle??Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este tipo de campo pode armazenar qualquer formato de arquivo , figuras , docs, pdf e etc ....COm certeza o SQL Server deve possuir esta opção....No access realmente nao existe esta opção...OKMe manda o seu examplo pro meu email para que eu possa dar uma olhada. ..andrerc80@gmail.comUm abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande eu to trabalhando desta forma!No bd você cria um campo Por exemplo "Foto" com o tipo de dado text pra evitar problemas de nao caber o caminho em outro tipo de dado.Dai na captura da imagem você ira utiliza commom dialog e um image e este codigo 'define o titulo do diálogo CdlAbrirFoto.DialogTitle = "Procurar Arquivos .jpg" 'define o caminho inicial CdlAbrirFoto.InitDir = App.Path 'define o filtro para exibir os arquivos Prop = "Arqs. jpg(*.jpg)|*.jpg" '|Todos " & "Arqs. (*.*)|*.*" CdlAbrirFoto.Filter = Prop CdlAbrirFoto.FilterIndex = 1 ' --------------------------------------------------------------------------- ' ' cdlOFNFileMustExist: selecionar somente arquivos que existam | ' cdlOFNHideReadOnly : exibe arquivos que possuem o atributo: Somente Leitura | ' cdlOFNLongNames : exibe nome de arquivos longos | ' cdlOFNExplorer : usa a interface estilo do Explorer | ' --------------------------------------------------------------------------- ' CdlAbrirFoto.Flags = cdlOFNFileMustExist + _ cdlOFNHideReadOnly + _ cdlOFNLongNames + _ cdlOFNExplorer 'dispara um erro se não for selecionado algo CdlAbrirFoto.CancelError = False CdlAbrirFoto.Flags = VbCCRGBInit CdlAbrirFoto.InitDir = "C:\" CdlAbrirFoto.ShowOpen Arquivo = CdlAbrirFoto.FileName ImgFoto.Picture = LoadPicture(Arquivo) ImgFoto.Stretch = True Txt(16).Text = CdlAbrirFoto.FileNameesta txt(16) esta linkada ao bd no campo foto então ela armazena o campo de onde esta a foto na maquina!Problema!Se o usuario apagar a imagem o programa ira ficar sem a imagem, prq no load e nos movimentos do bd você ira colocar este codigoImgFoto.Picture = LoadPicture(Txt(16).Text)prq na txt(16) q vai estar linkada, conforme tu anda nos registro ela altera a imagem do image!então la vai a dica!você provavelmente trabalha com app.path, certo?Senão é bom trabalhar com ele ou então mapeando a pasta do sistema!Dai você cria uma pasta onde esta o seu arquivo.vbp chamada fotosdai nos botoes alterar ou incluir você vai colocar este codigo If Txt(16).Text = Empty Then 'aqui é onde fica a imagem da foto certo Exit Sub 'se la estiver vazio é q o usuario nao puxou foto nenhuma, dai nao faz nada Else Nome = "U:\Fotos\" & Txt(0).Text & ".jpg" FileCopy Txt(16).Text, Nome End If'u é a minha unidade de rede aqui eu estou falando o novo caminho da foto e o nome delaa expressao filecopy é assimFilecopy "caminho origem", "Caminho destino"Só q como eu estou utilizando variaveis q podem se alternar você ira colocar sem "" saca!Desta forma o usuario pode fazer o q quiser com a foto depois, prq ele nao ira afetar o seu bd prq ela ficou armazenada em uma pasta do seu sistemablzaespero ter ajudado!abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande eu to trabalhando desta forma!No bd você cria um campo Por exemplo "Foto" com o tipo de dado text pra evitar problemas de nao caber o caminho em outro tipo de dado.Dai na captura da imagem você ira utiliza commom dialog e um image e este codigo 'define o titulo do diálogo CdlAbrirFoto.DialogTitle = "Procurar Arquivos .jpg" 'define o caminho inicial CdlAbrirFoto.InitDir = App.Path 'define o filtro para exibir os arquivos Prop = "Arqs. jpg(*.jpg)|*.jpg" '|Todos " & "Arqs. (*.*)|*.*" CdlAbrirFoto.Filter = Prop CdlAbrirFoto.FilterIndex = 1 ' --------------------------------------------------------------------------- ' ' cdlOFNFileMustExist: selecionar somente arquivos que existam | ' cdlOFNHideReadOnly : exibe arquivos que possuem o atributo: Somente Leitura | ' cdlOFNLongNames : exibe nome de arquivos longos | ' cdlOFNExplorer : usa a interface estilo do Explorer | ' --------------------------------------------------------------------------- ' CdlAbrirFoto.Flags = cdlOFNFileMustExist + _ cdlOFNHideReadOnly + _ cdlOFNLongNames + _ cdlOFNExplorer 'dispara um erro se não for selecionado algo CdlAbrirFoto.CancelError = False CdlAbrirFoto.Flags = VbCCRGBInit CdlAbrirFoto.InitDir = "C:\" CdlAbrirFoto.ShowOpen Arquivo = CdlAbrirFoto.FileName ImgFoto.Picture = LoadPicture(Arquivo) ImgFoto.Stretch = True Txt(16).Text = CdlAbrirFoto.FileNameesta txt(16) esta linkada ao bd no campo foto então ela armazena o campo de onde esta a foto na maquina!Problema!Se o usuario apagar a imagem o programa ira ficar sem a imagem, prq no load e nos movimentos do bd você ira colocar este codigoImgFoto.Picture = LoadPicture(Txt(16).Text)prq na txt(16) q vai estar linkada, conforme tu anda nos registro ela altera a imagem do image!então la vai a dica!você provavelmente trabalha com app.path, certo?Senão é bom trabalhar com ele ou então mapeando a pasta do sistema!Dai você cria uma pasta onde esta o seu arquivo.vbp chamada fotosdai nos botoes alterar ou incluir você vai colocar este codigo If Txt(16).Text = Empty Then 'aqui é onde fica a imagem da foto certo Exit Sub 'se la estiver vazio é q o usuario nao puxou foto nenhuma, dai nao faz nada Else Nome = "U:\Fotos\" & Txt(0).Text & ".jpg" FileCopy Txt(16).Text, Nome End If'u é a minha unidade de rede aqui eu estou falando o novo caminho da foto e o nome delaa expressao filecopy é assimFilecopy "caminho origem", "Caminho destino"Só q como eu estou utilizando variaveis q podem se alternar você ira colocar sem "" saca!Desta forma o usuario pode fazer o q quiser com a foto depois, prq ele nao ira afetar o seu bd prq ela ficou armazenada em uma pasta do seu sistemablzaespero ter ajudado!abraços!

Cara, eu agradeço mesmo sua atenção, mas não é isso que estou procurando, se ler as mensagens acima verá que já haviam postado com eu devo fazer se for pelo caminho da foto, mas infelizmente não é o que quero.No SQL, as figuras são armazenadas pelo seu código hexadecimal, e oq preciso é "traduzir" esse código no vb para que as imagens apareçam.

Este tipo de campo pode armazenar qualquer formato de arquivo , figuras , docs, pdf e etc ....COm certeza o SQL Server deve possuir esta opção....No access realmente nao existe esta opção...OKMe manda o seu examplo pro meu email para que eu possa dar uma olhada. ..andrerc80@gmail.comUm abraço

Na verdade não tenho nenhum modelo, a única coisa que tentei foi configurar as propriedades DataSource e DataMember do objeto image.Mas caso isso te ajude, essa é a forma como o SQL armazena as imagens:0x433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F722E444253455256455230315C4D7920446F63756D656E74735C4D792050696374757265735C67616EE76F73Esse é o código hexadecimal de uma imagem que coloquei como teste.Tem alguma idéia de com eu "traduzo" isso?Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.