做了个简单的人事表,通过窗体查询,查询内容是通过填写几个edit的内容查询,查询的内容有姓名,性别,部门,学历,职称,职务,年龄(多少岁之多少岁,通过俩个edit添写),然后通过一个查询按钮在gbgrid1中显示查询的内容。有时只查姓名,或有时查部门和学历,有是全部查,代码如下:
var
  SQL: string;
begin
  SQL := 'SELECT * FROM Employee WHERE 1 = 1';
  if Trim(edtEmployeeName.Text) <> '' then
    SQL := SQL + ' AND EmpoyeeName = ' + QuotedStr(Edit1.Text);
  if ............我试了,没问题,但查询年龄时,按上面的格式怎么写呀,就是查询X岁到Y岁的人,建表时我建的是出生年月。
有个朋友给了我的代码:
 if Trim(Edit1.Text) <> '' then //
    SQL := SQL + ' AND DATEDIFF(YEAR, Birthday, GETDATE()) >= ' + Edit1.Text + ' ';
 if Trim(Edit2.Text) <> '' then
    SQL := SQL + ' AND DATEDIFF(YEAR, Birthday, GETDATE()) <= ' + Edit2.Text+ ' ';
我运行了一下,没问题,可一查讯岁数时,就出现错误‘project renshi.exe raised exception class EDBEngineError with message'Invalid use of keyword.  token:YEAR,  line number:1'.process stopped.use step or pun to continue’

解决方案 »

  1.   

    如果那个朋友写的不对,有别的方法也行,上面的出生年月我建的是Date类型的,我觉的建成字符型也行吧,别如1980年3月就写成1980.3,不要求写多少日也行,要是DATE型还要写多少日,哪位大哥告我呀,用哪种类型都行,能解决问题就行,一定要写上代码呀
      

  2.   

    好象只有sql server才支持DATEDIFF函数大哥们快帮我呀。
      

  3.   

    with 数据控件 do
    begin
    sql.clear;
    sql.add(select * from 表名 where 字段名=:参数);
    Parameters.ParamByName('参数').Value := 参数值;
    open;
    end;
    如果还写不出来,就看看书补下基础吧。
      

  4.   

    要是用between 时间1 and 时间2会有什么结果呢?你测试一下
      

  5.   

    在delphi 6中:
    function YearOf(const AValue: TDateTime): Word;
    可以获得日期的年 你再获得现在的时间获得现在的年
    然后........
      

  6.   

    那个year是你定义的当前年度的变量吗? 换个名字看看。