https://docwiki.embarcadero.com/RADStudio/Sydney/en/Querying_Metadata_(FireDAC)

 不必这样麻烦

也可以代码里直接 运行SQL语句

if  FDconnection1.Connected then   
FDConnection1.ExecSQL('INSERT INTO MyTable(姓名,语文, 数学, 英语) VALUES(''AA'', 11,22,33), (''BA'', 11,22,33), (''CA'', 11,22,33) ');

 

 还可获取 当前数据库中的 所有自定义的表名和 表结构字段

ADOConnetion也有这样的功能

    ADOConnection1.GetTableNames(TbList, FALSE);
    ADOConnection1.GetFieldNames(aTableName,FiledLists);

 

procedure TForm3.Button2Click(Sender: TObject);
var      aStringList ,bStringlist :TStringList;
begin
   aStringList  :=TStringList.Create;
   bStringlist  :=TStringList.Create;
    Memo1.Clear;
  FDConnection1.GetTableNames('', '', '', aStringList);
   Memo1.Lines.Add(#13#10'==> 获取数据库中的表名列表:');
   Memo1.Lines.AddStrings(aStringList);

 if aStringList.Count>0 then  begin      // 第一个表的 表结构
  FDConnection1.GetFieldNames('', '', aStringList.Strings[0], '', bStringlist);
  Memo1.Lines.Add(#13#10'==> 获取 '+ aStringList.Strings[0] +'表中的字段名列表:');
  Memo1.Lines.AddStrings(bStringlist);
 end;

  aStringList.Free;
  bStringlist.Free;
end;
FDConnection1.GetKeyFieldNames('', '', 'ddd', '', ListBox2.Items);//ddd 为表名,获得关键列 名 

某表是否存在

//aTableName 表是否存在    myTable,  MyTable ,mytable不区分大小写
function TForm3.aTableIsExist(aTableName: string): boolean;
var   aStringlist  :TStringList ; i:integer;
begin
  result:=false;
   aStringlist  :=TStringList.Create;

   FDConnection1.GetTableNames('', '', '', aStringList);
   for i := 0 to aStringList.Count - 1 do
      if  lowerCase(aStringList[i]) = lowerCase( aTableName) then begin
       result:=true;
       break;
     end;

   aStringlist.Free;
end;

调用 

procedure TForm3.Button1Click(Sender: TObject);
begin                        {string类型直接显示}  {text类型不显示,只显示(WIDEMEMO)}
{ 如果 表 不存在,则 创建  MyTable 的表, 字段包括: ID, Name, Age, Note}
if FDConnection1.Connected and (not aTableIsExist('MyTable') ) then
  FDConnection1.ExecSQL('CREATE TABLE MyTable(ID integer PRIMARY KEY, Name string(10), Age integer, Note string)');
end;

 

//返回 影响 条数
i:= FDConnection1.ExecSQL(memo1.Lines.Text);