如何使用SQL查询在Delphi中的ADO数据库中搜索字段?

用户名

我试图通过delphi上的一个ado数据库表进行过滤。

我有一个连接到查询(qryData)的dbgrid,一旦执行此代码,该dbgrid就会变为空白,并且不再发生任何事情。即使我输入了有效的字段名称,它也应该在dbgrid中显示它,但是什么也没有显示。我究竟做错了什么?

procedure TfrmProjects.cbxColumnsSelect(Sender: TObject);
begin
if edtsearch.Text = '' then
    begin
      showmessage('The search field should be entered');
      exit;
    end
else
    begin
        ssearch:= edtsearch.Text;
        showmessage(ssearch);
    end;

 if cbxColumns.ItemIndex = -1 then
  begin
    showmessage('Please select a field');
    exit;
  end
 else
  begin
    scolumn:= cbxColumns.Items[cbxColumns.itemindex];
    showmessage(scolumn);
  end;

with dmUsers do
begin
  with qryData do
    begin
      sql.Clear;
      sql.Text := 'Select * FROM tbl_projects where' + quotedstr(scolumn) + ' = ' +quotedstr(ssearch);
      open;
    end;
end;
马丁·A(Martyn A.

以下对我有用。您将需要将对qryData的引用更改为dmUsers.qryData。顺便说一句,请尝试避免使用“ with ...”

请注意,您正在构造的SQL不是理想的,因为它没有考虑要搜索的列是否为数据类型,该数据类型要求查询中指定的值用引号引起来。列名不需要用引号引起来,但如果它有嵌入的空格,则可能需要在方括号[]周围加上括号。您在列名周围加上引号的事实是网格空白的原因-您在服务器上要求Sql搜索引擎的是所有行,其中“一个字符串” =“另一个字符串”,任何行均为false因此没有返回任何内容。顺便说一句,这与您有时看到的Sql示例有关,其中有一个where子句,例如“ where 1 = 2”;当然,这永远都是不正确的,其想法是强制搜索引擎解析查询而不返回任何行。

正如@ mostkito-x所评论的那样,查询原始版本的主要问题之一是查询元素之间缺少空间。请自由使用空间,以便您可以看到自己在做什么。当您在查询时遇到麻烦时,可以将其文本放入表单中的备注(设置为Courier等固定间距字体)中,这很不错,因此您可以查看是否实际上是在构造查询,以为自己是。

顺便说一句,如果您尚未收集,在字符串数据类型的搜索值周围使用QuotedStr的优点是可以正确处理搜索值具有嵌入式引号的情况(例如o'Reilly)。

procedure TForm1.CbxColumnNameClick(Sender: TObject);
//  NOTE: The following code assumes that either qryData is open when it is called
//        or has persistent TFields defined
var
  FieldName,
  ValueToSearch,
  Sql : String;
  UseQuotedValue : Boolean;
begin
  FieldName := cbxColumnName.Text;
  if FieldName = '' then begin
    ShowMessage('No field selected for search.');
    Exit;
  end;

  UseQuotedValue := qryData.FieldByName(FieldName).DataType in [ftString, ftWideString, ftMemo];

  ValueToSearch := edtSearch.Text;
  if  UseQuotedValue then
    ValueToSearch := QuotedStr(ValueToSearch);

  Sql := 'select * from tblProjects where ' + FieldName + ' = ' + ValueToSearch;

  if qryData.Active then
    qryData.Close;
  qryData.SQL.Text := Sql;
  qryData.Open;
end;

同样,使用这种类型的查询还可以了解“ SQL注入”恶意软件的风险(http://en.wikipedia.org/wiki/Sql_injection)。公认的智慧是,减少这种风险的措施是使用参数化查询。不幸的是,尽管您可以指定要匹配的列值作为参数,但是您无法在ADO中对列进行参数化

要使用参数化查询,Sql看起来像

从tblProjects中选择*,其中SomeColumn =:somevalue

然后,在IDE对象检查器中,您需要在qryData上定义一个参数,并在执行查询之前执行qryData.Parameters.ParamByName('somevalue')。Value:= edtSe​​arch.Text。但是,就像我说的那样,您无法参数化要搜索的列名。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不同的数据库中执行SQL查询

来自分类Dev

MVC:如何从存储在数据库字段中的SQL查询填充下拉列表

来自分类Dev

如何验证Oracle数据库中的SQL查询语法?

来自分类Dev

如何使用代码在VB中搜索访问数据库的多个字段

来自分类Dev

在数据库中搜索字段

来自分类Dev

ADO查询到Delphi中的数据库网格的连接有问题吗?

来自分类Dev

如何在Oracle数据库搜索查询中搜索驼峰案例数据?

来自分类Dev

如何使用同一数据库表的查询结果更新MYSQL表中的字段?

来自分类Dev

在数据库中的SQL查询

来自分类Dev

如何从数据库查询中获取特定字段?

来自分类Dev

如何从Delphi中的ADO Query导入数据集(或检查数据库表中是否存在)

来自分类Dev

在帖子数据库字段中搜索

来自分类Dev

在SQL数据库中,如何使用文件夹路径填充表中的字段?

来自分类Dev

在delphi中搜索数据库时,如何连续获取值?

来自分类Dev

如何使用Linq从数据库中搜索数据

来自分类Dev

如何使用代码在VB中搜索访问数据库的多个字段

来自分类Dev

Delphi-使用SQL查询在数据库中进行组合框搜索

来自分类Dev

如何使用Django搜索数据库中的数据?

来自分类Dev

如何从SQL查询中还原Postgres数据库?

来自分类Dev

如何使用python在sqlite数据库中搜索日期?

来自分类Dev

使用 SQL 查询数据库表中的 XML 字段

来自分类Dev

如何使用 ADO 在 Excel 自定义函数中查询访问数据库

来自分类Dev

如何使用delphi 2010显示数据库中的图片

来自分类Dev

降低使用 Django 查询在 SQL 数据库中搜索的成本

来自分类Dev

如何使用访问数据库在 DataGridView 中搜索?

来自分类Dev

如何在PHP中使用存储在数据库中的SQL查询中的变量

来自分类Dev

使用原始 SQL 更新数据库中的字段?

来自分类Dev

如果字段不在数据库中,如何查询

来自分类Dev

如何计算数据库查询中的字段?

Related 相关文章

  1. 1

    如何在不同的数据库中执行SQL查询

  2. 2

    MVC:如何从存储在数据库字段中的SQL查询填充下拉列表

  3. 3

    如何验证Oracle数据库中的SQL查询语法?

  4. 4

    如何使用代码在VB中搜索访问数据库的多个字段

  5. 5

    在数据库中搜索字段

  6. 6

    ADO查询到Delphi中的数据库网格的连接有问题吗?

  7. 7

    如何在Oracle数据库搜索查询中搜索驼峰案例数据?

  8. 8

    如何使用同一数据库表的查询结果更新MYSQL表中的字段?

  9. 9

    在数据库中的SQL查询

  10. 10

    如何从数据库查询中获取特定字段?

  11. 11

    如何从Delphi中的ADO Query导入数据集(或检查数据库表中是否存在)

  12. 12

    在帖子数据库字段中搜索

  13. 13

    在SQL数据库中,如何使用文件夹路径填充表中的字段?

  14. 14

    在delphi中搜索数据库时,如何连续获取值?

  15. 15

    如何使用Linq从数据库中搜索数据

  16. 16

    如何使用代码在VB中搜索访问数据库的多个字段

  17. 17

    Delphi-使用SQL查询在数据库中进行组合框搜索

  18. 18

    如何使用Django搜索数据库中的数据?

  19. 19

    如何从SQL查询中还原Postgres数据库?

  20. 20

    如何使用python在sqlite数据库中搜索日期?

  21. 21

    使用 SQL 查询数据库表中的 XML 字段

  22. 22

    如何使用 ADO 在 Excel 自定义函数中查询访问数据库

  23. 23

    如何使用delphi 2010显示数据库中的图片

  24. 24

    降低使用 Django 查询在 SQL 数据库中搜索的成本

  25. 25

    如何使用访问数据库在 DataGridView 中搜索?

  26. 26

    如何在PHP中使用存储在数据库中的SQL查询中的变量

  27. 27

    使用原始 SQL 更新数据库中的字段?

  28. 28

    如果字段不在数据库中,如何查询

  29. 29

    如何计算数据库查询中的字段?

热门标签

归档