PDA

Ver la Versión Completa : Salvar un array of byte en firebird?


sonjeux
29-01-2014, 23:06:44
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)

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:

CREATE TABLE PRUEBA(
BYTEARRAY BLOB SUB_TYPE 1
);



...
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
Un ejemplo simple desde cero:^\||/^\||/^\||/