INSERIR E RECUPERAR IMAGEM DE BD SQL

DANLEONHART 13/06/2011 20:59:18
#376663
Olá a todos !

No Access conseguí inserir e recuperar imagens do BD...mas usei o mesmo script para o SQL e deu erro...
então, alguém me dá um exemplo de como fazer isto com banco de dados SQL Server via VB6 por favor

Usei fiz assim no Access para inserir:

Set Rs = New ADODB.Recordset
Set MyStr = New ADODB.Stream
MyStr.Type = adTypeBinary

Rs.CursorLocation = adUseClient
Rs.Open [Ô]SELECT * FROM Dados WHERE ID=0[Ô], Con, adOpenStatic, adLockOptimistic
Rs.AddNew

MyStr.Open
MyStr.LoadFromFile CD.FileName
Rs!Foto = MyStr.Read

Rs.Update
MyStr.Close
Rs.Close
Con.Close


Para recuperar:

Set Rs = Con.Execute([Ô]SELECT * FROM Dados WHERE ID=[Ô] & vId)
Set MyStr = New ADODB.Stream
MyStr.Type = adTypeBinary
MyStr.Open
MyStr.Write Rs!Foto
MyStr.SaveToFile App.Path & [Ô]\Imagem.jpg[Ô], adSaveCreateOverWrite

Ima1.Picture = LoadPicture(App.Path & [Ô]\Imagem.jpg[Ô])

MyStr.Close
Rs.Close
Con.Close


Tentei o mesmo no SQL e deu erro:
[Ô]Operações de várias etapas gerou erros.verifique cada valor de status.[Ô]
DANLEONHART 15/06/2011 01:38:38
#376795
Da maneira que descreví acima funciona de boa com o [txt-color=#007100]Access 2003/2007[/txt-color] e [txt-color=#0000f0]SQL Server 2008[/txt-color]...
o que acontece é que estava a fazer testes com o SQL Compact Edition e estava dando um erro estranho...
isso é bem típico da Micosofre, uma query que funciona em um banco e no outro não funfa

VALEU !
DANLEONHART 19/06/2011 19:49:33
#377211
Pessoal...

Se assim é para Inserir a imagem:


Set Rs = New ADODB.Recordset
Set MyStr = New ADODB.Stream
MyStr.Type = adTypeBinary

Rs.CursorLocation = adUseClient
Rs.Open [Ô]SELECT * FROM Dados WHERE ID=0[Ô], Con, adOpenStatic, adLockOptimistic
Rs.AddNew

MyStr.Open
MyStr.LoadFromFile CD.FileName
Rs!Foto = MyStr.Read

Rs.Update
MyStr.Close
Rs.Close
Con.Close


Como faço para Alterar ??? tipo, o usuário já tem uma Foto no BD mas pretende alterá-la...
DANLEONHART 19/06/2011 20:33:11
#377212
Já conseguí


Set Rs = New ADODB.Recordset
Set MyStr = New ADODB.Stream
MyStr.Type = adTypeBinary

Rs.CursorLocation = adUseClient
Rs.Open [Ô]SELECT * FROM Dados WHERE ID=[Ô] & vID, Con, adOpenStatic, adLockOptimistic
Rs.UpDate

MyStr.Open
MyStr.LoadFromFile CD.FileName
Rs!Foto = MyStr.Read

Rs.Update
MyStr.Close
Rs.Close
Con.Close


Basta substituir o AddNew pelo UpDate...
EDERMIR 19/06/2011 20:39:15
#377213
DANLEONHART

Vou sugerir que você não guarde a imagem no BD. Além de [Ô]engordar[Ô] bastante a tabela (e o banco) aumenta o tempo de resposta.

Eu tenho uma tabela que necessito ter a foto do aluno. Como é uma escola com vários cursos extra curriculares, o aluno pode matricular-se a qualquer tempo para os cursos.
Neste caso, tenho um BD específico apenas com a foto armazenada e uma PASTA onde a foto está armazenada no servidor. Quando o aluno se apresenta para a matrícula, a aplicação pesquisa PRIMEIRAMENTE na pasta. Caso não exista a foto, o BD é acessado e a foto gravada na pasta para futuras matrículas (todas as unidades do grupo acessam a mesma base e a PASTA de um servidor pode não conter a foto do aluno que realizou o curso em outra unidade).
Tópico encerrado , respostas não são mais permitidas