UniQuery1想获得所有表名,代码该如何写?

时间:2021-12-27 08:07:43
使用UniQuery1控件连接MYSQL数据库,想获取数据库里所有的表名,在网上查到,MYSQL的指令是:show tables,在CMD模式下可以显示所有表名了,但用控件怎么操作?

  UniQuery1.SQL.Clear;
  UniQuery1.SQL.Text := 'show tables';
  UniQuery1.Execute;

这样写是如何把输出结果,读取出来?

8 个解决方案

#1


返回记录集应该用open

#2


引用 1 楼 jjpweb 的回复:
返回记录集应该用open


请问OPEN以后,该怎么写???能写个例子吗?

#3


close:
sql.text:='select table_name from information_schema.tables where table_schema=''csdb'' and table_type=''base table''';
open;
直接dbgrid就显示了吧。
或者
whilt not query.eof do
begin
  showmessage(query.fieldbyname('table_name').asstring);
  query.next;
end;

没有mysql的环境,你试下吧。

#4


引用 3 楼 jjpweb 的回复:
close:
sql.text:='select table_name from information_schema.tables where table_schema=''csdb'' and table_type=''base table''';
open;
直接dbgrid就显示了吧。
或者
whilt not query.eof do
begin
  showmessage(query.fieldbyname('table_name').asstring);
  query.next;
end;

没有mysql的环境,你试下吧。


不行,这个方法,只能用在先使用 select * from (表名) 这个命令后。问题是,我现在连表名都不知道,需要程序通过 show tables 来显示所有表名,在逐一查询数据,我在网上搜索了半天,只找到一个方法代码如下:

  Form2.UniQuery2.Close;
  Form2.UniQuery2.SQL.Clear;
  Form2.UniQuery2.Fields.Clear;
  Form2.UniQuery2.SQL.Add('show tables');
  Form2.UniQuery2.Open;
  str := Form2.UniQuery2.Fields[0].AsString;

但这个方法有问题,只能获得第一个表名,第二个就获取不了了,不知道为什么。

#5


whilt not Form2.UniQuery2.eof do
begin
  showmessage(Form2.UniQuery2.Fields[0].AsString);
  query.next;
end;

#6


whilt not Form2.UniQuery2.eof do
begin
  showmessage(Form2.UniQuery2.Fields[0].AsString);
  Form2.UniQuery2.next;
end;

#7


var tblList :TStringList;

TADOConnection连接数据库后,
ADOConnection1.GetTableNames(tblList);

即可获得数据库中,全部表。

#8


var
  lstTables: TStrings;
begin
...
//TODO open connection
...
UniConnection1.GetTableNames(lstTables,true);

#1


返回记录集应该用open

#2


引用 1 楼 jjpweb 的回复:
返回记录集应该用open


请问OPEN以后,该怎么写???能写个例子吗?

#3


close:
sql.text:='select table_name from information_schema.tables where table_schema=''csdb'' and table_type=''base table''';
open;
直接dbgrid就显示了吧。
或者
whilt not query.eof do
begin
  showmessage(query.fieldbyname('table_name').asstring);
  query.next;
end;

没有mysql的环境,你试下吧。

#4


引用 3 楼 jjpweb 的回复:
close:
sql.text:='select table_name from information_schema.tables where table_schema=''csdb'' and table_type=''base table''';
open;
直接dbgrid就显示了吧。
或者
whilt not query.eof do
begin
  showmessage(query.fieldbyname('table_name').asstring);
  query.next;
end;

没有mysql的环境,你试下吧。


不行,这个方法,只能用在先使用 select * from (表名) 这个命令后。问题是,我现在连表名都不知道,需要程序通过 show tables 来显示所有表名,在逐一查询数据,我在网上搜索了半天,只找到一个方法代码如下:

  Form2.UniQuery2.Close;
  Form2.UniQuery2.SQL.Clear;
  Form2.UniQuery2.Fields.Clear;
  Form2.UniQuery2.SQL.Add('show tables');
  Form2.UniQuery2.Open;
  str := Form2.UniQuery2.Fields[0].AsString;

但这个方法有问题,只能获得第一个表名,第二个就获取不了了,不知道为什么。

#5


whilt not Form2.UniQuery2.eof do
begin
  showmessage(Form2.UniQuery2.Fields[0].AsString);
  query.next;
end;

#6


whilt not Form2.UniQuery2.eof do
begin
  showmessage(Form2.UniQuery2.Fields[0].AsString);
  Form2.UniQuery2.next;
end;

#7


var tblList :TStringList;

TADOConnection连接数据库后,
ADOConnection1.GetTableNames(tblList);

即可获得数据库中,全部表。

#8


var
  lstTables: TStrings;
begin
...
//TODO open connection
...
UniConnection1.GetTableNames(lstTables,true);