Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Leer Campo Blob desde Delphi

Buenas, alguien puede ayudarme necesito leer una forma de pago en un sistema pero esta almacenada en campos blob, aca tengo la estructura pero nunca habia trabajado con ese tipo de registros. La idea es leerlo y modificarlo

Código:

Código Delphi [-]
RegFormadePago    = Record 
                          TipoPago      : integer; { Efectivo - Cheque - Tarjeta Debito - T Credito       - Retencion  - Giros       - Adelantos - Apartados} 
                         //En  Cuentas por Cobrar es Efectivo - Cheque - Tarjeta Debito - Tarjeta Credito - Giros      - PAdelantado - Retencion 
                          BancoTarjeta  : string[40]; 
                          Detalle       : string[90]; 
                          RetencionIVA  : Boolean; 
                          MontoBsViejos : Double; //Para guardar el detalle de los Bs. Viejos que se usaron en la transaccion 
                          MontoPago     : currency; 
                          NoEsEfectivo  : Boolean; //Los montos que se forzan para redondeo no son efectivo 
                         End; 

   AFormadePago      = Array[0..9] of RegFormadePago; 

//la estructura de el campo Formas de pago es el mismo para soperacioninv y Scuentasxcobrar lo que varia es la asignacion del campo tipos de pago, que se asigna 
//un valor entero segun la forma de pago, por ejemplo en ambos casos (soperacioninv y scuentasxpagar) 0 es efectivo, 1 cheque, etc.
Responder Con Cita
  #2  
Antiguo 04-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola webmasterplc.

Código Delphi [-]
// Pasar el contenido del record al campo BLOB
procedure RecordToBlob(Rec: RegFormaDePago; Blob: TBlobField);
var
  Stream: TMemoryStream;
begin
  Stream:= TMemoryStream.Create;
  try
    Stream.WriteBuffer(Rec, SizeOf(Rec));
    Stream.Seek(0, soFromBeginning);
    Blob.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

// Pasar el contenido del campo BLOB al record
procedure BlobToRecord(var Rec: RegFormaDePago; Blob: TBlobField);
var
  Stream: TMemoryStream;
begin
  ZeroMemory(@Rec, SizeOf(Rec));
  Stream:= TMemoryStream.Create;
  try
    Stream.SetSize(SizeOf(Rec));
    Blob.SaveToStream(Stream);
    Stream.Seek(0, soFromBeginning);
    Stream.ReadBuffer(Rec, SizeOf(Rec));
  finally
    Stream.Free;
  end;
end;

Ejemplos de llamada:
Código Delphi [-]
// Pasar record a campo BLOB
procedure TForm1.aBlobClick(Sender: TObject);
var
  R: RegFormaDePago;
begin
   ...
   RecordToBlob(R, TBlobField(DataSet.FieldByName('CPBLOB')));
   ...
end;   

// Pasar campo BLOB a record
procedure TForm1.ARecordClick(Sender: TObject);
var
  R: RegFormaDePago;
begin
  ...
  BlobToRecord(R, TBlobField(DataSet.FieldByName('CPBLOB')));
  ... 
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 04-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Discula cuando antes de estos procedimiento tengo que hacer una consulta y al hacerla me da el siguiente error
Código Delphi [-]
DBISAM Error 8963, "BLOB block buffers corrupt in the table '
estoy trabajando con dbisam 4.3

y me dice undeclarer indifier formadepago
Responder Con Cita
  #4  
Antiguo 04-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Cita:
y me dice undeclarer indifier formadepago
Con respecto a ese error revisa que el nombre del tipo del parámetro correspondiente al record coincida con el nombre del tipo record.

Cita:
DBISAM Error 8963, "BLOB block buffers corrupt in the table '
Perdón, pero no conozco que es dbisam 4.3 , supongo que es una bd de escritorio y es probable que el nombre del tipo de los campos blob no sea TBlobField.

Para averiguar el nombre del tipo del campo, podes crear los campos persistentes y mirar en el código el nombre del tipo que tiene asignado ese campo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-10-2012 a las 21:59:09. Razón: corrección
Responder Con Cita
  #5  
Antiguo 04-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Aquí está el manual de DBISAM Version 4

