Запись и чтение чисел в Blob-поле

Previous  Top  Next

    
 

 

 

 

Мне нужно записать серию чисел в файл Paradox в blob-поле. Числа получаются из значений компонент, размещенных на форме. Затем мне нужно будет считывать числа из blob-поля и устанавливать согласно им значения компонент. Как мне сделать это?

 

Вы можете начать свое исследование со следующего модуля:

Code:

unit BlobFld;

 

interface

 

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, Buttons, DBTables, DB, ExtCtrls, DBCtrls,

Grids, DBGrids;

 

type

TFrmBlobFld = class(TForm)

   BtnWrite: TBitBtn;

   Table1: TTable;

   DataSource1: TDataSource;

   DBNavigator1: TDBNavigator;

   LbxDisplayBlob: TListBox;

   Table1pubid: TIntegerField;

   Table1comments: TMemoField;

   Table1UpdateTime: TTimeField;

   Table1Real1: TFloatField;

   Table1Real2: TFloatField;

   Table1Real3: TFloatField;

   Table1Curr1: TCurrencyField;

   Table1Blobs: TBlobField;

   Table1Bytes: TBytesField;

   CbxRead: TCheckBox;

   procedure BtnWriteClick(Sender: TObject);

   procedure DataSource1DataChange(Sender: TObject; Field: TField);

   procedure FormShow(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

   { Private-Deklarationen }

public

   { Public-Deklarationen }

end;

 

var

FrmBlobFld: TFrmBlobFld;

 

implementation

 

{$R *.DFM}

 

type

ADouble = array[1..12] of double;

PADouble = ^ADouble;

 

procedure TFrmBlobFld.BtnWriteClick(Sender: TObject);

var

i: integer;

myBlob: TBlobStream;

v: longint;

begin

Table1.Edit;

 

myBlob := TBlobStream.Create(Table1Blobs, bmReadWrite);

try

   v := ComponentCount;

   myBlob.Write(v, sizeof(longint));

 

   for i := 0 to ComponentCount - 1 do

   begin

     v := Components[i].ComponentIndex;

     myBlob.Write(v, sizeof(longint));

   end;

finally

   Table1.Post;

   myBlob.Free;

end;

end;

 

procedure TFrmBlobFld.DataSource1DataChange(Sender: TObject; Field: TField);

var

i: integer;

myBlob: TBlobStream;

t: longint;

v: longint;

begin

if CbxRead.Checked then

begin

   LbxDisplayBlob.Clear;

 

   myBlob := TBlobStream.Create(Table1Blobs, bmRead);

   try

     myBlob.Read(t, sizeof(longint));

     LbxDisplayBlob.Items.Add(IntToStr(t));

 

     for i := 0 to t - 1 do

     begin

       myBlob.Read(v, sizeof(longint));

       LbxDisplayBlob.Items.Add(IntToStr(v));

     end;

   finally

     myBlob.Free;

   end;

end;

end;

 

procedure TFrmBlobFld.FormShow(Sender: TObject);

begin

Table1.Open;

end;

 

procedure TFrmBlobFld.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

Table1.Close;

end;

 

end.

©Drkb::02472

 

 

       

Взято с http://delphiworld.narod.ru

 

 

 


Как мне в таблице Paradox скопировать массив целочисленных чисел в TBlobField и наоборот? Элементы массива являются точками графика данных, который я хочу выводить, если запись доступна.

 

Запишите массив в поток памяти и затем используйте метод TBlob LoadFromStream. Для извлечения данных используйте метод TBlob SaveToStream (сохранение и извлечение массива из потока памяти).

©Drkb::02473

       

Взято с http://delphiworld.narod.ru