Guest - mizzu - Postado Abril 13, 2005 Denunciar Share Postado Abril 13, 2005 Uso o banco de dados do Accesstenho uma tabela de produtos e preciso colocar uma fotoem cada produto.Qual o comando em VB para inserir a foto no produto.Ex. Estou incluindo o produto, quando chega para incluir a fotonão sei o comando, o campo image1 já está definido.Grato. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kalel Postado Abril 13, 2005 Denunciar Share Postado Abril 13, 2005 Olá aqui vai o codigo que eu usei para salvar fotos de clientes dentro do meu cadastro.Olá aqui vai o codigo para salvar imagens dentro de um campo do Access.'Copie o texto integralmente e cole-o'em um módulo .BAS novo. Será mais'Fácil de entender já na IDE do VB.'Não é necessário remover os remarks.'Para salvar a imagem no campo adequado,'tipo OLEDB(MS-Access) ou BLOB(Oracle) ou IMAGE(SQL SERVER),'basta utilizar-se da função abaixo (é uma das formas, não a única).'Não a utilize ainda, apenas leia e procure entender o'funcionamento.'Public Function SalvaImagem(ByRef oTabela As ADODB.Recordset, ByVal CampoImagem As String, ByVal ArquivoImagem As String) As Boolean''Parâmetros obrigatórios:'' - oTabela = Objeto Recordset aberto e em uso, onde deverá ser gravada a imagem.'' - CampoImagem = Var. String, com o nome do campo onde a imagem deve ser armazenada.'' - ArquivoImagem = Var. String, com o caminho e o nome do arquivo de imagem á ser salva.''Retornos: True/False, indicando sucesso ou falha na gravação do campo.'On Error GoTo SIErr:'Dim lRet As Boolean 'variável para retorno'Dim oStream As ADODB.Stream 'variável para o Stream da imagem (algo como "imagem de arquivo em memória")'lRet = True 'vai funcionar, retorna verdadeiro'Set oStream = New ADODB.Stream 'instancia a var. do Stream (cria instância ativa)'With oStream' .Type = adTypeBinary 'tipo da leitura, para campos Image/BLOB/OLEDB deve ser binário' .Open 'abre arquivo (memória)' .LoadFromFile ArquivoImagem 'carrega desde o arquivo físico' oTabela.Fields(CampoImagem).Value = .Read 'atribui o conteúdo ao campo passado como referência' oTabela.Update 'salva a informação.' .Close 'e fecha o arquivo, para permitir que seja eliminado, claro.'End With'GoTo SIExit: 'se chegou até aqui, ok.'SIErr:'MsgBox Err.Description 'mostra erro - desnecessário, se você tratar o retorno da função.'Err.Clear 'limpa a matriz de erros'lRet = False 'retorna falso'SIExit:'SalvaImagem = lRet 'Envia o retorno da função'Set oStream = Nothing 'limpa a instância ativa, eliminando o espaço ocupado pela variável.'lRet = Empty 'idem, para a var. de retorno.'End Function'Essa outra função permite carregar a imagem desde o campo da tabela e'salvá-la em um arquivo (molezinha, nem vou comentar).'Public Function CarregaImagem(ByRef oTabela As ADODB.Recordset, ByVal CampoImagem As String, ByVal ArquivoImagem As String) As Boolean'On Error GoTo CIErr:'Dim oStream As ADODB.Stream'Dim lRet As Boolean'Set oStream = New ADODB.Stream'lRet = True'With oStream' .Type = adTypeBinary' .Open' .Write oTabela.Fields(CampoImagem)' .SaveToFile ArquivoImagem'End With'GoTo CIExit:'CIErr:'MsgBox Err.Description'Err.Clear'lRet = False'CIExit:'SalvaImagem = lRet'Set oStream = Nothing'lRet = Empty'End Function'Agora, vamos caprichar um pouco mais?'As duas funções acima tem sintaxe bastante similar.'O que está variando é apenas a direção na qual a'imagem "viaja". Oras, vamos criar uma função só,'que faça ambos os trabalhos, certo?'Para isso, seria interessante acrescentar mais'um parâmetro, a direção, ok? Esse parâmetro,'para facilitar o uso da função, vamos defini-lo'em uma enumeração pública eDireção. Aproveitando a'"deixa", vamos implementar uma função extra, mais'adiante.'Mãos á obra?'Teremos então, no módulo BAS, a seguinte aparência'final, talvez:Public Function TrataImagem(ByRef oTabela As ADODB.Recordset, ByVal CampoImagem As String, ByVal ArquivoImagem As String, Direção As String) As BooleanOn Error GoTo CIErr:Dim oStream As ADODB.StreamDim lRet As BooleanSet oStream = New ADODB.StreamlRet = TrueWith oStream .Type = adTypeBinary .Open If Direção = "[Arquivo Para Campo]" Then .LoadFromFile ArquivoImagem oTabela.Fields(CampoImagem).Value = .Read oTabela.Update .Close 'Kill ArquivoImagem ElseIf Direção = "[Campo Para Arquivo]" Then .Write oTabela.Fields(CampoImagem) .SaveToFile ArquivoImagem 'Kill ArquivoImagem End IfEnd WithGoTo CIExit:CIErr:MsgBox Err.DescriptionErr.ClearlRet = FalseCIExit:TrataImagem = lRetSet oStream = NothinglRet = EmptyEnd Function'Para ampliar as possibilidades, nem sempre'queremos que a imagem seja trabalhada como arquivo'físico, uma vez que eventualmente precisamos'mostrá-la em uma tela, em uma célula do'MSFlexiGrid, em um relatório ou qualquer outro'objeto gráfico. Para essa tarefa, a função á'seguir adapta a anterior ás novas necessidades.'Estou usando o PictureBox, pois é o controle básico'de imagens do próprio VB. Você pode adaptá-lo para'que aceite vários outros controles, desde que'possuam um dispositivo de contexto compatível,'como um imagelist, um CellPicture etc.Public Function LigaImagem(ByRef oTabela As ADODB.Recordset, ByVal CampoImagem As String, ByVal ArquivoImagem As String, Direção As String, ByRef ObjetoGráfico As Image) As Boolean On Error GoTo CIErr:If ObjetoGráfico Is Nothing Then Exit FunctionDim oStream As ADODB.StreamDim lRet As BooleanSet oStream = New ADODB.StreamlRet = TrueWith oStream .Type = adTypeBinary .Open If Direção = "[Controle Para Campo]" Then SavePicture ObjetoGráfico.Picture, ArquivoImagem .LoadFromFile ArquivoImagem oTabela.Fields(CampoImagem).Value = .Read oTabela.Update .Close 'Kill ArquivoImagem ElseIf Direção = "[Campo Para Controle]" Then .Write oTabela.Fields(CampoImagem) .SaveToFile ArquivoImagem Set ObjetoGráfico.Picture = LoadPicture() Set ObjetoGráfico.Picture = Nothing Set ObjetoGráfico.Picture = LoadPicture(ArquivoImagem) ObjetoGráfico.Refresh .Close 'Kill ArquivoImagem End IfEnd WithGoTo CIExit:CIErr:MsgBox Err.DescriptionErr.ClearlRet = FalseCIExit:LigaImagem = lRetSet oStream = NothinglRet = EmptyEnd Function'E, para finalizar, os exemplos de uso de ambas as funções, certo?'======================================================='Usando o Microsoft ADO 2.5 ou acima, ok?'=======================================================' - No corpo do sistema, em um módulo (.bas), como uma var.'global ou pública, você já deve ter um objeto ADODB.Connection.'Como padrão, a Microled costuma usar DB para essa variável,'então vamos adotá-la.'Option Explicit'...'Public DB As ADODB.Connection'...'No módulo/formulário onde os dados da tabela serão tratados,'o correto é que um ADODB.Recordset seja criado como Private'Private oRS As ADODB.Recordset'...blá, blá, blá...'oRS.Open "SELECT CAMPO00, CAMPO01, CAMPO02, CAMPO03 FROM ESQUEMA.TABELA WHERE CONDIÇÕES ORDER BY ORDEM", DB, adOpenDynamic, adLockOptimistic'...blá, blá, blá...'Private Sub Form_Load()'Dim oRS As ADODB.Recordset''Abrindo o recordset em modo de edição...'oRS.Open "SELECT CAMPO00, CAMPO01, CAMPO02, CAMPO03 FROM ESQUEMA.TABELA WHERE CONDIÇÕES ORDER BY ORDEM", DB, adOpenDynamic, adLockOptimistic''Carregando a imagem em um PictureBox:'If LigaImagem(oRS, "CAMPO03", "C:\Temp\TmpFile.~mp", [Campo Para Controle], Me.Picture1) = True Then' MsgBox "Imagem carregada sem erros"'Else' MsgBox "Falha ao carregar a imagem"'End If''ou...'X = "C:\Temp\TmpFile.~mp"'Y = "CAMPO03"'If LigaImagem(oRS, Y, X, [Campo Para Controle], Picture1) = True Then' MsgBox "Imagem carregada sem erros"'Else' MsgBox "Falha ao carregar a imagem"'End If''...''Salvando um arquivo de imagem no campo:'If TrataImagem(oRS, "CAMPO03", "X:\NetUse\GraphicFolder\Shared\Imagem35.bmp", [Arquivo Para Campo]) = True Then' MsgBox "Arquivo 'X:\NetUse\GraphicFolder\Shared\Imagem35.bmp' salvo co sucesso."'Else' MsgBox "Não foi possível salvar o Arquivo 'X:\NetUse\GraphicFolder\Shared\Imagem35.bmp'."'End If''ou...'X = "X:\NetUse\GraphicFolder\Shared\Imagem35.bmp"'Y = "CAMPO03"'If TrataImagem(oRS, Y, X, [Arquivo Para Campo]) = True Then' MsgBox "Arquivo '" & X & "' salvo co sucesso."'Else' MsgBox "Não foi possível salvar o Arquivo '" & X & "'."'End If'End Sub----- // -----------oRs.Open "SELECT Codigo,Nome,DataInclusao,Endereco,CEP,Bairro,Cidade,UF,Fone,RG,CPF,Imagem FROM Clientes WHERE Codigo = " + txtCodigoCliente, oCo, adOpenDynamic, adLockOptimisticSavePicture imgFoto.Picture, "arquivo.tmp"PATH_IMAGEM = "arquivo.tmp"If TrataImagem(oRs, "Imagem", PATH_IMAGEM, "[Arquivo Para Campo]") = True Then MsgBox "Arquivo salvo com sucesso."Else MsgBox "Não foi possível salvar o Arquivo."End IfKill "arquivo.tmp"oCo.CommitTrans Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest - mizzu -
Uso o banco de dados do Access
tenho uma tabela de produtos e preciso colocar uma foto
em cada produto.
Qual o comando em VB para inserir a foto no produto.
Ex. Estou incluindo o produto, quando chega para incluir a foto
não sei o comando, o campo image1 já está definido.
Grato.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.