大家帮我看看这个统计记录的问题!(200分)

  • 主题发起人 主题发起人 zdqyundou
  • 开始时间 开始时间
Z

zdqyundou

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是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;

但是程序在显示分布比例时提示:标准表达式中数据类型不匹配。

因为我的员工表中有些记录是没有输入出生日期的。如果是有日期,那么运行就不会出问题。那么应该怎么办?我估计是视图脚本写的不对,但是
SELECT DATEDIFF('y',FORMAT([Employee.E_Birth],'YYYY'),FORMAT(now(),'YYYY')) AS 年龄
FROM Employee where Employee.E_Birth is not null;这样写还是要出错
 
没有出生日期的人,自然不应该混在生日数据里,否则你的分布数本身就是错的,没有年龄的人怎么能和有年龄的混在一起统计。在视图那步就该把没有生日日期的人过滤掉。
 
视图产生是正常的。视图里没有空年龄
 
Self.PieSeries1.Add(Self.ADOQuery_Age.FieldByName('年龄').AsInteger,'18-25岁');
这句出错?
Self.ADOQuery_Age.FieldByName('年龄').AsInteger这句会不会有问题,
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部