USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Trabalhar com imagens no BD
Caruaru
PIRACICABA
SP - BRASIL
ENUNCIADA !
Postada em 08/10/2004 01:20 hs            
OI!!!
Desenvolvi vários soft´s na área contábil e comercial, e agora quero colocar fotos de funcionários, produtos, vendedores, etc. nos cadastros.
Devido a uma peculiaridade da lógica utilizada nos sistemas, não posso utilizar as propriedades DATA FIEL, DATA SOURCE, etc.
Apos os preenchimentos dos campos, envio os dados a uma procedure e lá eu mando as informações para o BD mais ou menos desta forma:
10      Formulario!DtVendedor.Recordset.Fields("nome") = UCase(Formulario!TxVenNom.Text)
20      Formulario!DtVendedor.Recordset.Fields("código") = UCase(Formulario!TxVenCod.Text)
30      Formulario!DtVendedor.Recordset.Fields("cpf") = UCase(Formulario!TxVenCpf.Text)
40      Formulario!DtVendedor.Recordset.Fields("rg") = UCase(Formulario!TxVenRg.Text)
Mas não consigo gravar as fotos desta forma, pois não sei como transformar a imagem que está no IMAGEBOX (que é colada de outro soft ou direto da máquina digital) em binário para poder enviar para BD. e tambem não tenho ideia de como fazer quando ler esta informação binária para poder prencher o campo da imagem. a lógica que utilizo para ler os dados do BD e enviar para os campos é mais ou menos assim:
10      Formulario!TxVenNom.Text = Formulario!DtVendedor.Recordset.Fields("nome").Value
20      Formulario!TxVenCod.Text = Formulario!DtVendedor.Recordset.Fields("código").Value
30      Formulario!TxVenCpf.Text = Formulario!DtVendedor.Recordset.Fields("cpf").Value
40      Formulario!TxVenRg.Text = Formulario!DtVendedor.Recordset.Fields("rg").Value
Como falei antes, devido a peculiaridades da lógica utilizada, não posso mudar este envio/recebimento de dados.
Já tentei com campos OLE, picturebox, imagebox, etc. mas na hora de enviar para o bd, não consegui transformar em binário.
Uma outra tentativa utilizada, foi gravar as fotos em uma pasta separada, o que achei muito estranho, pois seria mais interessante um bando de dados com todas as informações (inclusive as imagens). Mas tive outro problema: o VB grava as imagens em formato BMP, o que as torna imensas (Entre 1 a 3 mega) e impossibilita um cadastro de produtos com mais de 4000 intens como acontece com a maioria de meus clientes (supermercados, casas de importação, farmacias, etc). Quando as mesmas imagens são transformadas em JPG, elas não passam de 100 Kb de tamanho.O comando utilizado para gravar a imagem do imagebox para um arquivo (cada foto, um arquivo...) e mais ou menos assim:
210     SavePicture Formulario!TxVenFoto, DriveTrabalho + "Arquivos de programasDown_Upsdados" + Viniciais + "fotosVendedores" + Formulario!TxVenCod + ".bmp"
O comando utilizado para ler a imagem do imagebox para um arquivo (cada foto, um arquivo...) e mais ou menos assim:
210     Formulario!TxVenFoto.Picture = LoadPicture(DriveTrabalho + "Arquivos de programasDown_Upsdados" + Viniciais + "fotosVendedores" + Formulario!TxVenCod + ".bmp")
Se eu mudar a extensao para JPG, ele funciona, mas o tamanho do arquivo continua como se fosse um BMP.
As pergunta são:
01. Como converter uma imagem para binário, para poder gravar ela junto com o restante dos dados no BD?
02. Como "desconverter" essa imagem na hora de ler o BD?
03. Como fazer para quando gravar uma imagem atraves do comando SAVEPICTURE, a imagem ser gravada no formato JPG?
Obrigado.
Marcelo Silva
Down Up´s Sistemas
marcelosilva@yahoo.com
ICQ 138586977

 
   
Caruaru
não registrado
ENUNCIADA !
Postada em 09/10/2004 20:20 hs   
Tambem tentei a seguinte forma:
 
Abaixo seguem as funções que armazenam e lêem as imagens:
Public Sub GetPicture(f As Field, pic As Control)
Dim x() As Byte
Dim ff As Integer
Dim strArqTemp As String
strArqTemp = "c:     emppic.bmp"
ff = FreeFile
Open strArqTemp For Binary Access Write As ff
x() = f.GetChunk(0, f.FieldSize)
Put ff, , x()
Close ff
pic.Picture = LoadPicture(strArqTemp)
Kill strArqTemp
End Sub
Public Sub LetPicture(f As Field, pic As Control)
Dim x() As Byte
Dim n As Long
Dim ff As Integer
Dim strArqTemp As String
ff = FreeFile
strArqTemp = "c:     emppic.bmp"
SavePicture pic.Picture, strArqTemp
Open strArqTemp For Binary Access Read As ff
n = LOF(ff)
If n Then
ReDim x(n)
Get ff, , x()
f.AppendChunk x()
Close ff
End If
Kill strArqTemp
End Sub
Primeiro você terá que armazenar a imagem no banco de dados no formato em que ele consiga reconhecer, pra isso use:
rec.AddNew
LetPicture rec("Figura"), Picture1
'rec("OutroCampo") = outrovalor...
rec.Update
Já para a leitura do registro use:

GetPicture rec("Figura"), Picture1
onde rec("Figura") é o recordset que contém a figura.
Mas o tamanho da imagem no BD ficou em cerca de 4 megabytes!!!! o tamanho original dela em jpg, é de 78 Kbytes...
 
ninguem tem ideia de como fazer para reduzir o tamanho da imagem??? ou na gravação da propria via VB ou na gravação da mesma no BD
   
Caruaru
PIRACICABA
SP - BRASIL
ENUNCIADA !
Postada em 17/10/2004 22:13 hs            
ninguem pode me ajudar????
   
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 17/10/2004 23:33 hs            
Uma dica muito interessante é vc fazer deste modo...
Na estrutura do se BD crie em uma tabela um campo q contenha o caminho dos arquivos das fotos q vc quer colocar, do tipo texto (String).
Exemplo:
 
path_fotos TEXT(50)
 
Como tinha dito, neste campo vc vai grava registros do caminho das fotos por exemplo "C:SistemaFoto1.JPG"
 
Na tela adicione um objeto Image. Pra foto ficar do tamanho do objeto Image q vc dimensionou coloque a propriedade Stretch = True.
 
Aí fica fácil!Emoções. Para carregar as fotos vc coloca assim por exemplo:
 
10      Formulario!Image.Picture = LoadPicture(Formulario!DtVendedor.Recordset.Fields("path_fotos").Value) 'Carrega a foto de acordo com o nome do arquivo gravado no BD
 
Lembre-se q o campo "path_fotos", citado no exemplo acima, tem q ter o caminho completo, com o nome do arquivo certinho!! (C:Sistemafoto.JPG)
 
Deste modo vc também economiza em espaço. MAS Q BELEZA! Emoções
 
Enquanto a converter imagens tem uma boa e má notícia... o mspaint do windows salva uma imagem *.bmp para *.jpg  Se vc tiver um meio fácil de fazer isso....
 
OK? Qq problema é só falar...
 
t+
 
obs.: Acho q tinha uma dica pronta sobre isso no site mas não achei.... Emoções
TÓPICO EDITADO
 
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
ENUNCIADA !
Postada em 18/10/2004 00:21 hs            
Vixi.... agora q eu entendi melhor a sua dúvida parece q eu escrevi um monte de coisa q vc já sabia... desculpa pela falta de atenção Emoções...
 
Bom só q tenho uma boa notícia!! Emoções
É possível converter um arquivo *.BMP para *. JPG através do VB mesmo...
Peguei uma dica do colega Josefh Hennyere
ela está aqui :
 
 
Só q dei uma modificada pra ficar mais fácil, desculpa ae Josefh:
 
Sub Rename(arq_velho As String, arq_novo As String)
 
'Exemplo da instrução Name
'Este exemplo usa a instrução Name para renomear um arquivo. Para este exemplo, suponha que os diretórios ou pastas especificados já existem. No Macintosh, “HD:” é o nome da unidade padrão e as partes do nome do caminho são separadas por dois pontos em vez de barras invertidas.
 
Dim OldName, NewName
OldName = arq_velho: NewName = arq_novo     ' Definir nomes de arquivos.
Name OldName As NewName    ' Renomear arquivo.
 
End Sub
 
para chamar use:
 
Call Rename("C:arquivo.bmp", "C:arquivo.jpg")
 
Acho q ajuda bastante... se vc puder salvar uma foto do imagebox ou da máquina em *.bmp vc pode converter pra *.jpg e usar a idéia q te dei acima... mesmo se o imagebox ou a máquina gravar em outro tipo de arquivo vc pode renomear sem problemas para *.jpg??
 
Bom espero q te ajude de alguma forma...
 
t+
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página