Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2011
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Leer datos de campo tipo blob

Muy buenos dias, resulta que estoy haciendo una aplicacion que se conecta con un sistema administrativo cuya base de datos es DBISAM, estoy realizando un modulo que debe leer un campo tipo blob dentro de un datagrid, el departament de soporte de la empresa del software me paso este codigo que posee la estructura de la tabla


Código Delphi [-]
  //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;


 //A CONTINUACION UN EJEMPLO DE COMO LEER UN CAMPO BLOB QUE CONTIENE COSTOS Y PRECIOS

 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;

Aun no he logrado ver los valores de dicho campo blob.

De antemano muchas gracias por el tiempo que dedicaron en leer mi inconveniente.
Responder Con Cita
  #2  
Antiguo 03-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En esas tablas no veo el campo "costoproducto".
Además que guardar precios en un campo blob es de lo más extraño que se le puede ocurrir a un programador. Creo que no entiendo tu pregunta o eres tú el que no has entendido lo que tienes que hacer, me parece extrañísimo.
Responder Con Cita
  #3  
Antiguo 03-07-2011
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Hola buen dia gracias por tu respuesta. En esa tabla se guardan los costos y precios de los productos lo que necesito es mostrarlos en pantalla eso es todo.

Respondiendo lo referente a la variable costosproduct, segun entiendo ese codigo arriba hay un Record llamado RegUnPrecio
despues hay un array de ese record que se llama Regdeprecios

despues esta otro record llamado regcostos, segun el comentario que tiene esta linea
Código Delphi [-]
BlobStreamData.Read(CostosProducto,SizeOf(CostosProducto)); //CostosProducto : RegCostos

