mysql - Delphi (dbExpress) 可以跨模式使用 SHOW TABLES 吗?

标签 mysql sql delphi delphi-xe2 dbexpress

我尝试编写一个小型数据库管理应用程序来比较我们的实时和开发数据库模式

目前我可以使用单个 TSQL 连接获取 MySQL (5.0) 服务器上的模式列表,当我尝试直接访问模式时出现问题。

我想选择一个模式并在列表框中显示该模式中的所有表。

下面的过程可以编译,但是当它到达 ExecSQL 时会失败并显示“您的语法有错误”消息。

procedure TDM.GetTables(schemaname: string);
begin
   with SQLQuery1 do
   begin
      SQL.Clear;
      SQL.Add('SHOW TABLES FROM ' + schemaname);
      ExecSQL;
   end;
end;

Schemaname 来自使用 GET SCHEMAS 播种的 tcombobox,看起来可以顺利通过。

我已经用 Open 而不是 ExecSQL 尝试了上面的操作,但得到了同样的错误。我还尝试将 ; 附加到语句的末尾。

除非我是瞎子,否则我想知道问题是否出在 dbExpress 上

有人知道吗?

最佳答案

一定有另一个原因导致它不起作用。
通常这应该有效;

 SQL.Add('SHOW TABLES FROM ' + schemaname);

相反,您可以尝试这样做:

with SQLQuery1 do
   begin
      close;
      SQL.Clear;
      SQL.Add('SELECT table_name FROM INFORMATION_SCHEMA.TABLES'+
              ' WHERE table_schema = "'+schemaname+'"');
      Open;
   end;

关于mysql - Delphi (dbExpress) 可以跨模式使用 SHOW TABLES 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790528/

相关文章:

windows - Delphi在exe/dll中添加和使用多个资源文件*.RES

Delphi var参数从程序内部设置长度

sql - 工作表范围内定义的名称的表名称是什么?

java - 通过jsp页面将表单数据插入到数据库中两个不同的表中

mysql - 查找在给定时间段内发生 x 次的事件

sql - postgreSQL 将列数据类型更改为没有时区的时间戳

Android MMS 数据库,从神秘列中按日期选择行

SQL Server 求和和减法防止空结果

mysql - 在与 ActiveRecord 的多对多关系上使用带顺序的不同方法

php - 对列 C、D 进行分组/求和的 SQL 查询,当 A、B 相等时