【问题标题】:Search dates on a record搜索记录上的日期
【发布时间】:2013-02-12 11:53:19
【问题描述】:

我将日期与其他信息一起存储在 MS ACCESS 数据库中。但我似乎无法随心所欲地搜索它们。我想搜索:年,月。我正在使用datetimepicker

目前我正在使用此代码来执行此操作: ADOTable1.Filter := 'Date > ' + Edit1.Text; ADOTable1.Filtered := True; end;

谁能帮帮我?

【问题讨论】:

  • 您在 Google 上的 “Delphi MS Access 日期时间” 术语中看到 the first hit 了吗?
  • @TLama 数据集过滤器独立于数据库

标签: delphi ms-access delphi-xe3


【解决方案1】:

您有两种选择:您的解决方案使用不太可取的一种,将字符串文字传递给查询。在这种情况下,您必须“转义”您传递的值,例如

ADOTable1.Filter := 'Date > ''' + Edit1.Text + '''';

这将导致一行像

ADOTable1.Filter := 'Date > ''27-Sep-69'''

更好的解决方案是使用参数化查询

select <whatever> from table
where date > :p1

你通过以下方式传递参数

ADOTable.parambyname ('p1').asdate:= strtodate (edit1.text);

我承认我不使用 ADO 组件,因此语法可能略有偏差,但它是用于 Firebird 的语法。

参数比使用原始文本值更好,因为您不必担心添加正确数量的引号,并且没有人可以传入错误的值。想象一下如果 edit1.text 包含 '27-Sep-65;Drop table1'; 会发生什么? - 这可能会从数据库中删除您的表!

【讨论】:

  • ADOTable1.parambyname ('Date').asdate:= strtodate (edit1.text); IT 无法正常工作,parambyname.asdate 出错了
  • @Ammadeux:有 'TAdoQuery' 组件吗?使用它而不是 TAdoTable。您可能需要将“asdate”更改为“asdatetime”。
  • 我添加了一个Tadoquery 并在我的SQL 属性中输入了:select &lt;whatever&gt; from table where data &gt; :p1 但我收到此错误:对象参数未正确定义,信息提供不正确。
  • @Ammadeux:,我的意思是“您希望查询返回的字段列表”,例如从日期> :p1 的表中选择名称。您还必须在查询组件中定义参数并选择其类型。
  • 在 TADOQuery.SQL 属性中定义您的查询。然后转到“参数”属性,按三个点,然后在出现的对话框中(编辑),按插入添加一个新参数。将参数命名为 p1 并将其数据类型设置为 ftDate。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多