costoProducto es un array de regcostos
[IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot.png[/IMG][IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-1.png[/IMG]
Responder Con Cita
  #4  
Antiguo 03-07-2011
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Bien, tratare de expresarme un poco mejor, se trata de una tabla que contiene el informacion de costos, precios, utilidad de los productos de un sistema, pero dentro de un solo campo blob no obstantes en ese mismo campo blob se encuentrar los 6 tipos de precio, 6 margenes de utilidad, (precio1, precio 2, precio3) o (precio mayor, precio oferta) a esome refiero con los tipos de precios.

Todos estos campos estan metidos en un solo campo llamado fx_costos.
la empresa de este software me paso la estructura de la base de datos y gracias a eso he podido traer a pantalla la informacion que necesito siempre y cuando la consulta me traiga un solo registro algo como "select campokey, from tabla where campokey='identificador primario'".

para resumir un poco, lo que yo quisiera es poder llevar a un dbgrid un solo tipo de precio y del campo blob y los demas campos de el registro en cuestion, cosa que no he podido hacer, solo puedo llevar al dbgrid todos los campos menos en blob, y hasta ahora solo he podido traer a pantalla el precio del producto cuando le especifico el codigo del producto.

si alguien logra entenderme y ayudarme se lo agradecere mucho.

saludos.




Código Delphi [-]
 Tcargosm = class(TForm)

    DBGrid1: TDBGrid;
    Database1: TDatabase;
    Query1: TQuery;
    DataSource1: TDataSource;
    detalle: TButton;
    Edit1: TEdit;
    procedure consultaCargos();
   

  private
    { Private declarations }
  public
    { Public declarations }
  end;


 RegUnPrecio = Record
 PorcUtil,
 PorcUtilEx:Boolean;
 Utilidad,
 UtilidadEx,
 SinImpuesto,
 MtoImpuesto1,
 MtoImpuesto2,
 TotalPrecio,
 TotalPrecioEx:Currency;
 TipoRound:Byte;
end;



RegDePrecios        = Array[1..6] of RegUnPrecio; // este array es donde estaran los precios1, precios2,precio3,precio4,precio5,precio6


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;


var
 cargosm: Tcargosm;


 
  bs:tstream;
  tabla:regcostos;
  blobf:tblobfield;
  c:string;
implementation

{$R *.dfm}

procedure Tcargosm.consultaCargos();
begin

query1.Close;
query1.sql.Clear;

//query1.sql.Add('select fx_codigo, fx_costos,fx_tipo from sfixed');// asi no me muestra nada
query1.sql.Add('select fx_codigo, fx_costos,fx_tipo from sfixed where fx_codigo='+quotedstr('B-TC'));  // asi me muestra un registro

query1.Open;


    if(query1.FieldByName('fx_costos').isblob) then begin

        blobf:=query1.FieldByName('fx_costos') as tblobfield;
        bs:= query1.CreateBlobStream(blobf, bmread);

        try
        bs.Seek(0,0);
        bs.Read(tabla,sizeof(regcostos)) ;
        finally
        bs.Free;
        end;
    end;
   edit1.Text:=currtostr(tabla.Precios[1].TotalPrecio);// aca muestro el resultado en un tedit

   

end;





end.
Responder Con Cita
  #5  
Antiguo 05-07-2011
lusinpa lusinpa is offline
Registrado
NULL
 
Registrado: jul 2011
Posts: 5
Poder: 0
lusinpa Va por buen camino
Consultas para las base de datos de dbisam

Saludos Dens

Te quería informar que el campo blob en delfhi no lo puedes leer así por así, yo me encuentro estoy haciendo lo mismo que tu con la diferencia que lo estoy haciendo en otro lenguaje que si me permite ver el campo blob pero hay un detalle.

Al tu guardar en dbisam valores de texto en campo blob estos son comprimidos para hacer liviano ese registro, cuando yo hago la consulta en php me lo muestra como si estuviera comprimido o encriptado creo que en delfhi hay una función que te permite leer campos blob en forma de texto plano investiga si consigues algo informas pana
Responder Con Cita
  #6  
Antiguo 05-07-2011
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Cita:
Empezado por lusinpa Ver Mensaje
Saludos Dens

Te quería informar que el campo blob en delfhi no lo puedes leer así por así, yo me encuentro estoy haciendo lo mismo que tu con la diferencia que lo estoy haciendo en otro lenguaje que si me permite ver el campo blob pero hay un detalle.

Al tu guardar en dbisam valores de texto en campo blob estos son comprimidos para hacer liviano ese registro, cuando yo hago la consulta en php me lo muestra como si estuviera comprimido o encriptado creo que en delfhi hay una función que te permite leer campos blob en forma de texto plano investiga si consigues algo informas pana
Buen dia mi pana yo de tanto darle resolvi el problema fue incluyendo en un bucle while el codigo del blobstrem de esta manera


Código Delphi [-]
blobf:=query2.FieldByName('fx_costos') as tblobfield;
          while not query2.Eof do
          begin

          bs:= query1.CreateBlobStream(blobf, bmread);
          bs.Seek(0,0);
          bs.Read(tabla,sizeof(tabla)) ;
          totaldeuda:=totaldeuda+(strtoint(currtostr(tabla.Precios[1].TotalPrecio))*(query1.FieldByName('fcf_cuotas').Value-query1.FieldByName('fcf_cuotasaplicadas').Value));
          query2.Next;
          end;
        bs.Free;

no se si fue la mejor manera pero logre ver los precios de los registros que queria, intente colocar estos datos en un dbgrid pero no pude, a la final los coloque en un datagrid y esta caminando. realmente nunca he realizado la conexion de dbisam por medio de php pero en lo que pueda ayudarte con mucho gusto lo hare. saludos viejo
Responder Con Cita
  #7  
Antiguo 15-06-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por carlosw1978 Ver Mensaje
Muy buena aportación
Por favor, crea un nuevo hilo con tu problema, gracias.
Y no olvides poner las "tags" al código fuente
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tipo de Campo Blob en SQL BlueSteel MS SQL Server 4 11-09-2010 00:02:36
Problema al Guarda el Valor del Campo Tipo BLOB Efren2006 Firebird e Interbase 5 10-03-2010 13:34:15
Insertar en un campo tipo BLOB un Variant adebonis Varios 1 23-03-2009 18:22:45
Como declarar un campo tipo BLOB Ronny Firebird e Interbase 0 19-01-2005 16:46:29
Leer un campo BLOB con PHP mcaar Oracle 0 18-11-2004 14:15:56


La franja horaria es GMT +2. Ahora son las 09:41:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi