加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:00:44 所属栏目:大数据 来源:网络整理
导读:我正在从.mdb文件(MSAccess 2000格式)中读取数据.有些桌子的名字中有冒号.当我尝试在这些表上打开查询时,我收到异常: EOleException with message 'Parameter object is improperly defined. Inconsistent or incomplete information was provided'. 这是我
我正在从.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;

现在它有效.

结合克隆的表/列名称和参数
如果您绝对必须沿着使用表中包含冒号的表/列名称的路径,并且仍然希望在查询中的其他地方使用params,那么您可以使用宏来填充表/列名称.
这需要FireDac.
我建议你对此非常小心,因为不像参数宏对SQL注入是不安全的!

见:http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FireDAC.TFDQuery.Macros_Sample

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读