Delphi Tips 
-----------------------------

キーワード:DataAccess

>> Index

01/12 ファイルを作らずメモリ上で動作する TTable コンポーネント
08/26 書式付きメモ型項目へアクセスしたい

最終更新: 6286 日前

0129  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.4
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2007/01/12 RAN 編集
ファイルを作らずメモリ上で動作する TTable コンポーネント

>前どこかで TTable 互換でメモリ上で動作するコンポーネントを見かけたのです
>が、ご存知な方いらっしゃいませんか? (その時にダウンロードしておけばよかっ
>た...)

[1]

Delphi Super Pageに昔からあるコンポーネントです。
BDEのインメモリテーブルと一時テーブルの機能を使ったものです。

http://sunsite.icm.edu.pl/delphi/
(2007年現在はhttp://delphi.icm.edu.pl/authors/a0000561.htm に移動)
ファイル名:inmemory.zip および inmem32.zip
※サンプル付きです。

Delphi1.0用のほうを、Delphi3で使用するときの修正点は以下のとおりです。32ビット版が出ているのでもう必要無いのかな?
#Inmemユニット:
#  TypeMapで配列の最後に「, fldCURSOR」を追加。
#  SubTypeMapで配列の最後に「, 0」を追加。
#TempTblユニット:
#  TypeMapで配列の最後に「, fldCURSOR」を追加。
#  SubTypeMapで配列の最後に「, 0」を追加。
※Register手続きがありませんので、追加してください。

>これがあればテンポラリのテーブルをいちいちディスクに作成しなくても済んで
>しまうため(結果的に作られるとしても)、便利なのですが...

 そうなんですが、デバッグのとき、値を確認しにくいと思いますよ。

[2]

> ひょっとして http://delphideli.com/dlnbde.htm にある TMemTable のことでしょうか。

僕が前見たのは確かシェアウエアだったのですが、これはフリーでしかもソース付き。嬉しい限りです。

[3]

最近のDelphi では標準でMyBase が利用できます。
http://hp.vector.co.jp/authors/VA028375/delphi/db.html が分かりやすいです。
参照: [Delphi-ML:22981] [Delphi-ML:22983] <データベース> <コンポーネント >

0217  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/08/26 西坂良幸 rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/08/26 西坂良幸 編集
書式付きメモ型項目へアクセスしたい


ヘルプなどでは、Streamをつかった方法が紹介されています。

DataSet.FieldByName('Field1').AsString := RichEdit1.Text;

DataSet.FieldByName('Field1').AsVariant := RichEdit1.Text;

では、PlainText となり、書式が保存されません。

 Field1  書式付きメモ型とし、
 DataSetは開かれているとします。

// リッチエディットからフィールドへの書き込み
procedure TForm1.Button8Click(Sender: TObject);
var
  Stream1 : TMemoryStream;
begin
  Stream1 := TMemoryStream.Create;
  try
    RichEdit1.Lines.SavetoStream(Stream1);
    Query1.Edit;
    TBlobField(Query1.FieldByName('Field1')).LoadFromStream(Stream1);
    Query1.Post;
  finally
    Stream1.Free;
  end;
end;

// フィールドからリッチエヂットへの読み出し
procedure TForm1.Button4Click(Sender: TObject);
var
  Stream1 : TBlobStream;
begin
  Stream1 := TBlobStream.Create(TBlobField(Query1.FieldByName('Field1')), bmRead);
  try
    RichEdit1.Lines.LoadFromStream(Stream1);
  finally
    Stream1.Free;
  end;
end;


TRichEdit系は、いくつかのバグが報告されています。
データが大きくなるとヤバイという噂です。
D4では、大部改善されたようですが、気をつけて下さい。

バグ情報は
http://www.dataweb.nl/~r.p.sterkenburg/indexpag.htm
参照: [Delphi-ML:5484] [Delphi-ML:41858] <データベース> <コンポーネント >

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords

Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp