FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour campos BLOB
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
campos BLOB
Posted: Thu Aug 02, 2012 09:06 PM

saludos amigos, tengo que trabajar con unas base de datos de delphi y todo bien via odbc, puedo leer, grabar, todo, el unico problema son unos campos tipo BLOB, alguien sabe como tratarlos?

gracias

alejandro

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: campos BLOB
Posted: Thu Aug 02, 2012 09:54 PM
Campos LONGBLOB son usados para almacenar cadenas de texto,

y en tdolphin el trato es igual a cualquier otro camo.

Code (fw): Select all Collapse
cCampos := 'CODIGO, MEMO'

cValores := C_SIMPLE +  cCodigo        + C_SIMPLE + ","
      
cValores += C_SIMPLE +  cMemo         + C_SIMPLE


cQry := "INSERT INTO mitabla (" + cCampos + ") " + ;
              "VALUES (" + cValores + ")"     
      
::oMain:oCon:Execute( cQry )


saludos.
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: campos BLOB
Posted: Sun Jan 27, 2013 11:29 AM

Cesar, estou tendo problemas ao tentar gravar IMAGENS em campo BLOB com tdolphin:

  uData := D_ReadFile( cArquivo )
  uData := Val2Escape( uData )
  uData := ClipValue2Sql( uData )  
 oQry:foto := uData

As vezes me ocorre erro de caracteres especiais.

Tem alguma dica?

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 1286
Joined: Mon Feb 25, 2008 02:54 PM
Re: campos BLOB
Posted: Mon Jan 28, 2013 09:57 AM

resolvido com: strtohex e hextostr.

ubiratanmga@gmail.com

FWH24.04
BCC7.3
HARBOUR3.2
xMate
Pelles´C
TDolphin
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: campos BLOB
Posted: Sun Feb 03, 2013 12:55 AM
Colegas
Logre implementar los campos BLOB para guardar cualquier archivo mediante los siguientes pasos:

Binario, hacia formato ZIP y luego hacia texto mediante MIME

// El Archivo Original es Comprimido en Formato Zip
HB_ZipFile( cFileZip, aFiles, 9,,.T., NIL, .F., .F. )

// El Archivo MIME es Convertido en Formato TEXTO Segun Mime
FMimeEnc(cFileZip,cFileMime)

Luego almaceno cMemo en la tabla MySQL incluso se puede implementar con tablas DBF

Luego lo recupero haciendo el proceso inverso:

aData:=ASQL("SELECT FIL_TEXTO,FIL_ZIP FROM "+cTable+" WHERE FIL_MAIN" +GetWhere("=",cFileMain)+;
cWhereSuc+;
" ORDER BY FIL_PAGE" )
IF Empty(aData)
MensajeErr("Archivo "+cFile+" no posee Registros en la tabla "+cTable)
RETURN .F.
ENDIF

lZip :=aData[1,2]

IF !lZip
cFileMime:=cFile
ENDIF

ferase(cFileMime)

oFile:=TFILE():New(cFileMime)

FOR I=1 TO LEN(aData)

oFile:PutStr( ALLTRIM(aData[I,1]))

NEXT I

oFile:End()

IF lZip

cDirTo :=cFilePath(cFile)

FMimeDec(cFileMime,cFileZip)

HB_UNZIPFILE( cFileZip , {|| nil }, .t., NIL, cDirTo , NIL )

ENDIF

La funcionalidad que utilice puedo guardar cualquier tamaño de archivo probe un un binario de instalacion de 16 megas, almacenarlo y recuperarlo. Utilice varias registros para paginar su contenido.
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
Re: campos BLOB
Posted: Sat Mar 30, 2013 04:33 PM

agradezcos sus respuestas pero la cosa es mas compleja de lo que parece, sucede que dentro del campo blob que deseo leer existe toda una estructura, que es la siguiente:

