数据库是Access
我有一个表保存信息如下:
Name   Birth
张三   1982-7-7
李四   1983-1-24
王二   
刘五   1978-2-5
……   ……我设计了一个视图,来计算表中人的年龄,如下:
SELECT DATEDIFF('y',FORMAT([Employee.E_Birth],'YYYY'),FORMAT(now(),'YYYY')) AS 年龄
FROM Employee;
视图产生正常。我用DBChart来显示指定年龄段的分布,语句如下:
procedure TMainForm.Btn_AgeRefreshClick(Sender: TObject);
begin
Self.PieSeries1.Clear;
   Self.ADOQuery_Age.SQL.Clear;
   Self.ADOQuery_Age.SQL.Add('select Count(*) as 年龄 from 年龄视图 where 年龄>'+''''+'18'+''''+' and 年龄<'+''''+'25'+'''');
   Self.ADOQuery_Age.Open;
   if Self.ADOQuery_Age.RecordCount<>0 then
    begin
   Self.PieSeries1.Add(Self.ADOQuery_Age.FieldByName('年龄').AsInteger,'18-25岁');
  end;
end;但是程序在显示分布比例时提示:标准表达式中数据类型不匹配。因为我的员工表中有些记录是没有输入出生日期的。如果是有日期,那么运行就不会出问题。那么应该怎么办?

解决方案 »

  1.   

    SELECT DATEDIFF(year,isnull(Employee.Birth,getdate()),getdate()) AS 年龄
    FROM Employee;
    //null都替换成getdate()
      

  2.   

    给日期字段赋默认值或者在select的时候用指定的值代替空值,譬如一楼。
    但这样会造成数据不准确的问题。另外一个方式就是select的时候用where条件字句去除字段为null的记录。
      

  3.   

    将你生成的sql代码,放到access的查询里测试一下,就知道什么原因了
    access中 插入-〉查询-〉设计视图 确定-〉右健 sql视图
      

  4.   

    to 47522341(睡到8:30) 怎么去掉为Null的字段?我是这样做的SELECT DATEDIFF('y',FORMAT([Employee.E_Birth],'YYYY'),FORMAT(now(),'YYYY')) AS 年龄
    FROM Employee where Employee.E_Birth is not null;这样写还是要出错
      

  5.   

    to hare007(hare) 视图显示记录没有问题的.