GRAVAR IMAGEM NO CAMPO DO TIPO VARBINARY.
Amigos, eu já Gravo e Leio Imagem no Campo do Tipo [Ô]image[Ô], mais naum sei como Grava e Lêr no do tipo [Ô]varbinary[Ô].
Motivo: Eu trabalho com o SQL-Sever e nele utilizo uma Tigger para Log de Banco, mais a Tigger naum suporta do tipo [Ô]image[Ô], ja consultei na net e o q và em todos os tópicos que encontrei é que eu tenho q muda para o tipo [Ô]varbinary[Ô], fiz isso diretamente dentro do banco, e deu certo, os dados já existentes foram convertidos sem problema, adicionei na minha Tigger o campo do tipo [Ô]varbinary[Ô] e esta funcionando direitinho, e ate a consulta pelo sistema esta funcionando, só que quando vou grava uma nova imagem, naum funciona da incompatibilidade de tipo.
Aki vai o código q utilizo para grava a imagem.
Function SalvaImagem(xID As String) As Boolean
Dim oTabela As ADODB.Recordset
Set oTabela = New ADODB.Recordset
oTabela.Source = [Ô]Select * from [Ô] & xTabelaSecundaria & [Ô] where ID =[ô][Ô] & xID & [Ô][ô][Ô]
oTabela.Open , cn, adOpenDynamic, adLockOptimistic
[ô]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 xCaminhoArquivo [ô]carrega desde o arquivo fÃsico
oTabela.Update
oTabela.Fields([Ô]imagem[Ô]).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
ESTE CÓDIGO FUNCIONA PERFEITAMENTE PARA O CAMPO DO TIPO [Ô]IMAGE[Ô], MAIS DA INCONSISTÊNCIA NO TIPO [Ô]VARBINARY[Ô].
ENTAO AMIGOS ALGUEM TEM ALGUMA IDéIA DE COMO FAÇO ISSO?
Motivo: Eu trabalho com o SQL-Sever e nele utilizo uma Tigger para Log de Banco, mais a Tigger naum suporta do tipo [Ô]image[Ô], ja consultei na net e o q và em todos os tópicos que encontrei é que eu tenho q muda para o tipo [Ô]varbinary[Ô], fiz isso diretamente dentro do banco, e deu certo, os dados já existentes foram convertidos sem problema, adicionei na minha Tigger o campo do tipo [Ô]varbinary[Ô] e esta funcionando direitinho, e ate a consulta pelo sistema esta funcionando, só que quando vou grava uma nova imagem, naum funciona da incompatibilidade de tipo.
Aki vai o código q utilizo para grava a imagem.
Function SalvaImagem(xID As String) As Boolean
Dim oTabela As ADODB.Recordset
Set oTabela = New ADODB.Recordset
oTabela.Source = [Ô]Select * from [Ô] & xTabelaSecundaria & [Ô] where ID =[ô][Ô] & xID & [Ô][ô][Ô]
oTabela.Open , cn, adOpenDynamic, adLockOptimistic
[ô]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 xCaminhoArquivo [ô]carrega desde o arquivo fÃsico
oTabela.Update
oTabela.Fields([Ô]imagem[Ô]).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
ESTE CÓDIGO FUNCIONA PERFEITAMENTE PARA O CAMPO DO TIPO [Ô]IMAGE[Ô], MAIS DA INCONSISTÊNCIA NO TIPO [Ô]VARBINARY[Ô].
ENTAO AMIGOS ALGUEM TEM ALGUMA IDéIA DE COMO FAÇO ISSO?
SERà Q NINGUEM AKI DO VBMANIA, NAUM SABE ME DA UMA EXPLICAÇÃO SOBRE ISSO?
Amigos de VBMANIA, pelo menos me fale se isso que eu estou querendo é possivel, pq se naum for possivel eu naum vou quebrar mais minha kbça, agora se for, vou ter q resolver!!!.
POR FAVOR ALGUEM!!!
POR FAVOR ALGUEM!!!
Deixa eu te pergunta.r. qual é o banco de dados que vc ta usando? porque voce nao deixa o campo como tipo blob?????
AMIGO O BANCO é SQL-SERVER COM OEU JA HAVIA FALADO ANTES, E O TIPO BLOB, ESSE TIPO NAUM EXISTE NO BANCO A VERSÃO é A 2000, AINDA ESTOU MIGRANDO PARA A 2008, E COMO NAUM POSSO FAZER TUDO DE UMA SÓ VEZ, AINDA UTILIZO O 2000, O TIPO VERBINARY é O UNICO QUE PODE ME AJUDAR.
VALEU O TOQUE ANGEL, MAIS INFELIZMENTE NAUM ME AJUDA, MESMO ASSIM AGRADEÇO O ESFORÇO.
VALEU O TOQUE ANGEL, MAIS INFELIZMENTE NAUM ME AJUDA, MESMO ASSIM AGRADEÇO O ESFORÇO.
Me desculpe amigo, realmente nao cheguei a ler que era sql-server, eu nao trabalho com sql, somente mysql e oracle.. mas.. boa sorte.. rsrs.. vou ver com uns amigos meus..
Ok Amigo Angel, mais uma vez Agradeço sua Ajuda!!!
Tópico encerrado , respostas não são mais permitidas