Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Salvar un array of byte en firebird? (https://www.clubdelphi.com/foros/showthread.php?t=85111)

sonjeux 29-01-2014 23:06:44

Salvar un array of byte en firebird?
 
Saludos, alguien sabe como podria salvar un record de un array[0..16384-1] of byte en un campo en una base de datos firebird? que tipo de campo necesito? Blob? y como lo recuperaria? :confused:

Ejemplo (Quiero salvar este tipo de dato)

Código Delphi [-]
Template = record
    ftemplate: array[0..16384-1] of byte;
end;

muchas gracias por su tiempo.

ecfisa 30-01-2014 00:14:36

Hola sonjeux.

Un ejemplo simple desde cero:
Código SQL [-]
CREATE TABLE PRUEBA(
  BYTEARRAY BLOB SUB_TYPE 1
);

Código Delphi [-]
...
const
   MAX = 100;

type
  TTemplate = record
    ftemplate: array[0..MAX] of byte;
  end;

var
  T: TTemplate;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  IBDataSet1.Open;
end;

procedure TForm1.btnWriteClick(Sender: TObject);
var
  i: Integer;
  S: TStream;
begin
  // darle unos valores al arreglo ...
  for i:= 0 to MAX do  T.ftemplate[i]:= Random(255);
  // guardar
  with IBDataSet1 do
  begin
    Append;
    S:= CreateBlobStream(FieldByName('BYTEARRAY'), bmReadWrite);
    try
      S.Seek(0, soBeginning);
      S.WriteBuffer(T, SizeOf(T));
      Post;
    finally
      S.Free;
    end;
  end;
end;

procedure TForm1.btnReadClick(Sender: TObject);
var
  S: TStream;
  i: Integer;
begin
  // leer valor registro actual
  with IBDataSet1 do
  begin
    S:= TMemoryStream.Create;
    try
      TBlobField(FieldByName('BYTEARRAY')).SaveToStream(S);
      S.Position:= 0;
      S.Read(T.ftemplate,SizeOf(T.ftemplate));
    finally
      S.Free;
    end;
  end;
  // mostrar en ListBox
  ListBox1.Clear;
  for i:= 0 to MAX do
    ListBox1.Items.Add(IntToStr(T.ftemplate[i]))
end;

Saludos :)

sonjeux 30-01-2014 00:57:02

Barbaro, muchas gracias voy a probar :)

Casimiro Notevi 30-01-2014 01:34:19

Cita:

Empezado por ecfisa (Mensaje 472212)
Un ejemplo simple desde cero:

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 18:01:15.

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