Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Запись и чтение чисел в Blob-поле

Автор: Ralph Friedman

Болтают трое молодых программистов о жизни. Двое холостых и один женатый.
- Зря вы говорите, что жениться sux, вот я жене на домашнем компе права админа дал!

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

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


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.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay