【问题标题】:Error on Quoted String within ADOQuery in Delphi: `Parameter object is improperly defined. Inconsistent or incomplete information was provided.`Delphi 中 ADOQuery 中引用字符串的错误:`参数对象定义不正确。提供的信息不一致或不完整。`
【发布时间】:2021-05-29 07:21:39
【问题描述】:

我在使用下面的 ADOQuery 引用字符串 %ABC% 时遇到问题:

adoQuery1.SQL.Clear;
adoQuery1.SQL.Text := 'SELECT * FROM MyDB.MyTable WHERE MyField LIKE ''''%ABC%'''' ';
adoQuery1.ExecSQL;
adoQuery1.Close;
adoQuery1.Open;

我也尝试传递以下参数,但没有成功:

adoQuery1.SQL.Clear;
adoQuery1.SQL.Text := 'SELECT * FROM MyDB.MyTable WHERE MyField LIKE :Param1 ';
aqBCCombi.Parameters.ParamByName('Param1').Value := '%ABC%';
adoQuery1.ExecSQL;
adoQuery1.Close;
adoQuery1.Open;

这是我得到的错误:Parameter object is improperly defined. Inconsistent or incomplete information was provided.

这里有谁知道如何在 ADO SQL 文本中处理带引号的字符串?感谢任何帮助。

【问题讨论】:

  • 仅供参考,ExecSQL; Close; Open; 完全没有意义。其次,将Open 用于SELECT - ExecSQL 用于不返回结果集的查询(插入、删除、更新)。
  • 注明@KenWhite。感谢您的建议。

标签: delphi tadoquery


【解决方案1】:

这段代码与你的非常相似,对我有用:

if Pos('%', Article) > 0 then begin
    SQLCmd := 'SELECT d0301000.id_partstd ' +
              'FROM d0301000 ' +
              'WHERE (d0301000.Type = ''AF'') ' +
                'AND (d0301000.Part_Nbr LIKE :Part_Nbr)';
    ADOQuery1.SQL.Text := SQLCmd;
    ADOQuery1.Parameters.ParamByName('Part_Nbr').Value := Article;
end
else begin 
    .....   // Code removed for simplicity
end;
ADOQuery1.Open;

您正在将ExecSQL 用于 SELECT 语句。将其替换为Open

【讨论】:

  • 非常感谢@fpiette。有用!感谢您的快速帮助。
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多