Ver Mensaje Individual
  #1  
Antiguo 04-05-2004
pzhero pzhero is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Reputación: 0
pzhero Va por buen camino
Question Imagenes(BLOB) Firebird con VB6

Hola a Todos aqui nuevamente moliendo.....

estoy intentando iniciar un proyecto en firebird 1.5 pero el acceso lo hago con Visual Basic 6 con el cual ya me puedo conectar y hacer consultas, el problema que tengo ahora, es con las imagenes, como ustedes saben, (si han leido mis consultas anteriores) estoy tratando de "migrar" de cierta manera una aplciacion que tengo en Oracle con el cual manejo imagenes, con oracle no tengo problemas utilizo la librerias OO4O, pero bueno... obviamente con firebird seria de otra manera el tratamiento del tipo BLOB con VB, he tratado de utilizar el tipo de datos Stream que proporciona la ADODB pero no funciona, al hacer el update me da un error "El proveedor de datos u otro servicio devolvio un esta do de E_FAIL" crei que tal vez era al go del objeto Stream e intente con los Métodos GetChunk y AppendChunk y me devuelve el mismo error, probé con SqlServer y Mysql y todo resultó muy bien solo con firebird es que me da este error y pues el proyeto es en Firebird que necesitaria continuarlo, y el manejo de imagenes es escencial en el proyecto a continuacion pongo los dos codigos:

Utilizando ADODB.Stream

Dim StrM As ADODB.Stream
Rs.Open "FOTOS", Cnn, adOpenStatic, adLockOptimistic, adCmdTable
Rs.AddNew
Set StrM = New ADODB.Stream
StrM.Type = adTypeBinary
StrM.Open
StrM.LoadFromFile "c:\monofasico1.gif"
Rs!IdImg = 234
Rs!foto = StrM.Read
Rs.Update
StrM.Close
Rs.Close




Utilizando Chunk's

Public Function ImgToFld(fldDestino As ADODB.Field, Optional sRutaImg As String) As Boolean
On Error GoTo lblError
Dim iOffset As Long
Dim iSizeFile As Long
Dim iArchivoImg As Integer
Dim VectorChunk() As Byte
Dim iFragmentOffset As Integer
Dim i As Integer
Dim lChunks As Long

ciSizeChunk = 100 'por ejemplo
iArchivoImg = FreeFile
Open sRutaImg For Binary Access Read As iArchivoImg
iSizeFile = LOF(iArchivoImg)
If iArchivoImg = 0 Then
Close iArchivoImg
End If

lChunks = iSizeFile \ ciSizeChunk
iFragmentOffset = iSizeFile Mod ciSizeChunk
'Copia el ultimo pedazo

ReDim VectorChunk(iFragmentOffset)
Get iArchivoImg, , VectorChunk()
fldDestino.AppendChunk VectorChunk()

ReDim VectorChunk(ciSizeChunk)
iOffset = iFragmentOffset
For i = 1 To lChunks
Get iArchivoImg, , VectorChunk()
fldDestino.AppendChunk VectorChunk()
Next
ImgToFld = True

Exit Function
lblError:

End Function


La cual llamo desde el siguiente bloque de codigo

Rs.Open "FOTOS", Cnn, adOpenStatic, adLockOptimistic, adCmdTable
Rs.AddNew
Rs!IdImg = 234
ImgToFld Rs!foto , "c:\monofasico1.gif"
Rs.Update
Rs.Close



he buscado documentacion y aun no encuentro si pudieran decirmem donde puedo encontrar la verdad no se que onda y gracias por su valiosa ayuda...
Responder Con Cita