RegCostos = Record
CodeCompra : String[50]; //Utilizado en el modulo de compras y el generador de reportes solo ejecucion
VImpuesto1 ,
VImpuesto2 : Boolean; //Impuestos Activados
CostoAnteriorBs ,
CostoAnteriorEx ,
CostoActualBs ,
CostoActualEx ,
CostoPromedioBs ,
CostoPromedioEx ,
MImpuesto1 ,
MImpuesto2 : Currency;
PorcentImp1 ,
Exento1 ,
PorcentImp2 ,
Exento2 : Boolean;
FechaVencimiento: TDateTime; //Lo uso en el modulo de compras para incluir el vencimiento
NumeroDeLote : String[42]; //y el numero de lote de los productos con costos por lote
CostoReferencia : Double; //Costo de referencia para aumentar los precios
Precios : RegDePrecios;

por si se complica mas, el campo precios que esta dentro del blob es un array, entonces necesito leer ese array

en delphi se haria asi:

if FX_FIXED.FindKey('B',XXXXX); Codigo del producto
if OkR then
begin
SourceField :=FX_FIXED.FindField('FX_COSTOS');
Try
BlobStreamData :=TDBISAMBlobStream.Create(TBlobField(SourceField),bmRead);
BlobStreamData.Seek(0,0);
BlobStreamData.Read(CostosProducto,SizeOf(CostosProducto)); //CostosProducto : RegCostos
Finally
BlobStreamData.Free;
end;
end;

otra manera

SourceField :=FX_FIXED.FindField('FX_COSTOS'); //este es el campo del registro que llamamos al hacer la consulta

// aqui utilizamos blobstream.create para convertir en stream el campo BlobStreamData:=TDBISAMBlobStream.Create(TBlobField(SourceField),bmRead);
BlobStreamData.Seek(0,0);
BlobStreamData.Read(CostosProducto,SizeOf(CostosProducto));aqui le decimos que lea el record de arriba que se llama regcostors //CostosProducto : RegCostos

costosproducto es una variable tipo regcostos
regcostos es el record donde se van a almacenar los "campos" que estas sacando de esecampo (fx_costos) el cual contiene un campo llamado precios que es el que te interesa,este campo es de tipo regdeprecios que es un array que contiene los 6 precios, 6 costos etc

RegDePrecios = Array[1..6] of RegUnPrecio;

como hago eso en equivalente fivewin, gracias y a ver quien se le mide a esto

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
Re: campos BLOB
Posted: Sat Mar 30, 2013 07:29 PM

ACA la estructura completa de los datos dentro del blob

//Registro para almacenar los costos y precios de inventario
//en un BlobField;
RegUnPrecio = Record
PorcUtil ,
PorcUtilEx : Boolean;
Utilidad ,
UtilidadEx ,
SinImpuesto ,
MtoImpuesto1 ,
MtoImpuesto2 ,
TotalPrecio ,
TotalPrecioEx: Currency;
TipoRound : Byte;
end;

RegDePrecios = Array[1..6] of RegUnPrecio;

//Este registro se guarda en un campo Blob llamado FX_COSTOS
//del Archivo SFixed.Dat
RegCostos = Record
CodeCompra : String[50]; //Utilizado en el modulo de compras y el generador de reportes solo ejecucion
VImpuesto1 ,
VImpuesto2 : Boolean; //Impuestos Activados
CostoAnteriorBs ,
CostoAnteriorEx ,
CostoActualBs ,
CostoActualEx ,
CostoPromedioBs ,
CostoPromedioEx ,
MImpuesto1 ,
MImpuesto2 : Currency;
PorcentImp1 ,
Exento1 ,
PorcentImp2 ,
Exento2 : Boolean;
FechaVencimiento: TDateTime; //Lo uso en el modulo de compras para incluir el vencimiento
NumeroDeLote : String[42]; //y el numero de lote de los productos con costos por lote
CostoReferencia : Double; //Costo de referencia para aumentar los precios
Precios : RegDePrecios;
end;

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217

Continue the discussion