如何在Delphi中使用SQL在Access数据库中创建计算字段
问题描述:
我在运行时创建一个表。这就是我要做的事:如何在Delphi中使用SQL在Access数据库中创建计算字段
AdoCommand1.Connection:=AdoConnection1;
cs:='CREATE TABLE '+edname.text+' (' +
'ID Integer IDENTITY(1,1) NOT NULL UNIQUE PRIMARY KEY,' +
'[Date Added] DATETIME,'+
'[Name] TEXT(255))';
ADOCommand1.CommandText:=cs;
ADOCommand1.Execute;
我需要添加哪些应自动这样计算字段,“时代”:
age = DateDiff ('y',[Date Added], Now())
,它只是给出了天那项存储量。我如何在运行时执行此操作?有没有办法将动态计算的字段添加到Access数据库?
注意:我使用Delphi 7,ADO组件和Microsoft Jet 4.0连接到MDB数据库。
答
JET不支持表中的计算字段。使用计算字段创建一个并行查询 - 查询应该像原始表一样可更新。
[更新响应OP的评论]
“查询”是JET说法的看法,并通过ADO JET将接受更多或更少的标准SQL CREATE VIEW语句。因此,您应该可以这样做:
ADOCommand1.CommandText :=
'CREATE VIEW TableNameVw AS SELECT *, (DateDiff (''y'',[Date Added], Now())) AS [Age] FROM TableName';
ADOCommand1.Execute;
这将在数据库中创建一个新视图(AKA查询)。因为它是一个单表的非聚合视图,所以应该能够将它更新为表格。
(所有这一切都假设在JET级别支持DATEDIFF函数,我相信这可能是真实的)。
答
创建一个view(在Access中称为查询),它返回计算的数据。 SQL语法与SQL Server相同。
CREATE VIEW TABLEVIEW AS
SELECT TABLE.*, DATE() - TABLE.[DATE ADDED] AS AGE
FROM [Table];
您可以在ACCESS GUI创建一个新的查询,为您提供了与SQL播放/测试,直到它返回你期望的正确数据的能力也创造了这一点。
当选择这个数据,你这样做,就像你将一个正常的表:
SELECT * FROM TABLEVIEW WHERE AGE > 30
你能不能帮我在这?我使用TAdoQuery组件,它们的连接也通过JET。我怎样才能创建一个并行查询? – 2009-12-04 16:59:34
我更新了我的原始答案。 。 。 – 2009-12-04 17:13:06
谢谢,这非常有帮助。我会试试这个。最后一个问题是,有没有办法在以后在DBGrid中显示这个字段? – 2009-12-04 17:19:00