簡體   English   中英

如何在運行時在Delphi中使用SQL在Access數據庫中創建計算字段

[英]How to create calculated field in Access Database using SQL during runtime in Delphi

我在運行時創建表。 這是我的方法:

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”,該字段應按如下方式自動計算:

age = DateDiff ('y',[Date Added], Now()) ,它僅給出存儲項的天數。 如何在運行時執行此操作? 有沒有一種方法可以將動態計算的字段添加到Access數據庫?

注意:我使用Delphi 7,ADO組件和Microsoft Jet 4.0連接到MDB數據庫。

創建一個視圖 (在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

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函數,我認為這可能是正確的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM