Entre para seguir isso  
Seguidores 0

Imagem

2 posts neste tópico

Postado

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

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 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

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 If

End With

GoTo CIExit:

CIErr:

MsgBox Err.Description

Err.Clear

lRet = False

CIExit:

TrataImagem = lRet

Set oStream = Nothing

lRet = Empty

End 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 Function

Dim oStream As ADODB.Stream

Dim lRet As Boolean

Set oStream = New ADODB.Stream

lRet = True

With 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 If

End With

GoTo CIExit:

CIErr:

MsgBox Err.Description

Err.Clear

lRet = False

CIExit:

LigaImagem = lRet

Set oStream = Nothing

lRet = Empty

End 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, adLockOptimistic

SavePicture 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 If

Kill "arquivo.tmp"

oCo.CommitTrans

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0