我尝试编写一个小型数据库管理应用程序来比较我们的实时和开发数据库模式
目前我可以使用单个TSQL连接来获取MySQL(5.0)服务器上的Schema列表,当我尝试直接访问模式时会出现问题。
我想选择一个模式,并在列表框中显示该模式中的所有表。
下面的过程会编译,但是当它遇到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,看起来正在通过OK。
我已经尝试使用Open而不是ExecSQL,并得到相同的错误。我还尝试在声明的末尾添加;
。
除非我失明,否则我想知道问题是否与dbExpress相关
有人知道吗?
答案 0 :(得分:3)
必须有另一个原因,这不起作用 通常这应该有效;
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;
答案 1 :(得分:0)
原来问题是with
的嵌套和我选择的参数名称的组合。
TSQLQuery有一个名为schemaname
的属性,我认为编译器与我同名的参数混淆了。
调试器在检查器中正确报告参数值时没有抓住这个...