我在MS ACCESS数据库上存储日期以及其他信息。但我似乎无法按照我的需求搜索它们。我想按年份,月份搜索。我使用的是datetimepicker
在记录上搜索日期
目前我使用这个代码可以这样做: ADOTable1.Filter := 'Date > ' + Edit1.Text; ADOTable1.Filtered := True; end;
谁能帮助我?
我在MS ACCESS数据库上存储日期以及其他信息。但我似乎无法按照我的需求搜索它们。我想按年份,月份搜索。我使用的是datetimepicker
在记录上搜索日期
目前我使用这个代码可以这样做: ADOTable1.Filter := 'Date > ' + Edit1.Text; ADOTable1.Filtered := True; end;
谁能帮助我?
您有两种选择:您的解决方案使用较不优选的将字符串文字传递给查询。在这种情况下,你不得不“逃离”要传递的值,例如
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 2013-02-12 16:53:13
@Ammadeux:有没有'TAdoQuery'组件?使用它代替TAdoTable。您可能必须将“asdate”更改为“asdatetime”。 – 2013-02-13 04:15:38
我已经添加了一个'Tadoquery',并且在我已经放入的SQL属性中:'从表 中选择where data>:p1 '但是我得到这个错误:对象参数没有正确定义,信息给出错误。 – Ammadeux 2013-02-14 01:18:29
你见过Google上的“Delphi MS访问日期时间”术语吗?[第一次访问](http://delphi.about.com/od/delphitips2007/qt/datetime_sql.htm)? – TLama 2013-02-12 12:01:21
@TLama数据集过滤器与数据库无关 – bummi 2013-02-12 12:53:51