我正在教自己在 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;
非常感谢,布赖恩。