A partir de la página 135, explica como realizar el moldeo a de TDBISAMDataSet a TBlobField incluye un ejemplo pero está en C++, te traduzco la línea relevante:
Código:
  dynamic_cast<TBlobField&>(*MyDBISAMDataSet->
    FieldByName("Notes")->LoadFromFile("c:\\temp\\test.txt");
Sería:
Código Delphi [-]
  (MyDBISAMDataSet as TBlobField).FieldByName('Notes').LoadFromFile('C:\temp\test.txt');
Además, dispone de la clase TDBISAMBlobStream que permite trabajar diréctamente con Streams, tambíen está explicado con un ejemplo seguidamente.

Espero te sirva la información.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.


Con respecto a ese error revisa que el nombre del tipo del parámetro correspondiente al record coincida con el nombre del tipo record.
Saludos.
Disculpe he buscado pero no doy pie no soy tan experto en esto de delphi
Responder Con Cita
  #7  
Antiguo 04-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por webmasterplc Ver Mensaje
Disculpe he buscado pero no doy pie no soy tan experto en esto de delphi
Hola.

Aunque la traducción del error es clara: "formadepago: identificador no declarado", por haber efectuado cambios, me refería que revisaras que si por ejemplo el record está declarado:
Código Delphi [-]
type
  TMiRegistro = record
    ...
  end;
En la cabecera de los procedimientos figure:
Código Delphi [-]
procedure RecordToBlob(Rec: TMiRegistro; Blob: TBlobField);
...
También deberías revisar si "formadepago" está declarado con anterioridad.

Por lo que leí del manual de DBISAM 4, tal vez sería mejor declarar el segundo parámetro de tipo TDBISAMBlobStream, pero deberás realizar las pruebas correspondientes.

Lamentablemente, al no poseer esos componentes, no me es posible hacerlo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 18-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Buenas voy encaminado pero me tranco este error [DCC Error] UnitFPago.pas(43): E2003 Undeclared identifier: 'TBlobField' stoy trabajando en delphi xe2
aca esta el troso de codigo

Código Delphi [-]
procedure TformFPago.btn1Click(Sender: TObject);
 type
RegFormadePago       =Record
  TipoPago  :  integer;
  BancoTarjeta  : string[40];
  Detalle          : string[90];
  RetencionIVA  : Boolean;
  MontoBsViejos : Double;
  MontoPago        : currency;
  NoEsEfectivo  : Boolean;
  end;
var
  fcccodigo:string;
  datospago:RegFormadePago;
  campoblob:TBlobField;
  bs:Tstream;
  codigo:string;

begin


end;

end.
Responder Con Cita
  #9  
Antiguo 29-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Lectura y Escritura de registros en Campos Blob

Hola estoy tratando de leer y excribir campos blob, la cual tengo la estructura, hago todo pero ahora no se como traer los camos a los edit y como actualizar los registros desde los edit, aca coloco el codigo a ver si alguien me puede ayudar uso bases de datos dbisam 4.

Código Delphi [-]
procedure TformFPago.btn1Click(Sender: TObject);
 type
RegFormadePago       =Record
  TipoPago  :  integer;
  BancoTarjeta  : string[40];
  Detalle          : string[90];
  RetencionIVA  : Boolean;
  MontoBsViejos : Double;
  MontoPago        : currency;
  NoEsEfectivo  : Boolean;
  end;

AFormadePago      = Array[0..9] of RegFormadePago;
var
  fcccodigo:string;
  datospago:RegFormadePago;
  campoblob:TBlobField;
  bs:Tstream;
  codigo:string;
  SQLSelect1,cfactura:String;

begin
SQLSelect1:= 'Select * from Scuentasxcobrar where FCC_NUMERO= :fccnumero';
cfactura:=edtfactura.Text;
  sqcxc.SQL.Text := SQLSelect1;
  sqcxc.ParamByName('fccnumero').AsString:=cfactura;
    sqcxc.ExecSQL;
  sqcxc.Open;
  while not sqcxc.Eof do
  Begin
    codigo:=sqcxc.FieldByName('FCC_NUMERO').AsString;
    campoblob:=sqcxc.FieldByName('FCC_FORMAPAGO') as tblobfield;
    bs := sqcxc.CreateBlobStream(campoblob, bmRead) ;
    bs.Seek(0,sofrombeginning);
    try
       bs.read(datospago,SizeOf(RegFormadePago));
    finally
       bs.Free;
    end;
    edt1.Text:=codigo;
    edt2.Text:=currtostrf(datospago.montopago,ffCurrency,2);
    sqcxc.Next;
  End;


end;
Responder Con Cita
  #10  
Antiguo 29-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, no abras nuevos hilos para tratar el mismo tema, continua en este hasta que lo resuelvas, gracias.
No olvides nuestra guía de estilo. Punto 6.
Cita:
Si no me contestais ¿Vuelvo a abrir otro tema?
Nadie me contesta

Si te encuentras en esta situación, te aconsejaría que en vez de abrir otro tema, con lo que podría perderse información previa sobre el tema que expusiste en un principio, siguieses el tema que tu mismo iniciaste en su día, escribiendo una nueva contestación. De esta manera el tema se actualizará y pasará a la cabecera del foro, y se marcará como no leido para el resto de usuarios. Así evitamos duplicar información innecesariamente.
Otro motivo por el que es posible que no te hayan contestado es porque puedes haberte explicado mal. Sería conveniente en este caso que trataras de ampliar la información que has escrito en el primer mensaje de tu tema. Así podrías ayudar al resto de usuarios a que respondan más claramente.
Responder Con Cita
  #11  
Antiguo 30-10-2012
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Cita:
Empezado por webmasterplc Ver Mensaje
Hola estoy tratando de leer y excribir campos blob, la cual tengo la estructura, hago todo pero ahora no se como traer los camos a los edit y como actualizar los registros desde los edit, aca coloco el codigo a ver si alguien me puede ayudar uso bases de datos dbisam 4.

Código Delphi [-]
procedure TformFPago.btn1Click(Sender: TObject);
 type
RegFormadePago       =Record
  TipoPago  :  integer;
  BancoTarjeta  : string[40];
  Detalle          : string[90];
  RetencionIVA  : Boolean;
  MontoBsViejos : Double;
  MontoPago        : currency;
  NoEsEfectivo  : Boolean;
  end;

AFormadePago      = Array[0..9] of RegFormadePago;
var
  fcccodigo:string;
  datospago:RegFormadePago;
  campoblob:TBlobField;
  bs:Tstream;
  codigo:string;
  SQLSelect1,cfactura:String;

begin
SQLSelect1:= 'Select * from Scuentasxcobrar where FCC_NUMERO= :fccnumero';
cfactura:=edtfactura.Text;
  sqcxc.SQL.Text := SQLSelect1;
  sqcxc.ParamByName('fccnumero').AsString:=cfactura;
    sqcxc.ExecSQL;
  sqcxc.Open;
  while not sqcxc.Eof do
  Begin
    codigo:=sqcxc.FieldByName('FCC_NUMERO').AsString;
    campoblob:=sqcxc.FieldByName('FCC_FORMAPAGO') as tblobfield;
    bs := sqcxc.CreateBlobStream(campoblob, bmRead) ;
    bs.Seek(0,sofrombeginning);
    try
       bs.read(datospago,SizeOf(RegFormadePago));
    finally
       bs.Free;
    end;
    edt1.Text:=codigo;
    edt2.Text:=currtostrf(datospago.montopago,ffCurrency,2);
    sqcxc.Next;
  End;


end;
Ok Luego de la Ayuda de muchos he podido llegar hasta aqui, aqui tengo los datos del campo blob solo me falta visuaizarlo para modificarlos y pasarlos nuevamente al campo blob.

solo que en cada registro se guardan varias formas de pago identificadas por un intenger y no se como buscar un registro en particular en un record

por ejemplo las formas de pago en la variable la variable TipoPago son :
0= Efectivo
1= Cheque
2= Tarjeta Debito
3= Tarjeta Credito
4= Giros
5= PAdelantado
6= Retencion
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
Leer datos de campo tipo blob Dens SQL 17 15-06-2017 20:15:30
Leer JPEG o BitMap de campo blob ElMug Conexión con bases de datos 3 24-07-2012 03:03:39
insertar un archivo en un campo blob desde delphi thelibmx Varios 22 21-12-2007 21:45:18
¿Como Guardar un Bmp/Jpg en un campo BLOB desde Delphi? LuCkY_007 MySQL 4 18-01-2007 12:05:26
Leer un campo BLOB con PHP mcaar Oracle 0 18-11-2004 14:15:56


La franja horaria es GMT +2. Ahora son las 22:27:16.


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