AJUDE POR FAVOR!!! BANCO DE DADOS COM IMAGEM
Bom dia pessoal.
Estou precisando terminar um cadastro de imagens que estou fazendo, é o seguinte criei um arquivo .mdb com auxilio do visdata. A função do programinha que estou criando é cadastrar e consultar imagens. Porem estou tendo um problema.Na hora de cadastrar a imagem tudo ok!Porem na hora da consulta o tipico erro "Type mismatch" Número 13. Até entendi o problema, só não consegui resolver. E o problema é o seguinte, Coloquei como tipo de fields no Visdata "Memo", e quando eu mandava salvar as imagens ele salvava!!!Porem quando eu abria o banco de dados para ver como estava salvo estava cheio de números, ao inves de exibir a imagem. E na hora de fazer a consulta não era possivel, dava o tipico erro "Type mismatch", isso pelo fato de que não se exibi números em um image, e sim em um text, mas como salvar e consultar imagens então???
Obs:. Já tentei colocar os fields como binary ao inves de memo, mas não deu certo, da um outro erro que não me recordo agora.
Obrigado.
Estou precisando terminar um cadastro de imagens que estou fazendo, é o seguinte criei um arquivo .mdb com auxilio do visdata. A função do programinha que estou criando é cadastrar e consultar imagens. Porem estou tendo um problema.Na hora de cadastrar a imagem tudo ok!Porem na hora da consulta o tipico erro "Type mismatch" Número 13. Até entendi o problema, só não consegui resolver. E o problema é o seguinte, Coloquei como tipo de fields no Visdata "Memo", e quando eu mandava salvar as imagens ele salvava!!!Porem quando eu abria o banco de dados para ver como estava salvo estava cheio de números, ao inves de exibir a imagem. E na hora de fazer a consulta não era possivel, dava o tipico erro "Type mismatch", isso pelo fato de que não se exibi números em um image, e sim em um text, mas como salvar e consultar imagens então???
Obs:. Já tentei colocar os fields como binary ao inves de memo, mas não deu certo, da um outro erro que não me recordo agora.
Obrigado.
Amigo,
Como sugestão faria um campo string com o nome do arquivo da imagem. Com isso na hora de ler, é so busca-la na pasta de imagems.
Como sugestão faria um campo string com o nome do arquivo da imagem. Com isso na hora de ler, é so busca-la na pasta de imagems.
Amigo, muito obrigado pela solução, porem preciso usar banco de dados, pois as imagens serão exibidas quando determinado código for digitado, mas de qualquer forma obrigado.
Eu só estou precisando saber como trato o tipo de informação de imagem para quando fizer o mecanismo de busca o sistema exibir as imagens do banco de dados.
Obrigado.
Eu só estou precisando saber como trato o tipo de informação de imagem para quando fizer o mecanismo de busca o sistema exibir as imagens do banco de dados.
Obrigado.
Primeira coisa mude o tipo do campo para Objeto OLE, depois:
Suponhamos o seguinte:
TABELA:FotosCliente
CAMPOS:
CLIENTE NUMERO (INTEIRO LONGO)
FOTO OBJETO OLE
Use o seguinte:
ESPERO TER AJUDADO
Suponhamos o seguinte:
TABELA:FotosCliente
CAMPOS:
CLIENTE NUMERO (INTEIRO LONGO)
FOTO OBJETO OLE
Use o seguinte:
Private Sub GravaFoto()
'INICIALIZA
Dim Qd As rdoQuery
Dim Rs As rdoResultset
Dim FileName As String
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, i As Integer
Dim sSql As String
sSql = ""
sSql = sSql & "SELECT "
sSql = sSql & " CLIENTE, "
sSql = sSql & " FOTO "
sSql = sSql & "FROM "
sSql = sSql & " FOTOSCLIENTE "
sSql = sSql & "WHERE "
sSql = sSql & " CLIENTE = " & txtCliente.Text
Set Qd = Banco.CreateQuery("FotosCliente", sSql)
'GRAVA FOTO
Set Rs = Qd.OpenResultset(rdOpenKeyset, _
rdConcurRowVer)
If Rs Is Nothing Or Rs.Updatable = False Then
ResetAmpulheta
Rs.Close
Set Qd = Nothing
MsgBox "Nao foi possivel gravar a foto do cliente!", vbCritical
Exit Sub
End If
If Rs.EOF Then
Rs.AddNew
Rs!Cliente = txtCliente.Text
Else
Rs.Edit
End If
DataFile = 1
Open FileName For Binary Access Read As DataFile
Fl = lOF(DataFile) ' Tamanho dos dados dentro do arquivo
If Fl = 0 Then Close DataFile: Exit Sub
Chunks = Fl ChunkSize
Fragment = Fl Mod ChunkSize
Rs!FOTO.AppendChunk Null
ReDim Chunk(Fragment)
Get DataFile, , Chunk()
Rs!FOTO.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For i = 1 To Chunks
Get DataFile, , Chunk()
Rs!FOTO.AppendChunk Chunk()
Next i
Close DataFile
Rs.Update
Rs.Close
Rem MsgBox "Foto gravada com sucesso!", vbExclamation
Set Qd = Nothing
end Sub
private sub CarregaFoto()
'INICIALIZA
Dim Qd As rdoQuery
Dim Rs As rdoResultset
Dim FileName As String
Dim DataFile As Integer, Fl As Long, Chunks As Integer
Dim Fragment As Integer, Chunk() As Byte, i As Integer
Dim sSql As String
Set Rs = Qd.OpenResultset(rdOpenKeyset, rdConcurRowVer)
If Rs Is Nothing Or Rs.Updatable = False Then
ResetAmpulheta
MsgBox "Nao foi possivel exibir a foto do cliente!", vbCritical
Rs.Close: Qd.Close
Set Qd = Nothing
Exit Sub
End If
If Rs.EOF Then
ResetAmpulheta
cmdLimparFoto_Click
Rem MsgBox "Nao existe nenhuma foto armazenada!", vbExclamation
Rs.Close: Qd.Close
Set Qd = Nothing
Exit Sub
End If
DataFile = 1
Kill App.Path & "\pictemp.tif" 'Deleta arquivo temporario de foto
Open App.Path & "\pictemp.tif" For Binary Access Write As DataFile
Fl = Rs!FOTO.ColumnSize
Chunks = Fl ChunkSize
Fragment = Fl Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = Rs!FOTO.GetChunk(Fragment)
Put DataFile, , Chunk()
For i = 1 To Chunks
ReDim Buffer(ChunkSize)
Chunk() = Rs!FOTO.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i
Close DataFile
Rs.Close: Qd.Close
Set Qd = Nothing
FileName = App.Path & "\pictemp.tif"
If FileName = "" Then Exit Sub
Dim P As Single
Dim F As IPictureDisp
Set F = LoadPicture(FileName)
P = picFoto.Width / F.Width
If Int(F.Width * P) > picFoto.Width Then
P = picFoto.Height / F.Height
End If
If Int(F.Height * P) > picFoto.Height Then
P = picFoto.Height / F.Height
End If
picFoto.Cls
picFoto.PaintPicture F, 0, 0, F.Width * P, F.Height * P
end Sub
ESPERO TER AJUDADO
Cara vamos por partes
1-nao guarde a imagem no banco isso fara com que o seu banco cresca muito.
2-crie uma pasta padrao onde as imagens serao guardadas, pois se trabalhar em rede o C:\ nao funciona seria melhor ja definir um caminho na rede \\server\pasta imagens\, ou seja seria apenas gravado o caminho ate a imagem em um simples campo texto
3- para carregar a imagem basta
1-nao guarde a imagem no banco isso fara com que o seu banco cresca muito.
2-crie uma pasta padrao onde as imagens serao guardadas, pois se trabalhar em rede o C:\ nao funciona seria melhor ja definir um caminho na rede \\server\pasta imagens\, ou seja seria apenas gravado o caminho ate a imagem em um simples campo texto
3- para carregar a imagem basta
image.Picture = LoadPicture(caminho gravado no banco)
Conforme disse nosso amigo IANELII
forma para o seu sistema. Cada caso...é um caso...
Citação:Gravar imagens em uma pasta não é seguro. Dados devem ser guardados em banco de dados... IANELLI vc deve saber qual a melhorAmigo, muito obrigado pela solução, porem preciso usar banco de dados, pois as imagens serão exibidas quando determinado código for digitado, mas de qualquer forma obrigado.
forma para o seu sistema. Cada caso...é um caso...
Citação:FRAU escreveu:
Conforme disse nosso amigo IANELII Amigo, muito obrigado pela solução, porem preciso usar banco de dados, pois as imagens serão exibidas quando determinado código for digitado, mas de qualquer forma obrigado.
Gravar imagens em uma pasta não é seguro. Dados devem ser guardados em banco de dados... IANELLI vc deve saber qual a melhor
forma para o seu sistema. Cada caso...é um caso...
sim concordo q cada caso é um caso, mas nao me referi ao lado de segurança e sim apenas a performance do banco, mas enfim...
Tópico encerrado , respostas não são mais permitidas