如何 运行 对名称中包含冒号的 table 进行查询?
How to run a query on a table that has colon in its name?
我正在从 .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
将解释 :
if ParamCheck = true
.
设置 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;
现在可以了。
合并带冒号的 table/column 名称和参数
如果您绝对必须使用 table/column 名称中带有冒号的路径,并且仍想在查询的其他地方使用参数,那么您可以使用宏来填充 table/column 名称。
不过这需要 FireDac。
我确实建议你对此非常小心,因为与参数宏不同,宏不能安全地防止 SQL 注入!
参见:http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FireDAC.TFDQuery.Macros_Sample
我正在检查其他语言的解决方案。但是 seems to be the right one, but the one posted here 也适用于 Delphi/Access 情况:
在您的表名周围使用反引号 ` 应该允许它被参数检查忽略。
Query.SQL.Text := 'select * from `Table1:1`';
这个也可以结合在查询字符串中使用参数。
我正在从 .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
将解释 :
if ParamCheck = true
.
设置 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;
现在可以了。
合并带冒号的 table/column 名称和参数
如果您绝对必须使用 table/column 名称中带有冒号的路径,并且仍想在查询的其他地方使用参数,那么您可以使用宏来填充 table/column 名称。
不过这需要 FireDac。
我确实建议你对此非常小心,因为与参数宏不同,宏不能安全地防止 SQL 注入!
参见:http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FireDAC.TFDQuery.Macros_Sample
我正在检查其他语言的解决方案。但是
在您的表名周围使用反引号 ` 应该允许它被参数检查忽略。
Query.SQL.Text := 'select * from `Table1:1`';
这个也可以结合在查询字符串中使用参数。