【问题标题】:Can Delphi (dbExpress) use SHOW TABLES across Schemas?Delphi (dbExpress) 可以跨模式使用 SHOW TABLES 吗?
【发布时间】:2013-09-13 15:55:07
【问题描述】:

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

目前我可以使用单个 TSQLconnection 来获取 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 上

有人知道吗?

【问题讨论】:

    标签: mysql sql delphi delphi-xe2 dbexpress


    【解决方案1】:

    这肯定有另一个原因不起作用。
    通常这应该可以工作;

     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;
    

    【讨论】:

    • 这就是我在使用 TSQLCONnection.GetTableNames 之后使用 Columns 的路线,它也可以工作。这对我正在尝试做的事情更好,但没有解释 为什么 SHOW TABLES 不起作用...
    【解决方案2】:

    原来问题是with 的嵌套和我选择的参数名称的组合。

    TSQLQuery 有一个名为schemaname属性,我认为编译器与我的同名参数 混淆了。

    调试器在检查器中正确报告参数的值并没有帮助捕捉到这一点...

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2011-10-06
      相关资源
      最近更新 更多