リンクする記事は、.xml のようなファイルではなく、プレーンな XML ファイルを記述しますBiolife.xml
。グラフィックはプレーン XML ファイルに保存できません (書き込み時にエンコードし、読み取り時にデコードする必要があります)。グラフィックはバイナリ データであり、標準の XML には適していないため (また、文字列に格納してからTFileStream
.
Biolife.xml
グラフィックファイルではありません。これはTClientDataSet
(略して CDS) であり、XML 形式で保存されます。XML 拡張子が付いていますが、リンク先の記事が作成しているような単純な XML ファイルとはかけ離れています。
(これが TLDR の場合は、Short Answerとマークされたさらに下の段落までスキップしてください。)
TClientDataSet
バイナリ形式または XML 形式でファイルに永続化 (保存) できるメモリ内データセットです。つまり、これは特殊なタイプのデータベースです。(詳細については、私の回答のさらに下を参照してください。)
Paradox には、格納して直接使用できるグラフィックスの種類に制限がありますが、TGraphicField
それらが手に負えなかったものを覚えていません。(Paradox は、Borland Database Engine (BDE) を介してアクセスされます。Paradox は、10 年以上前から廃止されており、1990 年代半ばの Delphi 1 以降は使用していません。TGraphicField
)TGraphicField.SetFieldType
メソッドの Delphi 7 ヘルプ ファイルに保存します。受け入れられると思われる唯一の実際の画像ファイルftGraphic
は、ビットマップである です。
Delphi 7のFishFacts
デモは、ストレージ メカニズム IIRC に Paradox データベースを使用するため、Paradox グラフィックスを操作する方法を示しています。これは、C:\Program Files\Borland\Delphi7\Demos\DB\FishFacts
Windows XP の既定のインストールのフォルダーにあります。BioLife.cds
ディレクトリには(.cds
はバイナリ形式のTClientDataSet
ストレージの既定の拡張子)もありますC:\Program Files\Borland Shared\Data
。
つまり、Biolife.xml
ファイルに.XML
拡張子が付いていることに惑わされないでください。を介してアクセスする場合を除いて、ほとんど役に立たない特別な形式のファイルですTClientDataSet
。(メモ帳などのテキスト エディターで開きます。通常の XML ファイルは構造が明確で読みやすいのに対し、CDS XML ファイルは整理整頓されていません。
Borland Developer サイトにはTClientDataSet
、Cary Jensen による使用に関する記事がいくつかありました。Cary Jensen は、Delphi でのデータベース プログラミングに関する本や記事をいくつか書いています。彼は、 likeA ClientDataSet in Every Database Application
を使用したい場合は、それで始まる優れたシリーズを書きました。TClientDataSet
Biolife.xml
簡単な答え: グラフィックを ParadoxTGraphicField
に保存する場合は、実際のグラフィック イメージをサポートされている形式でそのフィールドに保存するか、実際のグラフィック ファイルを作成してLoadFromStream
またはで保存しますLoadFromFile
。ただし、実際のグラフィック ファイル (ビットマップなど) である必要があります。それは、フィールドに入れたいものだけではありません。
投稿したコードに基づいて機能するものの例:
var
Bmp: TBitmap;
BmpField: TGraphicField;
begin
BmpField := table1.FieldByName('Im') as TGraphicField;
Bitmap := TBitmap.Create;
try
Bitmap.Width := Panel1.Width;
Bitmap.Height := Panel1.Height;
Panel1.PaintTo(Bitmap.Canvas.Handle, 0, 0);
table1.Edit;
BmpField.Assign(Bitmap);
table1.Post;
finally
Bitmap.Free;
end;
end;
TClientDataSet
likeを使用しBiolife.xml
てデータを保存する場合は、次の方法で開始します。
You can find TClientDataSet
on the Component Palette in the Data Access
tab in Delphi 7. 他の と同じように機能します。TDataSet
つまり、永続フィールドの定義、データの挿入/削除/編集、フィルター、インデックスの作成などを行うことができます。
使い方の基本は簡単です。フォームにドロップして、ファイル名を割り当てるだけです。それを右クリックしFields Editor...
、ポップアップ メニューから選択します。が表示されたら右クリックし、[ ]Fields Editor
を選択しますNew Field
。他のデータセットと同様に、保存するフィールドとそのタイプを定義します。CDS に必要なすべてのフィールドを追加するまで繰り返します。次に、を閉じて、もう一度Field Editor
右クリックします。以前にはなかっTClientDataSet
たオプションが表示されます。Create Dataset
それを選択すると、新しいデータセットが作成されます。
Locate
これで、インデックスの作成、レコード (行) の挿入、編集、および削除、検索 (を使用)、フィルターなど、通常どおり使用できます。TDataSource
他のデータセットと同様に、 などの任意のデータ対応コントロールに( を介して) 接続できますTDBGrid
。また、「通常の」XML では非常に難しい、グラフィック フィールドやメモ フィールドを作成することもできます。CDS がすべてのエンコードとデコードを処理します。