Ir para conteúdo


Imagem


1 resposta neste tópico

#1 --- mizzu - --

--- mizzu - --
  • Visitantes

Postado 13 April 2005 - 08:22 AM

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.

#2 kalel

kalel
  • Membros
  • 16 posts

Postado 13 April 2005 - 11:15 AM

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



Responder



  


0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos