gpt4 book ai didi

sqlite - 如何使用 FireDAC TFDConnection 迭代表、字段和字段定义

转载 作者:行者123 更新时间:2023-12-03 15:32:50 25 4
gpt4 key购买 nike

我正在自学在 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;

非常感谢,布莱恩。

最佳答案

一种解决方案是实例化 TFDTable,将其连接到 AConnection 并调用 FieldDefs.Update。这不会获取任何数据。

关于sqlite - 如何使用 FireDAC TFDConnection 迭代表、字段和字段定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com