저는 SQLite 및 FireDAC을 함께 사용하도록 교육하고 있습니다. SQLite 파일에서 하나의 테이블을 표시하는 아주 간단한 응용 프로그램을 작성한 후에 나는 배우기에 도움이되는 간단한 뷰어 '프레임'을 만들 것이라고 결심했습니다. 엔지니어링 사용을 위해 내 응용 프로그램에 넣을 디버깅 도구를 (결국) 제공하십시오.FireDAC TFDConnection을 사용하여 테이블, 필드 및 필드 정의를 반복하는 방법
그래서 간단한 TTreeView를 사용했으며 '데이터베이스'(카탈로그), '테이블', '필드 이름'및 '필드 유형'의 계층 구조로 채우고 싶습니다. 지금까지 (TFDConnection.Getxxxxx를 사용하여) 카탈로그, 테이블 및 필드를 나열하는 것이 현저하게 쉬웠지만 필드 정의를 얻는 방법을 더 깊이 알 수는 없습니다. 이것은 TFDC 연결에서 할 수 있습니까? 아니면 임시 쿼리를 열어야합니까? 브라이언, '// 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;
많은 감사를 표시 할 때
내 기존의 코드는 다음과 같습니다 내 '필드 유형은'더 중첩 루프 될 것이다.
당신은 ['TADMetaInfoQuery'] (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADMetaInfoQuery.html) 클래스를 사용하고의'mkTableFields' 유형을 조회 할 수 있습니다 ['MetaInfoKind'] (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADMetaInfoQuery_MetaInfoKind.html). 그러면 'COLUMN_DATATYPE' 및'COLUMN_TYPENAME'이 반환됩니다 ([메타 데이터 구조] 참조 (http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=Metadata_Structure.html).). – TLama
@tlama : 이것은 나를 위해 일했으며 '올바른'방법 인 것 같습니다. 감사합니다. FD 문서에 대한 링크를 따라 가다 보면 "C : \ Users \ Public \ Documents \ RAD Studio \ 12.0 \ Samples \ Delphi \ Database \ FireDAC \ Samples \ Comp Layer \ TFDMetaInfoQuery"의 완벽한 예제 프로젝트를 발견하게되었습니다. 모두. 오 왜 왜 우리는 Delphi 예제와 그것들이하는 일에 대한 자세한 목록을 얻을 수 없습니다 !! –
여러분을 환영합니다! 그래, 그것은 당신의 작업에 가장 잘 맞는 구성 요소 인 것 같다. 그리고 네, 예제 설명 목록을 갖는 것이 좋을 것입니다. – TLama