2009-12-04 61 views
0

我在運行時創建一個表。這就是我要做的事:如何在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數據庫。

回答

0

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

1

創建一個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 
相關問題