INSERIR IMAGEM NO MYSQL VIA VB6

CSAPI 21/03/2014 11:31:05
#436346
Ola pessoal,
Alguém teria um exemplo simples de código para inserir imagens no MYSQL 5.1, agora preciso gravar a imagem no banco e não o caminho como ja vi em vários fóruns aqui.
Pois o aplicativo sera usado em vários estados e a imagem terá de estar disponível aonde o aplicativo tiver instalado.

Grato a colegas e esperando por uma ajuda.

Cláudio
MARCELO.TREZE 21/03/2014 12:44:22
#436361
uma forma que utilizo

Sub SalvaFoto(REG As Integer, caminho As String, tipo As Integer)
[ô] tipo=1 salva
[ô] tipo=2 altera
On Error GoTo TrataErro
Dim RSimagem As ADODB.Recordset
Dim MyStream As ADODB.Stream
Set RSimagem = New ADODB.Recordset
Set MyStream = New ADODB.Stream
Dim xSQL As String

10 MyStream.Type = adTypeBinary
If tipo = 1 Then
xSQL = [Ô]SELECT re,foto FROM fotos[Ô]
20 RSimagem.Open xSQL, Conexao, adOpenStatic, adLockOptimistic
30 MyStream.Open
40 MyStream.LoadFromFile caminho
45 RSimagem.AddNew
50 RSimagem!re = REG
Else
xSQL = [Ô]SELECT re,foto FROM fotos WHERE re=[ô][Ô] & CStr(REG) & [Ô][ô][Ô]
51 RSimagem.Open xSQL, Conexao, adOpenStatic, adLockOptimistic
52 MyStream.Open
53 MyStream.LoadFromFile caminho
End If

60 RSimagem!foto = MyStream.Read
70 RSimagem.Update
80 MyStream.Close
90 RSimagem.Close
Set RSimagem = Nothing
Exit Sub
TrataErro:
MsgBox [Ô]Linha [Ô] & Str$(Erl) & [Ô] - [Ô] & Err.Number & [Ô] - [Ô] & Err.Description
SendMessage mCapHwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub


Function CarregarFoto(REG As Integer, Pic As PictureBox, miniatura As PictureBox)
Dim RSimagem As New ADODB.Recordset
Dim MyStream As New ADODB.Stream
Dim cSQL As String
With MyStream
.Type = adTypeBinary
cSQL = [Ô]SELECT re,foto FROM fotos WHERE re=[ô][Ô] & REG & [Ô][ô] AND not isnull(foto)[Ô]
RSimagem.Open cSQL, Conexao, adOpenStatic, adLockOptimistic
If Not (RSimagem.BOF And RSimagem.EOF) Then
.Open
.Write RSimagem!foto
.SaveToFile App.Path & [Ô]    mp.bmp[Ô], adSaveCreateOverWrite
.Close
Pic.Picture = LoadPicture(App.Path & [Ô]    mp.bmp[Ô])
Kill (App.Path & [Ô]    mp.bmp[Ô])
RSimagem.Close
Set RSimagem = Nothing
Else
Exit Function
End If
End With
miniatura.AutoRedraw = True
miniatura.PaintPicture Pic.Picture, 0, 0, 1701, 2268, 0, 0, Pic.Width, Pic.Height
miniatura.AutoRedraw = False
miniatura.Picture = miniatura.Image
End Function



em qualquer lugar do seu código para salvar utilizo

SalvaFoto txtRE.Text, CaminhoFoto, 1 [txt-color=#007100][ô] se for uma alteração então coloque 2 no lugar de 1[/txt-color]


para carregar a foto, repare que coloquei um código chamado miniatura, isso voce pode alterar, eu coloquei para uma exibição melhor em meu formulário.

CarregarFoto txtRE.Text, Picture1, picFoto


acima onde esta picture1 eu carrego a foto normal e picfoto é a picture box que me mostra a miniatura.

você pode fazer as alterações para mostrar apenas a figura normal.

tanto para salvar eu usei um id (re) para identificar a foto, então voce pode mudar para o nome da pessoa por exemplo.

MARCELO.TREZE 21/03/2014 12:58:27
#436363
Esqueci de informar eu criei um campo so para as fotos, e o tipo do campo no mysql que armazena a foto é LONGBLOB.

MESTRE 21/03/2014 13:44:51
#436369
Muita foto no MySQL não deixa o sistema lento? mesmo ele sendo um SGBD muito bom??

CSAPI 21/03/2014 15:20:47
#436380
Marcelo-Treze

Obrigado por me ajudar quando a este codigo, mas quando executo esta tento um problema no CaminhoFoto, esta aparecendo a seguinte mensagem de erro: ByRef argument mismatch o que pode ser?

SalvaFoto txtRE.Text, [txt-color=#e80000]CaminhoFoto[/txt-color], 1 [ô] se for uma alteração então coloque 2 no lugar de 1


MARCELO.TREZE 21/03/2014 18:14:14
#436390
no caminho da foto você está colocando o caminho da foto?
CSAPI 22/03/2014 08:17:47
#436394
Sim estou fazendo assim:

CaminhoFoto=[Ô]c:\foto.jpg[Ô]

Pois a foto encontrase no diretorio raiz do sistema.
SPADM 08/05/2014 10:27:38
#438002
Quais as referências ou componentes para usar o adodb.stream ?
Tópico encerrado , respostas não são mais permitidas