Delphi で SQLite と FireDAC を一緒に使用するように独学しています。私はデータベースやツールの最新版にあまり慣れていないので、SQLite ファイルから単一のテーブルを表示するための非常に単純なアプリケーションを作成した後、学習に役立つ単純なビューアー「フレーム」を作成することにしました。 (最終的には)エンジニアリング用のアプリケーションに入れるデバッグツールをください。
そこで、単純な TTreeView を使用して、「データベース」(カタログ?)、「テーブル」、「フィールド名」、および「フィールド タイプ」の階層を設定したいと考えています。これまでのところ、(TFDConnection.Getxxxxx を使用して) カタログ、テーブル、およびフィールドを一覧表示するのは非常に簡単でしたが、フィールド定義を取得するためにさらに深く掘り下げる方法がわかりません。これは TFDConnection から実行できますか? または、一時クエリを開く必要がありますか?
既存のコードを以下に示します。「// xxxxxxxxxxxxxxxxxxx」のように表示すると、「フィールド タイプ」はさらにネストされたループになります。
procedure TForm1.Button1Click(Sender: TObject);
procedure DatabaseToTreeView( AConnection : TFDConnection; ATreeView : TTreeView );
procedure ProcessConnection;
procedure ProcessCatalogueName( const ACatalogueName : string; ARoot : TTreeNode );
procedure ProcessTableName( const ATableName : string; ARoot : TTreeNode );
var
List : TStrings;
{Node : TTreeNode;}
I : integer;
begin
List := TStringList.Create;
try
AConnection.GetFieldNames( ACatalogueName, '', ATableName, '', List );
for I := 0 to List.Count-1 do
begin
{Node := }ATreeView.Items.AddChild( ARoot, List[I] );
// xxxxxxxxxxxxxxxxxxx
end;
finally
List.Free;
end;
end;
var
List : TStrings;
Node : TTreeNode;
I : integer;
begin
List := TStringList.Create;
try
AConnection.GetTableNames( ACatalogueName, '', '', List );
for I := 0 to List.Count-1 do
begin
Node := ATreeView.Items.AddChild( ARoot, List[I] );
ProcessTableName( List[I], Node );
end;
finally
List.Free;
end;
end;
var
List : TStrings;
Node : TTreeNode;
I : integer;
begin
List := TStringList.Create;
try
AConnection.GetCatalogNames( '', List );
if List.Count = 0 then
ProcessCatalogueName( '', nil )
else
for I := 0 to List.Count-1 do
begin
Node := ATreeView.Items.AddChild( nil, List[I] );
ProcessCatalogueName( List[I], Node );
end;
finally
List.Free;
end;
end;
begin
ATreeView.Items.Clear;
ATreeView.Items.BeginUpdate;
try
ProcessConnection;
finally
ATreeView.Items.EndUpdate;
end;
end;
begin
FDConnection1.Open;
FDQuery1.Active := true;
DatabaseToTreeView( FDConnection1, TreeView1 );
end;
どうもありがとう、ブライアン。