2017-07-16 75 views
0

我使用Microsoft Access 2013與SharePoint列表和我有兩個表:記錄是不可更新(查詢兩個表)

  • 學生:ID,姓名,手機,START_DATE(日期是他們在我中心開始學習),以及一些無關緊要的領域

=>有很多學生用不同的起始日期

  • [周關]:ID,原因,FROM_DATE(在該中心暫時封閉日期),[週數]

(該中心是temporariliy週數從FROM_DATE閉合) =>在每個學生的學習時間內,他們可能會有一些「休假」,這些「休息時間」並不包括在他們所學習的總週數中。

我正在創建一個查詢來計算學生從他們的Start_Date研究的週數。現在

SELECT 

students.ID, 
students.[Full name], 
students.Mobile, 
students.Start_Date, 
Round((Date()-students.[Start_Date])/7,0) - 
(SELECT SUM(
    IIF([Weeks Off].[From Date]> students.[Start_Date] and [Weeks Off].[From Date]<Date(), 
     [Weeks Off].[Number of Weeks], 0) 
    ) 
    FROM [Weeks Off] 
) AS [Studied Weeks], 

FROM students; 

的問題是,即使查詢成功地顯示所有的學生展示他們的「研究周」一欄,該記錄是不可更新。

我怎樣才能使它可以再次更新?


從評論:

我把它改爲:

(Round((Date()- students.Start_Date)/7,0) - 
DSum("[Number of Weeks]", "[Weeks Off]", 
     "[From Date]>= students.Start_Date And [From Date]<= Date()") 
) AS [Studied Weeks] 

但它說:微軟找不到名稱students.Start_Date您在表達式中輸入。所以我仍然陷在這裏。

回答

2

參見:Dealing with Non-Updateable Microsoft Access QueriesAllen Browne: Why is my query read-only?

從後者:

它使用首先(),SUM(),MAX(),COUNT()等的SELECT子句。聚合記錄的查詢是隻讀的。

如果您將計算放入單獨的查詢中並將該值(Student.ID)加入到學生表中,它可能會有效。

如果將SUM計算轉換爲DSum()表達式,它將起作用(但可能會變慢)。那麼只有該列將是隻讀的。

編輯

students.Start_Date是你DSum調用一個變量,所以它必須是標準的常量字符串之外。

使用Gustav的CSql() function來格式化日期並將其與其餘的連接起來。

(Round((Date()- students.Start_Date)/7,0) - 
DSum("[Number of Weeks]", "[Weeks Off]", 
     "[From Date]>=" & CSql(students.Start_Date) & " And [From Date]<= Date()") 
) AS [Studied Weeks] 

應該這樣做。

+0

您好,我把它改爲: (圓形((日期() - students.Start_Date)/ 7,0) - DSUM( 「[週數]」, 「[周關]」,「[ From Date]> = students.Start_Date And [From Date] <= Date()「))AS [研究周] -------------------但它表示: Microsoft無法找到名稱students.Start_Date,您輸入了表達式。 所以我仍然卡在這裏。 –

+0

@TuPham:請參閱編輯。 – Andre