Power Builder - FileWriteEx en PB6,5, Imagen a Disco

   
Vista:

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JCardenas jcardenasrodriguez@gmail.com (84 intervenciones) el 10/07/2014 20:57:06
Buenas, trabajo con PB6.5, leo una imagen de disco y la grabo en BD, hasta aquí todo lo hace correcto, el problema es al hacer el proceso inverso de leer de la BD la imagen y guardarla a disco, cuando la imagen ocupa mas de 32.000 bytes la guarda pero cortando la imagen y dejando solo los primeros 32.000 bytes.

Para leer del disco la imagen si puedo hacer bucles en bloques de 32KB pero para guardarla no se como....

Alguien sabe como guardar a Disco Imagenes de la BD directamente sin tener este problema?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Adolfo

FileWriteEx en PB6,5, Imagen a Disco

Publicado por Adolfo (71 intervenciones) el 11/07/2014 15:08:36
Debes modificar c:\archivos de programa\sybase\shared\powerbuilder\pbodb125.ini (o en su caso la version que sea. ejm.
pb0db12.ini) y localizar lo siguiente
PBMaxBlobSize='32767'
PBMaxTextSize='32767'
y cambiarlo por
PBMaxBlobSize='2147483647'
PBMaxTextSize='32767000'
Debes buscar este archivo en c:\users y al encontrarlo realizar el mismo cambio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JCardenas (84 intervenciones) el 11/07/2014 18:51:35
Gracias Adolfo.

Estos parámetros ya los había modificado tal y como tu comentas, no obstante, me conecto a la BD via driver nativo no por ODBC, por lo que además de modificar el .ini también añado al dbparm = PBmaxblobsize='2147483647',PBmaxtextsize='32767000' y nada, me corta la imagen.

Ya no se que mas probar.

Tengo una duda, el problema lo tengo en la variable BLOB de PB donde almaceno la imagen con el selectblob o el problema esta en la imagen que guardo en la BD?, es decir, que proceso es el que me corta la imagen:

INSERCION EN BD:
1) el proceso donde voy leyendo de disco y voy almacenando en una variable BLOB (fileread + asignacion a variable blob) donde el problema sería del tipo de dato BLOB que no almacena mas de 32Kb

flen = FileLength(ls_pathname)
li_FileNum = FileOpen(ls_pathname, StreamMode!)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
new_pos = 1
FOR i = 1 to loops
bytes_read = FileRead (li_FileNum, b)
lb_usu_foto = lb_usu_foto + b
NEXT

2) el updateblob -- donde el problema seria de que sqlserver no me permite mas de 32kb


LECTURA Y GUARDADO A DISCO:

3) el selectblob y almacenamiento en variable blob -- el problema sería que el tipo de dato blob no permiet mas de 32kb o que el campo de bd solo almacena 32kb

4) el Filewrite de la variable blob -- que no permite escritura de bloques de mas de 32kb


Tengo tal saturamiento, que ya no se realmente si el problema es de BD o de la variable BLOB de PB.


Alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por Jcardenas (84 intervenciones) el 11/07/2014 22:39:49
He optado por hacer la prueba de migrar a PB12, gracias a esto, he podido comprobar que el problema esta en el FileWrite, ya que en PB12 usando el objeto picture (que permite la visualización de JPG cosa que en PB6 no) he comprobado que se muestra completamente, por lo que tanto la lectura de fichero, el almacenamiento en BD y la lectura de BD a variable la hace correctamente, el problema lo tengo con el FileWrite.

Al igual que en la lectura, tengo que ir leyendo en bloques de 32kb y almacenando en un blob, para el caso de escritura creo que debo hacer lo mismo, ya que FileRead y FileWrite solo funcionan con tamaño máximo de 32Kb.

Alguien sabe como puedo hacer que se guarde a fichero una variable BLOB de mas de 32Kb usando la funcion FileWrite?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JCardenas jcardenasrodriguez@gmail.com (84 intervenciones) el 12/07/2014 10:20:46
Ya esta!!!!, la solucion para escribir a disco ficheros de mas de 32kb:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
li_FileNum 	= FileOpen (ls_nombre, StreamMode!, Write!, LockReadWrite!, Replace!)
 
ll_tam = len(lb_imagen)
if ll_tam <= 32766 then
	FileWrite(li_FileNum, lb_imagen)
else
	Do
		lbl_temp = BlobMid(lb_imagen,li_pos,32765)
		ll_long = ll_long + FileWrite(li_FileNum, lbl_temp)
		li_pos = li_pos + 32765
	Loop While ll_long <= ll_tam
end if
 
FileClose(li_FileNum)


Funcionando!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por Pico (2 intervenciones) el 13/07/2014 19:56:49
No necesitas hacer el if ll_tam <= 32766 then ya que si esa condición se cumple ya no se cumplirá el Loop while, y se ejecutará sólo una vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JUAN (37 intervenciones) el 04/08/2014 20:09:00
JCardenas, estaba guiandome con su codigo de escritura, lo que necesito es reemplazar una cadena de texto de un archivo plano mayor a 32kb ese texto se repite en varias partes hasta puede ser en el final, lo que quiero es quitarlo, si tiene un codigo de ejemplo parecido le agradeceria que me lo envie a mi email angel_sor en yahoo..., de todas formas voy a seguir intentando, tengo un codigo que hice que solo me funciona en archivos de texto menores a 32kb, pero en programacion no me gustaria dejarlo estatico...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JUAN (37 intervenciones) el 05/08/2014 00:05:00
YA SOLUCIONE, PERO DE IGUAL MANERA GRACIAS AMIGOS FORISTAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar