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);