2013-02-12 52 views
0

我在MS ACCESS数据库上存储日期以及其他信息。但我似乎无法按照我的需求搜索它们。我想按年份,月份搜索。我使用的是datetimepicker在记录上搜索日期

目前我使用这个代码可以这样做: ADOTable1.Filter := 'Date > ' + Edit1.Text; ADOTable1.Filtered := True; end;

谁能帮助我?

+0

你见过Google上的“Delphi MS访问日期时间”术语吗?[第一次访问](http://delphi.about.com/od/delphitips2007/qt/datetime_sql.htm)? – TLama 2013-02-12 12:01:21

+0

@TLama数据集过滤器与数据库无关 – bummi 2013-02-12 12:53:51

回答

2

您有两种选择:您的解决方案使用较不优选的将字符串文字传递给查询。在这种情况下,你不得不“逃离”要传递的值,例如

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'会发生什么; - 这可能会从数据库中删除您的表格!

+0

'ADOTable1.parambyname('Date')。asdate:= strtodate(edit1.text);'IT不会工作,我会在'parambyname'和'.asdate'上产生错误 – Ammadeux 2013-02-12 16:53:13

+0

@Ammadeux:有没有'TAdoQuery'组件?使用它代替TAdoTable。您可能必须将“asdate”更改为“asdatetime”。 – 2013-02-13 04:15:38

+0

我已经添加了一个'Tadoquery',并且在我已经放入的SQL属性中:'从表 中选择​​where data>:p1 '但是我得到这个错误:对象参数没有正确定义,信息给出错误。 – Ammadeux 2013-02-14 01:18:29