Power Builder - PB 11.5 ¡Problemas! LEN(BLOB)

 
Vista:
sin imagen de perfil

PB 11.5 ¡Problemas! LEN(BLOB)

Publicado por solindeveloper (30 intervenciones) el 10/09/2010 23:08:19
Sres Foristas

Acudo a ustedes pues ya he probado de todo y nada me da resultado...
El caso es que tenia un sistema hecho en PB 9, funciona perfectamente.
Este sistema lo migre a la version estable de PB 11.5

El problema que tengo es que mi sistema consulta en una base de datos un archivo de imagen(tif para ser exactos) y lo muestra en un objeto OLE simple.

Las rutinas que realiza esta visualizacion(boton ver imagen) son 2
1.-Extraer la imagen de la BD a una variable blob y escribirla en mi PC en una carpeta temporal.
2.-Insertar esta imagen a un objeto OLE y visualizarla

En PB 9 ambos procesos los realiza correctamente.

He notado algo muy importante y lo cual me parece es el problema:
El sistema asi como visualiza imagenes TIF de una BD tambien permite registrarlas desde la PC mediante otro modulo.

Cuando voy a cargar una imagen a mi BD especifico la ruta, ubico la imagen y hallo el tamaño de dicha imagen:
Ejemplo:
ln_flength = FileLength(as_imagen) //---> 20460 bytes

pero cuando lo extraigo de mi base de datos y verifico su tamaño me sale que es el doble del que ingreso:
SELECTBLOB .... into :lbb_imagen FROM ... .ETC
ll_FLength = Len(lbb_imagen) -----> 40920 bytes

En la version PB 9 ambos procesos me arrojan lo mismo 20460 bytes
Pero en PB 11.5 la consulta ME DEVUELVE EL DOBLE Y CORROMPE TODO MI PROCESO DE EXTRACCION.

Necesito saber si hay otra rutina en PB 11.5 para saber el tamaño del campo blob y me devuelva el nro de bytes exacto.

OJO si extraigo la imagen de la BD y la guardo en la PC pero como el nro de bytes que tiene no corresponde me resulta un archivo dañado que tiene el doble del tamaño del original.

Dejo mi rutina de visualizacion que uso en PB 11.5
HABER SI ALGUNO DE USTEDES ME PUEDE INDICAR QUE NUEVA FUNCION TRAE EL 11.5 QUE NO ME DEJA EXTRAER Y MOSTRAR CORRECTAMENTE MIS IMAGENES



long ln_count, ll_FLength, ll_res,ln_current_bd
Integer li_FileNum
blob lbb_imagen, b
string ls_tipo_envio,ls_emision,ls_remito,ls_archivo_temp
integer loops, i,ln_i
long new_pos

ls_tipo_envio = dw_cabecera.Object.tipo_envio[1]
ls_emision = dw_cabecera.Object.emision[1]
ls_remito = dw_cabecera.Object.remito[1]

ls_emision = string(long(ls_emision),"00")
ls_remito = string(long(ls_remito),"0000000")

ls_archivo_temp = gs_drive+":\vcourier\temp\remito.tif"
//ls_archivo_temp = "E:\SALVAR_SOLIN\temp\remito.tif"

SELECTBLOB imagen
INTO :lbb_imagen
FROM mv_imagen
WHERE tipo_envio = :ls_tipo_envio
and emision = :ls_emision
AND remito = :ls_remito USING GTRS_IMAGEN ;

If GTRS_IMAGEN.SQLCode <> 0 then
//////////////////////////////////////////////////
//busco el las demas base de datos
//////////////////////////////////////////////////
For ln_i = 1 to UpperBound(gtrs_img)

SELECTBLOB imagen
INTO :lbb_imagen
FROM mv_imagen
WHERE tipo_envio = :ls_tipo_envio
and emision = :ls_emision
AND remito = :ls_remito USING gtrs_img[ln_i] ;

ln_current_bd = ln_i
If gtrs_img[ln_i].SQLCode = 0 then Exit

Next

If UpperBound(gtrs_img) = 0 Then
messagebox('Remito no escaneado','El remito no esta escaneado')
Return
else

If gtrs_img[ln_current_bd].SQLCode <> 0 then
messagebox('Remito no escaneado','El remito no esta escaneado')
Return
End If

end if

end if

If IsNull(lbb_Imagen) Then
messagebox('Remito no escaneado','El remito no esta escaneado')
Return
End If

li_FileNum = FileOpen( ls_archivo_temp,StreamMode!, Write!, Shared!, Replace!)
ll_FLength = Len(lbb_imagen)

// Determine how many times to call FileRead
IF ll_FLength > 32765 THEN
IF Mod(ll_FLength, 32765) = 0 THEN
loops = ll_FLength/32765
ELSE
loops = (ll_FLength/32765) + 1
END IF

ELSE
loops = 1

END IF

// Read the file
new_pos = 1

FOR i = 1 to loops

b = blobmid(lbb_imagen,new_pos,32765)
FileWrite(li_FileNum, b)
new_pos += 32765

NEXT

FileClose(li_FileNum)

ole_imagen.InsertFile(ls_archivo_temp)

IF ole_imagen.activate(OffSite!) <> 0 then messagebox('Error','No se pudo activar el control para mostrar la imagen')
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