【问题标题】:SQL with parameter and wildcard带参数和通配符的 SQL
【发布时间】:2015-02-19 20:30:02
【问题描述】:

只想运行一条 SQL 语句,将输入的字母输入文本框并返回书名具有相同首字母的结果。例如。如果输入H,则将返回诸如“Happy Days”、“Heaven”、“Hoping for Tomorrow”等书籍。这是我使用过的,但在我的 DBgrid 中没有得到任何结果。输入字母的文本框是 edtBookTitle.text。

qbook.SQL.Text:='SELECT BookID,BookTitle FROM Book WHERE BookTitle LIKE edtBookTitle.text%';

【问题讨论】:

  • 采纳了你的建议(见上面的编辑)。在“where 子句”中收到消息“未知列 'edtBookTitle.text'。不知道为什么会出现这种情况。我不得不使用语音标记“”而不是''。

标签: mysql ado delphi-2010


【解决方案1】:

您的LIKE 不正确。应该是

SELECT .... WHERE BookTitle LIKE CONCAT(edtBookTitle.text, '%')

你有一个空的%,在 MySQL 中它将是算术模运算符,缺少一个操作数。所以你的查询是一个明确的语法错误。

【讨论】:

  • 试过了,但它把 edtBookTitle.text 当作一列。
  • 是的,因为这就是您在原始查询中的方式。如果这应该是你的delphi代码中的一个变量或其他东西,那么你需要将它构建到查询字符串中以query = "SELECT ... LIKE CONCAT(" + edtBookTitle.text + ", '%')等开头......记住:sql只是文本,直到它到达数据库服务器。您正在编写查询,但就您的编程语言而言,它仍然只是文本。
【解决方案2】:
SELECT * FROM dbo WHERE someColumn LIKE 'h%';

您可能需要在查询末尾连接通配符,它​​应该用引号引起来。

【讨论】:

    【解决方案3】:

    这是一个修补撇号的问题。

    qbook.SQL.Text:='SELECT BookID,BookTitle FROM Book WHERE BookTitle LIKE CONCAT("'+edtBookTitle.text+'%")';
     qbook.open;
    

    【讨论】:

    • 这会产生CONCAT("text%"),它不会连接两个字符串。请改用CONCAT("'+edtBookTitle.Text+'", '%')。并且要小心,如果edtBookTitle.Text 已经包含在它的引用,它会破坏SQL。使用QuotedStr() 或参数化查询来解决这个问题。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多