Delphi 如何在名称中包含冒号的表上运行查询?

Delphi 如何在名称中包含冒号的表上运行查询?,delphi,ms-access,query-string,query-parameters,Delphi,Ms Access,Query String,Query Parameters,我正在从.mdb文件(MSAccess 2000格式)读取数据。有些表的名称中有冒号。当我尝试打开这些表上的查询时,出现异常: EOleException with message 'Parameter object is improperly defined. Inconsistent or incomplete information was provided'. 这是我的代码: procedure TForm1.Button1Click(Sender: TObject); var Q

我正在从.mdb文件(MSAccess 2000格式)读取数据。有些表的名称中有冒号。当我尝试打开这些表上的查询时,出现异常:

EOleException with message 'Parameter object is improperly defined. Inconsistent or incomplete information was provided'.
这是我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  Query: TADOQuery;
begin
  Query := TADOQuery.Create(nil);
  Query.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
    'Data Source=DB.mdb;Persist Security Info=False';
  Query.SQL.Text := 'select * from [Table1:1]';
  try
    Query.Open;
  finally
    Query.Free;
  end;
end;

TQuery
将解释

设置
ParamCheck:=false
,然后设置
SQL.Text

procedure TForm1.Button1Click(Sender: TObject);
var
  Query: TADOQuery;
begin
  Query := TADOQuery.Create(nil);
  Query.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
    'Data Source=DB.mdb;Persist Security Info=False';
  Query.ParamCheck:= false;
  Query.SQL.Text := 'select * from [Table1:1]';
  try
    Query.Open;
  finally
    Query.Free;
  end;
end;
现在它起作用了

组合冒号表/列名和参数
如果您必须使用带有冒号的表/列名,并且仍然希望在查询的其他位置使用参数,则可以使用宏来填充表/列名。
但这需要FireDac。 我建议您对此要非常小心,因为与参数不同,宏对SQL注入是不安全的


请参阅:

我正在检查其他语言的解决方案。然而,这似乎是正确的,但发布的也适用于Delphi/Access案例:

在tablename周围使用backticks`应该允许参数检查忽略它

Query.SQL.Text := 'select * from `Table1:1`';

此选项还可以与使用查询字符串中的参数结合使用。

不要忘记删除以前可能添加的任何参数。检查
参数
属性。@GolezTrol:不设置
SQL.Text
自动清除
参数
?如果将ParamCheck设置为false,我认为不会。它只留下参数,这样您就可以自己管理它们了。99%肯定我不知道Delphi,但MS Access从不使用反勾号。带有空格等的表/字段名始终需要[方括号]。@Andre我刚刚在MS Access 2007中创建了一个查询,并在SQL视图中键入了此查询字符串。它显示的结果没有问题。你是对的(我错了)-反勾号可以用来代替方括号。令人惊讶。:)<代码>从[Tabelle1:1]中选择[Tabelle1:1].ID,`Tabelle1:1`.`nix:dings`可以工作,如果没有反勾号就不行了。我猜TQuery特例是backticks,但不特例是
[