campos BLOB

campos BLOB

Postby QAZWSX2K » Thu Aug 02, 2012 9: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
User avatar
QAZWSX2K
 
Posts: 363
Joined: Tue Oct 25, 2005 7:06 pm
Location: Bogota - Caracas

Re: campos BLOB

Postby sysctrl2 » Thu Aug 02, 2012 9:54 pm

Campos LONGBLOB son usados para almacenar cadenas de texto,

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

Code: Select all  Expand view
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 "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: campos BLOB

Postby MGA » 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

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: campos BLOB

Postby MGA » Mon Jan 28, 2013 9:57 am

resolvido com: strtohex e hextostr.
ubiratanmga@gmail.com

FWH18.02
FWPPC
Harbour/xHarbour
xMate
Pelles´C
TDolphin
MGA
 
Posts: 1234
Joined: Mon Feb 25, 2008 2:54 pm
Location: Brasil/PR/Maringá

Re: campos BLOB

Postby jnavas » 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.
User avatar
jnavas
 
Posts: 472
Joined: Wed Nov 16, 2005 12:03 pm
Location: Caracas - Venezuela

Re: campos BLOB

Postby QAZWSX2K » Sat Mar 30, 2013 4: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
User avatar
QAZWSX2K
 
Posts: 363
Joined: Tue Oct 25, 2005 7:06 pm
Location: Bogota - Caracas

Re: campos BLOB

Postby QAZWSX2K » Sat Mar 30, 2013 7: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
User avatar
QAZWSX2K
 
Posts: 363
Joined: Tue Oct 25, 2005 7:06 pm
Location: Bogota - Caracas


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 53 guests