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:^\||/^\||/^\||/
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.