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;这样写还是要出错
我有一个表保存信息如下:
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;这样写还是要出错