Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2004
pzhero pzhero is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Poder: 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
  #2  
Antiguo 04-05-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Yo probaría directamente con un driver OleDb en lugar de uno ODBC y la pasarela ODBC - ADO.

Este parece ser el mejor driver OleDb para Firebird :

http://www.ibprovider.com/

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 05-05-2004
pzhero pzhero is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Poder: 0
pzhero Va por buen camino
Baje es instale el oledb, y todo ok. hice mis promeras pruebas y pude insertar una imagen, pero al despues ya no me inserta nada, me manda el siguente error

Execute:
SQLCODE=-303:
Dynamic SQL Error
SQL error code = -303
feature is not supported
BLOB and array data types are not supported for move operation
IBCODE=isc_dsql_error


puedodescargar la unica imagen que cargue, pero no puedo subir más imagenes, qeu estará pasando?? esta es mi linea de codigo que genera el error lo saque de la documentacion del IBProvider

StrM.LoadFromFile "c:\monofasico1.gif"
Dim ins_cmd As New ADODB.Command
ins_cmd.ActiveConnection = Cnn

ins_cmd.CommandText = "insert into fotos" & Chr(13) & _
"(idfoto,foto)" & Chr(13) & _
"values(?,?)"
Debug.Print ins_cmd.CommandText

ins_cmd.Parameters.Append ins_cmd.CreateParameter("idfoto", adBSTR, , , "123")
ins_cmd.Parameters.Append ins_cmd.CreateParameter("foto", adBSTR, , , StrM.Read)
ins_cmd.Execute

la cadena de conexión es la siguiente



server = "Provider=LCPI.IBProvider;data source=localhost:l:\firebird\PRUBABLOBLS.FDB;ctype=win1251;" & _
"user id=sysdba;password=masterkey"

Set Cnn = New ADODB.Connection
Cnn.ConnectionString = server
Cnn.CursorLocation = adUseClient
Cnn.Open
Cnn.Properties("Session AutoCommit") = True 'enable auto commit
Cnn.Properties("Autocommit Isolation Levels") = 4096 'read commited=0x1000


gracias por su ayuda
Responder Con Cita
  #4  
Antiguo 05-05-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

No sé si estos Foros són los mas adecuados para esta consulta. Por mi parte hace bastantes años que no trabajo con Visual Basic, así que no te puedo ayudar mucho.

Quizá obtengas mejor resultado, si envias este código al creador del driver mailto:ibprovider@ibprovider.com

También puedes probar con algún Foro más específico de Visual Basic.

NOTA: Si yo hubiese de hacer esto en Visual Basic, en lugar de utilizar un Comando creado en tiempo de ejecución, probaria añadiendo un DataEnvironment al proyecto, y añadiendole la conexión y el Query. De esta forma, no tienes que crear nada en tiempo de ejecución (comando, parámetros, ...), solo pasar valores a los parámetros, y ejecutar el query. (solo lo digo para simplificar el código, aunque no tengo ni idea si puede ayudar en este problema).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 05-05-2004
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
Buenos días,

En primer lugar no comprendo porque querés realizar un insert mediante un comando, lo más natural sería utilizar un recordset o en su defecto la función execute del objeto connection, aunque el comentario de guillotmarc también es interesante.

En segundo lugar ADO no es completamente compatible con muchas de las BD del mercado (Aun hoy por hoy sigo luchando con los parámetros de las SP de Oracle), de hecho ultimamente creo que M$ es unicamente compatible con M$

Y en tercer lugar nada, solo quería completar este post.

PD: Opino igual que guillotmarc de que deberías visitar foros mas específicos de VB.
__________________
Suerte
.: Gydba :.
Responder Con Cita
  #6  
Antiguo 06-05-2004
pzhero pzhero is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Poder: 0
pzhero Va por buen camino
ok. gracias por su ayuda chicos

hasta luego
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:52:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi