Delphi のサンプル フォルダを見ると、LiveBindings フォルダの下に BindGridLinkVCLProject という名前の例が見つかるはずです (既に使用している可能性があります)。
これは、ライブ バインディングを使用してStringGrid
からにデータを入力するTDataSet
方法と、それを使用してデータベースに保存されているイメージをロードする方法を示しています。これは、 に表示されている現在のレコードに基づいていますStringGrid
。
ClientDataSet
標準 (Borland) Biolife データベース (別名 FishFacts) のデータをロードして使用します。ClientDataSet
確認したところ、 を FireDAC のものに置き換えることができます(TFDMemTable
サンプル データの形式に Biolife DB も含まれているため、 を使用しました)。Ken White がコメントで述べたように、Firebird データベースを使用していることに違いはありません (もちろん、どの FireDAC データセット タイプを使用するかを除きます)。
また、2 つ目の FireDAC データセットを使用してルックアップを実行し、画像を取得して にロードできることも確認しましたTImage
。以下にその方法を示します。
BindGridLinkVCLProject デモ プロジェクトでは、データの Graphic 列に魚の画像が含まれており、TImage
Livebinding 経由で表示されます。
このデモ プロジェクトを別の場所から画像を取得するように変更するのTDataSet
は簡単です (ただし、以下で説明する内容では、Biolife データセットの 2 番目のコピーを使用するだけです)。ClientDataSet の代わりに FireDAC データセットを使用します。(もちろん、Biolife データには既に画像データが含まれているため、これは人為的な例ですが、ライブ バインディングを使用しても、必要に応じて別のデータセットから画像を簡単に取得できることを以下に示します。)
次のことを試してください。
プロジェクトとその GridLinkFormUit1.Pas ファイルのコピーを作成します。
に置き換えClientDataSet1
ますFDMemTable
。
DataSource1
とをポイントBindSourceDB1
しFDMemTable1
ます。
FDMemTable1
Samples Data フォルダーの Biolife.Fds ファイルから読み込みます (IDE で右クリックします) 。
この時点でStringGridWithBindColumns
、Biolife データが表示され、ImageWithHandler
TImage は現在の魚の写真を表示するはずです。今、
ダブルクリックBindingList1
し、ポップアップで Bind Component for を削除しImageWithHandler
ます。これを以下の別の BindingList に追加します。
フォームに 2 つ目の FDMemTable を追加し、 と同じデータをロードしますFDMemTable1
。
DataSource
2 番目のandBindingList
をフォームに追加します。をポイントDataSource2
し
FDMemTable2
ます。
次に、 をダブルクリックBindingList2
し、エディターを使用して のGraphic
フィールドFDMemTable2
とImageWithHandler
TImage の間に新しいバインディングを追加します (これを接続する方法については、以下の DFM を参照してください。バインディング エディターは自動的に作成BindSourceDB2
する必要があり、そのDataSet
およびDataSource
プロパティをFDMemTable2
およびに設定する必要がありますDataSource2
。
次に、次のコードをフォームのユニットに追加し、コンパイルして実行します。
TGridLinkForm1 = class(TForm)
[...]
public
{ Public declarations }
DataFileName : String;
end;
procedure TGridLinkForm1.FormCreate(Sender: TObject);
begin
DataFileName := 'D:\xe8\samples\Data\Biolife.Fds';
if not FDMemTable2.Active then
FDMemTable2.LoadFromFile(DataFileName);
if not FDMemTable1.Active then
FDMemTable1.LoadFromFile(DataFileName);
end;
procedure TGridLinkForm1.FDMemTable1AfterScroll(DataSet: TDataSet);
var
SpeciesNo : Double;
begin
SpeciesNo := FDMemTable1.FieldByName('Species No').AsFloat;
if not FDMemTable2.Locate('Species No', SpeciesNo, []) then
raise Exception.CreateFmt('SpeciesNo %n not found in %s', [SpeciesNo, FDMemTable2.Name]);
end;
DFM 抽出:
object FDMemTable2: TFDMemTable
FetchOptions.AssignedValues = [evMode]
FetchOptions.Mode = fmAll
ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
ResourceOptions.Persistent = True
ResourceOptions.SilentMode = True
UpdateOptions.AssignedValues = [uvCheckRequired]
UpdateOptions.CheckRequired = False
Left = 24
Top = 392
end
object DataSource2: TDataSource
DataSet = FDMemTable2
Left = 88
Top = 392
end
object BindSourceDB2: TBindSourceDB
DataSource = DataSource2
ScopeMappings = <>
Left = 236
Top = 392
end
object BindingsList2: TBindingsList
Methods = <>
OutputConverters = <>
Left = 152
Top = 392
object LinkControlToField1: TLinkControlToField
Category = 'Quick Bindings'
DataSource = BindSourceDB2
FieldName = 'Graphic'
Control = ImageWithHandler
Track = False
end
end