如何在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函数,我相信这可能是真实的)。

+0

你能不能帮我在这?我使用TAdoQuery组件,它们的连接也通过JET。我怎样才能创建一个并行查询? – 2009-12-04 16:59:34

+1

我更新了我的原始答案。 。 。 – 2009-12-04 17:13:06

+0

谢谢,这非常有帮助。我会试试这个。最后一个问题是,有没有办法在以后在DBGrid中显示这个字段? – 2009-12-04 17:19:00

创建一个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