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

 
Vista:

FileWriteEx en PB6,5, Imagen a Disco

Publicado por JCardenas (86 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
Val: 250
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

FileWriteEx en PB6,5, Imagen a Disco

Publicado por Adolfo (260 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 (86 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 (86 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 (86 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
sin imagen de perfil

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 (38 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 (38 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

FileWriteEx en PB6,5, Imagen a Disco

Publicado por Rachel (1 intervención) el 03/08/2022 11:46:19
Hola Buenos días,

He estado realizando la partición de los ficheros como indicáis. Lo único que me encuentro con el problema de que los ficheros de 32 kb o múltiplos de 32 kb, me dan problemas. Se queda pensando el sistema y no copia nada.

Un saludo
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