【问题标题】:How to search a specific field in a database如何在数据库中搜索特定字段
【发布时间】:2012-04-04 14:38:05
【问题描述】:

我希望用户能够从列出数据库的一些字段的下拉组合框中进行选择,然后在下面输入搜索词,然后所有符合查询的结果都将显示在 dbgrid 中。我不确定如何将 ComboBox 的当前值链接到 sql 语句中。我试过用这个

begin
    with ADOQuery do begin
      Close;
      SQL.Clear;
      SQL.Add ('SELECT * FROM List WHERE combobox1.text =' +   QuotedStr (Asearchterm.Text));
      Open;

而且它不起作用。我得到的错误是“参数 combobox1.text 没有默认值”。有什么想法吗?

【问题讨论】:

  • 我假设combobox1.text 是组合框中的值,在这种情况下,它不需要是字符串的一部分。
  • 我有点困惑,但你的意思是不是该 sql 行的一部分吗?我尝试将 combobox1 设置为另一个变量并将其放入其中,但它仍然不起作用
  • 不起作用不是一个好的错误描述。绝不。添加您从数据库引擎获得的正确错误消息。
  • 我有点着急,我知道这个答案很简单,但我同意我应该给出正确的错误。下次我会的。
  • 从来没有这样想过。加进去了。

标签: sql database delphi


【解决方案1】:

如果您想使用 combobox1 文本值作为 sql 语句的一部分,您可以按照

行设置 sql 字符串
'SELECT * FROM List WHERE [' + combobox1.text + '] = ''' + QuotedStr(Asearchterm.Text) + ''''

可能是您正在寻找的。我在 QuotedStr 周围添加了额外的引号,因为我猜测过滤器并不总是数值。这适用于数字和非数字值。

【讨论】:

  • 不要通过附加用户输入的值来构建查询。使用参数化查询来防止 SQL 注入。
  • 是的,这个简单的解决方案很容易出现 SQL 注入。您可能想做一些替换语句以确保搜索词中没有任何单引号或其他危险字符,但我认为这就是“QuotedStr”方法所做的
  • 另外,如果您还在这里,当用户尝试搜索其他内容时,我将如何刷新表格,因为如果我尝试搜索不同的内容,表格将显示为空白。谢谢。
  • 我不知道为什么表会是空白的,尽管这个解决方案要求每次更改值时都使用 SQL 字符串查询数据库。有助于调试动态 SQL 场景的方法是输出 SQL 字符串以确保其中没有意外。
  • 是的,我一定是输入了错误,它现在工作正常,为帮助欢呼。
【解决方案2】:

您必须输入您要查找的实际列名,而不是“combobox1.text”。您可以使用LIKE 关键字和一些通配符。类似:

SELECT * FROM 'table WHERE 'column' LIKE '%YOUR_SEARCH_TEXT%';

那是为了搜索...如果你想找到确切的字符串,那么你必须使用= 运算符而不是 LIKE

More info here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多