建立與執行更新查詢

套用到
Microsoft 365 Access Access 2024 Access 2021 Access 2019 Access 2016

您可以在 Access 資料庫中使用更新查詢在現有的記錄中新增、變更或刪除資訊。 您可以將更新查詢想成功能強大的表單式 [尋找及取代] 對話方塊。 您無法使用更新查詢將新記錄新增至資料庫,或是從資料庫刪除記錄。

若要將記錄新增至資料庫,請使用新增查詢;若要從資料庫刪除整筆記錄,請使用刪除查詢。

本文內容

概觀

[尋找及取代] 與更新查詢之間的相似與相異處:

更新查詢與 [尋找及取代] 對話方塊相似,可讓您指定要取代哪些值及新的值。

但不同於 [尋找及取代] 對話方塊,更新查詢可讓您:

  • 使用不相依於要取代之值的準則。
  • 一次更新多筆記錄。
  • 同時變更多個資料表的記錄。

限制可更新的欄位

無法使用更新查詢來更新下列類型的欄位資料:

  • 計算場 計算欄位中的數值不會永久存在於表格中。 他們只會在 Access 計算後暫時存在於電腦記憶體內。 由於計算欄位沒有永久的儲存位置,所以無法更新。

  • 合計查詢或交叉資料表查詢的欄位 這類查詢中的值會進行計算,因此無法用更新查詢進行更新。

  • [自動編號] 欄位 根據設計,[自動編號] 欄位中的值只會在新增記錄至資料表時變更。

  • 唯一值查詢與唯一紀錄查詢中的欄位 這些查詢中的數值會被摘要。 某些值代表單一記錄,其他值代表一筆以上的記錄。 無法進行更新作業的原因是不太可能判斷哪些記錄因重複而排除,因此無法更新所有必要的記錄。 不論您是使用更新查詢或嘗試手動在表單或資料工作表中輸入值來更新資料,都適用此限制。

  • 聯集查詢中的欄位 你無法在聯合查詢中更新欄位的資料,因為每個出現在兩個或以上資料來源中的紀錄只會在聯合查詢結果中出現一次。 因為某些重複的記錄會從結果中移除,因此 Access 無法更新所有必要的記錄。

  • 欄位為主索引鍵 在某些情況下 (例如在資料表關聯中使用主索引鍵欄位),除非先將關聯設定為自動串聯更新,否則無法使用查詢更新欄位。

    注意

    當您串聯更新時,Access 會在您變更父資料表中的主索引鍵值時,自動更新外部索引鍵值。

頁面頂端

使用更新查詢

最佳做法是建立更新查詢時,先建立一個選取查詢來識別要更新的記錄,然後將該查詢轉換為更新查詢,之後再執行這個更新查詢來更新記錄。 先選擇資料,你可以在實際更改資料前確認你已經更新了想要的紀錄。

秘訣

執行更新查詢前,請先備份您的資料庫。 您無法復原更新查詢的結果,所以建立備份有助於確保日後改變心意時可回復變更。

備份資料庫的方式

  1. 點選 檔案 標籤,然後選擇 另存為
  2. 在右側進 選項中,選擇 備份資料庫
  3. 「另存為備份」對話框中,指定備份副本的名稱和位置,然後選擇「儲存」。
    Access 會關閉原始檔案、建立備份複本,然後重新開啟原始檔案。
    若要回復至備份複本,請關閉並重新命名原始檔案,讓備份複本可以使用原始版本的名稱。 將原始版本的名稱指定給備份複本,然後在 Access 中開啟重新命名後的備份複本。

本節內容

步驟 1:建立選取查詢以識別要更新的記錄

  1. 開啟包含要更新之記錄的資料庫。

  2. 「建立 」標籤中, 查詢群組中 選擇 「查詢設計」。

  3. 選擇 表格 標籤。

  4. 選擇包含你想更新紀錄的資料表,選擇 新增,然後選擇 關閉
    在查詢設計工具中,資料表會以一或多個視窗顯示,而視窗會列出每個資料表的所有欄位。 此圖顯示具備一般資料表的查詢設計工具。
    查詢設計工具中的資料表
    查詢設計器中顯示的表格
    查詢設計格線

  5. 在資料表視窗中按兩下要更新的欄位。 選取的欄位就會出現在查詢設計格線的 [欄位] 列裡。
    您可以在查詢設計格線中的每一個資料行中新增一個資料表欄位。
    若要快速新增資料表中的所有欄位,在資料表視窗的資料表欄位清單頂端按兩下星號 (*)。 此圖顯示已新增所有欄位的查詢設計格線。
    已新增所有資料表欄位的查詢

  6. 若要根據欄位值限制查詢結果,請在查詢設計格線的 [準則] 列中,輸入您要用於限制結果的準則。
    範例準則資料表
    下表顯示一些範例準則,並說明這些準則對查詢結果的影響。

    注意

    此表中的許多範例都使用萬用字元來提升查詢的彈性或功能。

    Criteria 影響
    >234 傳回所有大於 234 的數字。 要找到所有小於234的數字,請使用 < 234。
    >=「Cajhen」 傳回從 Cajhen 到字母表最後一個字母之間的所有記錄。
    2020年2月2日#至#12/1/2020之間# 傳回 2017 年 2 月 2 日到 2017 年 12 月 1 日之間的日期 (ANSI-89)。 如果你的資料庫使用 ANSI-92 萬用字元,請用單引號 (') 代替 #) (的井號。 範例:介於「2020/2/2」至「2020年12月1日」之間。
    Not "德國" 尋找欄位內容不完全等於 "德國" 的所有記錄。這個準則將會傳回包含 "德國" 以及其他字元的記錄,例如 "德國 (歐元)" 或 "歐洲 (德國)"。
    Not "T*" 找到所有紀錄,除了以 T 開頭的。如果你的資料庫使用 ANSI-92 通行字元集,請使用 % (%) 符號代替星號 (*) 。
    Not "*t" 尋找結尾不是 t 的所有記錄。 如果資料庫是使用 ANSI-92 萬用字元集,請使用百分比符號 (%) 來代替星號 (*)。
    In(加拿大,英國) 會在清單中尋找包含「加拿大」或「英國」的所有記錄。
    Like "[A-D]*" 在文字欄位中尋找以字母 A 到 D 開頭的所有記錄。如果資料庫是使用 ANSI-92 萬用字元集,請使用百分比符號 (%) 來代替星號 (*)。
    Like "*ar*" 會尋找包含 "ar" 這兩個連續字母的所有記錄。 如果資料庫是使用 ANSI-92 萬用字元集,請使用百分比符號 (%) 來代替星號 (*)。
    Like "Maison Dewe?" 會尋找符合下面條件的所有記錄:開頭是 "Maison" 並且第二個字串包含 5 個字母,其中前面 4 個字母是 "Dewe",最後一個則是未知的字母。 如果你的資料庫使用 ANSI-92 萬用字元集,請用底線 _) (代替問號 () 。
    #2/2/2020# 找到2020年2月2日的所有紀錄。 如果你的資料庫使用 ANSI-92 萬用字元集,請用單引號包圍日期, (') 代替井號 (#) ;例如, ( 2/2/2020') 。
    < 日期 () - 30 會使用 Date 函數,傳回 30 天以前的所有日期。
    Date() 會使用 Date 函數,傳回包含今天日期的所有記錄。
    Between Date() And DateAdd("M", 3, Date()) 會使用 DateDateAdd 函數,傳回在今天日期和今天日期後三個月之間的所有記錄。
    Is Null 會傳回包含 Null (空白或未定義) 值的所有記錄。
    Is Not Null 會傳回包含值的所有記錄。
    "" 會傳回包含零長度字串的所有記錄。 當您需要將值新增至必要欄位,但是您還不知道該值時,可以使用零長度的字串。 例如,某個欄位可能需要輸入傳真號碼,但有些客戶可能沒有傳真機。 在這種情況下,請輸入一對中間不含任何空格的雙引號 (""),而非數字。
  7. 查詢設計 標籤的 結果 群組中,選擇 執行

  8. 確認查詢傳回的記錄是想要更新的記錄。

  9. 若要移除不想納入查詢設計中的任何欄位,請選取欄位,然後按下 DELETE。

  10. 若要新增要納入查詢設計中的任何欄位,請將這些額外的欄位拖曳到查詢設計格線。

步驟 2:更新記錄

  1. 查詢設計 標籤的查詢 類型 群組中,選擇 更新
    此程序顯示如何將選取查詢變更為更新查詢。 當您這麼做時,Access 會在查詢設計格線中新增 [更新至] 列。 下列圖例所示的更新查詢會傳回 2005 年 1 月 5 日後購買的所有資產,並針對符合該準則的所有記錄,將位置變更為「3 號倉庫」。
    具有單一更新準則的更新查詢

  2. 找到包含要變更之資料的欄位,然後在該欄位的 [更新至] 列中輸入運算式 (變更準則)。
    您可以在 [更新至] 列中使用任何有效的運算式。
    範例運算式表格
    下列表格會顯示一些範例運算式,並說明它們如何變更資料。

    運算式 結果
    "銷售人員" 在短文字欄位中,將文字值改為銷售人員。
    #8/10/20# 在日期/時間欄位中,將日期值更改為 10-Aug-20。
    Yes 在 [是/否] 欄位中,將 [否] 值變更為 [是]
    "PN" & [PartNumber] 會在每個指定的零件編號開頭加上 PN。
    [UnitPrice] * [Quantity] 會將名稱為 [單價] 及 [數量] 欄位中的值相乘。
    [Freight] * 1.5 會將名稱為 [運費] 欄位中的值增加 50%。
    DSum (“[數量] * [單位價格]”,
    「訂單詳情」、「[ProductID]=」& [ProductID])
    如果目前資料表中的 ProductID 值與 [訂單詳細資料] 資料表中的 ProductID 值相符,此運算式便會將 Quantity 欄位的值與 UnitPrice 欄位的值相乘,以計算的結果更新總銷售量。 運算式使用 DSum 函數,因為它能夠操作多個資料表及資料表欄位。
    Right([ShipPostalCode], 5) 會截斷 (移除) 文字或數字字串最左邊的字元,保留最右邊的 5 個字元。
    IIf(IsNull([單價]), 0, [單價]) 會將 [單價] 欄位的 Null (未知或未定義) 值變更為零 (0) 值。
  3. 查詢設計 標籤的 結果 群組中,選擇 執行
    出現一則警示訊息。

  4. 要執行查詢並更新資料,請選擇 「是」。

    注意

    當您執行查詢時,您可能會注意到結果集中缺少某些欄位。 如果查詢中包含沒有更新的欄位,Access 預設不會在結果中顯示這些欄位。 例如,您可能會包含兩個資料表的 [識別碼] 欄位,以協助確保查詢識別並更新正確的記錄。 如果您未更新這些 [識別碼] 欄位,Access 就不會在結果中顯示該欄位。

頁面頂端

使用某一資料表的資料更新其他資料表的資料

當您需要使用某一資料表的資料更新其他資料表的資料時,請考慮下列規則:來源和目標欄位的資料類型必須彼此相符或相容。

此外,當您從一個資料表更新資料到另一個資料表,並使用相容 (而非相符) 的資料類型時,Access 會轉換目的資料表中這些欄位的資料類型。 因此,目標欄位中的某些資料可能會遭截斷 (刪除)。 資料類型轉換的限制一節會列出幾種可以或不可以轉換資料類型的方式。 本節中的表格也會說明轉換資料類型時,可以變更或刪除欄位中的部分或全部資料,以及可能會刪除哪些資料。

請遵照以下大略的步驟,使用某一資料表的資料更新其他資料表的資料:

  1. 建立更新查詢,並將來源和目的資料表同時加入查詢。
  2. 聯結資料表中包含相關資訊的欄位。
  3. 將目標欄位的名稱新增至查詢設計格線的 [欄位] 列。
  4. 請使用以下語法將你的來源欄位名稱加入查詢設計網格的「更新到」列:[source_table]。[source_field]。

本節中的步驟會假設您使用兩個相似的資料表。 在這個範例中,[用戶端] 資料表位於您剛才繼承的資料庫內,且包含比 [客戶] 資料表更多的新資料。 您可以看到部分的主管名稱與地址已經變更。 基於這個原因,您決定要以 [用戶端] 資料表中的資料更新 [客戶] 資料表。

[用戶端] 資料表

用戶端識別碼 名稱 地址 城市 州/省 郵遞區號 國家/地區 電話 連絡人
1 Baldwin Museum of Science 1 Main St. New York NY 12345 USA (505) 555-2122 Josh Barnhill
2 Blue Yonder Airlines 52 1st St. Boston MA 23456 USA (104) 555-2123 Waleed Heloo
3 Coho Winery 3122 75th Ave. S.W. Seattle WA 34567 USA (206) 555-2124 Pica Guido
4 Contoso Pharmaceuticals 1 Contoso Blvd. London Bucks NS1 EW2 England (171) 555-2125 Zoltan Harmuth
5 Fourth Coffee Calle Smith 2 Mexico City 56789 墨西哥 (7) 555-2126 Julian Price
6 Consolidated Messenger 3123 75th St. S. Seattle WA 34567 USA (206) 555-2125 Miles Reid
7 Graphic Design Institute 1587 Office Pkwy Tampa FL 87654 USA (916) 555-2128 Tzipi Butnaru
8 Litware, Inc. 3 Microsoft Way Portland 或者 31415 USA (503) 555-2129 Brian Smith
9 Tailspin Toys 4 Microsoft Way Portland 或者 31415 USA (503) 555-2233 Phil Gibbins

[客戶] 資料表

客戶識別碼 名稱 地址 城市 州/省 郵遞區號 國家/地區 電話 主管
1 Baldwin Museum of Science 1 Main St. New York NY 12345 USA (505) 555-2122 Steve Riley
2 Blue Yonder Airlines 52 1st St. Boston MA 23456 USA (104) 555-2123 Waleed Heloo
3 Coho Winery 3122 75th Ave. S.W. Seattle WA 34567 USA (206) 555-2124 Pica Guido
4 Contoso Pharmaceuticals 1 Contoso Blvd. London Bucks NS1 EW2 England (171) 555-2125 Zoltan Harmuth
5 Fourth Coffee Calle Huevos 134 Mexico City 56789 墨西哥 (7) 555-2126 Julian Price
6 Consolidated Messenger 3123 75th St. S. Seattle WA 34567 USA (206) 555-2125 Christine Hughes
7 Graphic Design Institute 67 Big St. Tampa FL 87654 USA (916) 555-2128 Dana Birkby
8 Litware, Inc. 3 Microsoft Way Portland 或者 31415 USA (503) 555-2129 Jesper Aaberg
9 Tailspin Toys 4 Microsoft Way Portland 或者 31415 USA (503) 555-2233 Phil Gibbins

繼續時請記住,雖然每個資料表欄位的資料類型不需要相符,但必須相容。 Access 必須能夠將來源資料表的資料轉換成目的資料表可以使用的類型。 在某些情況下,該轉換處理程序可能會刪除部分資料。 如需轉換資料類型之限制的詳細資訊,請參閱資料類型轉換的限制一節。

建立與執行更新查詢

注意

下列步驟假設您使用前述兩個範例資料表。 您可以調整步驟以符合您的資料。

  1. 「建立 」標籤中, 查詢群組中 選擇 「查詢設計」。
  2. 選擇 新增資料表
  3. 雙擊你的來源和目的地資料表,將它們加入查詢中。 每個資料表都會顯示在查詢設計工具的視窗中。
  4. 在大部分情況下,Access 會自動聯結查詢中的相關欄位。 若要手動聯結包含相關資訊的欄位,請將相關的欄位從一個資料表拖曳到其他資料表中的對等欄位。
    例如,如果您使用之前顯示的範例資料表,則要將 [用戶端識別碼] 欄位拖曳到 [客戶識別碼] 欄位。 Access 會在兩個資料表中這些欄位之間建立關聯,並使用該關聯來聯結任何相關的記錄。
  5. 查詢設計 標籤的查詢 類型 群組中,選擇 更新
  6. 在目的資料表中,按兩下要更新的欄位。 每個欄位都會顯示在查詢設計格線的 [欄位] 列中。
    如果您使用範例資料表,可新增 [客戶識別碼] 欄位以外的所有欄位。 請注意,目的資料表的名稱會出現在設計格線的 [資料表] 列中。
  7. 在查詢的 「更新到 」列中,每個包含目標欄位的欄位,加入來源資料表的名稱以及來源資料表中對應目標資料表欄位的欄位,並確保你使用以下語法: [Table].[欄位],你用方括號包住表格和欄位名稱,並用句點分隔表格和欄位名稱。
    下圖顯示範例資料表的部分設計格線。 請注意 [更新至] 列中的資料表和欄位名稱的語法。
    使用其他資料表的資料更新某一資料表的查詢
    繼續時請記住,您必須在 [更新至] 列中正確拼出資料表和欄位的名稱,而且必須符合原始資料表和欄位名稱中的標點符號。 不過,英文大小寫不需要相符。
  8. 查詢設計 標籤的 結果 群組中,選擇 執行
  9. 當被要求確認更新時,請選擇 「是」。

資料類型轉換的限制

下表列出 Access 提供的資料類型、說明轉換資料類型方式的限制,並簡要描述可能在轉換時發生的資料遺失。

轉換為這個類型 原本的類型 變更或限制
簡短文字 長文字 Access 會刪除前 255 個字元後的所有資料。
數字 沒有限制。
日期/時間 沒有限制。
貨幣 沒有限制。
自動編號 沒有限制。
是/否 值為 -1 ([是/否] 欄位中的 [是]) 時會轉換為 [是]。 值為 0 ([是/否] 欄位中的 [否]) 時會轉換為 [否]。
超連結 Access 會截斷長度超過 255 個字元的連結。
長文字 簡短文字 沒有限制。
數字 沒有限制。
日期/時間 沒有限制。
貨幣 沒有限制。
自動編號 沒有限制。
是/否 值為 -1 ([是/否] 欄位中的 [是]) 時會轉換為 [是]。 值為 0 ([是/否] 欄位中的 [否]) 時會轉換為 [否]。
超連結 沒有限制。
數字 簡短文字 文字必須包含數字、有效的貨幣與小數分隔符號。 [文字] 欄位中的字元數必須落在 [數字] 欄位設定的大小內。
長文字 長文字欄位必須只包含文字及有效的貨幣和十進位分隔符。 長文字欄位的字元數必須在數字欄位設定的大小範圍內。
數字 (但是有不同的欄位大小或精確度) 值不能大於或小於新欄位能儲存的大小。 變更精確度可能會導致 Access 四捨五入部分的值。
日期/時間 您可以轉換的日期取決於數字欄位的大小。 請記住,Access 會將所有日期儲存為數列日期,並將日期值儲存為雙精度浮點整數。
Access 使用 1899 年 12 月 30 日 做為日期 0。 1899 年 4 月 18 日到 1900 年 9 月 11 日範圍之外的日期會超出 [位元組] 欄位的大小。 1810 年 4 月 13 日到 1989 年 9 月 16 日範圍之外的日期會超出 [整數] 欄位的大小。
若要能容納所有可能的日期,請將 [數字] 欄位的 [欄位大小] 屬性設定為 [長整數] 或更大的值。
貨幣 值不能超過或低於欄位的大小限制設定。 例如,當值大於 255 且沒有超過 32,767 時,您可以將 [貨幣] 轉換為 [整數] 欄位。
自動編號 值必須落在欄位的大小限制設定之間。
是/否 「是」的值會轉換為 -1。 「否」的值會轉換為 0。
日期/時間 簡短文字 原始文字必須是可辨識的日期或日期/時間組合。 例如,2020年1月18日。
長文字 原始文字必須是可辨識的日期或日期/時間組合。 例如,2020年1月18日。
數字 值必須落在 -657,434 及 2,958,465.99998843 之間。
貨幣 值必須落在 -$657,434 及 $2,958,465.9999 之間。
自動編號 值必須大於 -657,434 但小於 2,958,466。
是/否 -1 (是) 的值會轉換為 1899 年 12 月 29 日。 0 (否) 的值會轉換為午夜 (12:00 AM)。
貨幣 簡短文字 文字必須由數字和有效的分隔符號組成。
長文字 文字必須由數字和有效的分隔符號組成。
數字 沒有限制。
日期/時間 沒有限制,但 Access 可能會四捨五入該值。
自動編號 沒有限制。
是/否 -1 (是) 的值會轉換為 $1。0 (否) 的值會轉換為 0$。
自動編號 簡短文字 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
長文字 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
數字 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
日期/時間 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
貨幣 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
是/否 如果 [自動編號] 欄位是當做主索引鍵使用的話,則不允許。
是/否 簡短文字 原始文字必須只能由 [是]、[否]、[真]、[假]、[開] 或 [關] 所組成。
長文字 原始文字必須只能由 [是]、[否]、[真]、[假]、[開] 或 [關] 所組成。
數字 零或 Null 會轉換為 [否],所有其他的值會轉換為 [是]。
日期/時間 Null 或 12:00:00 AM 會轉換為 [否],所有其他的值會轉換為 [是]。
貨幣 零或 Null 會轉換為 [否],所有其他的值會轉換為 [是]。
自動編號 所有值會轉換為 [是]。
超連結 簡短文字 如果原始文字包含有效的網址,如 adatum.com、 www.adatum.com 或 http://www.adatum.com,Access 會將文字轉換成超連結。 Access 會嘗試轉換其他值,表示您會看見有底線的文字,且游標會在您指向連結時變更,但連結無法運作。 文本可包含任何有效的網路協定,包括 http://、gopher://、telnet://、ftp:// 和 wais://。
長文字 請參閱前一個項目。 適用相同的限制。
數字 [數字] 欄位是關聯的一部分時,不允許。 如果原始值是有效網際網路通訊協定 (IP) 網址的形式 (四個以句點分隔的三位數:nnn.nnn.nnn.nnn),而數字又剛好與網址一致,則會轉換為有效連結。 否則,Access 會在每個值的開頭加上 http:// ,導致產生的連結無效。
日期/時間 Access 會在每個地址的開頭加上 http:// ,但產生的連結幾乎永遠無法運作。
貨幣 Access 會在每個值的開頭加上 http:// ,但就像日期一樣,產生的連結幾乎永遠不會有效。
自動編號 [自動編號] 欄位是關聯的一部分時,不允許。 Access 會將 http:// 附加在每個值的開頭,但產生的連結幾乎不會有效。
是/否 Access 會將所有 Yes 值轉換為 -1,所有 No 值轉換為 0,並在每個值的開頭加上 http:// 。 但產生的連結都是沒有作用的。

頁面頂端

停止停用模式而不要封鎖查詢

如果您嘗試執行巨集指令查詢,但好像什麼都沒有發生,請確認 Access 狀態列是否出現下列訊息:

巨集指令或事件已經被停用模式封鎖。

根據預設,Access 會停用所有巨集指令查詢 (更新、附加、刪除或產生資料表查詢),除非資料庫位於受信任的位置,或資料庫已經過簽署且受到信任。 如果您尚未採取這些動作,仍可以按一下 [訊息列] 的 [啟用內容],針對目前的資料庫工作階段啟用查詢。

頁面頂端

SQL 版本:UPDATE 陳述式

如果習慣使用 SQL,您也可以使用 SQL 檢視撰寫 UPDATE 陳述式。 若要使用 SQL 檢視,請建立一個空白的新查詢,然後切換成 SQL 檢視。

本節提供 UPDATE 陳述式的語法及範例。

語法

更新 表格 集合 新值 其中 criteria;

UPDATE 陳述式包含下列部分:

部分 描述
table 包含要修改之資料的資料表名稱。
newvalue 決定要插入更新記錄內特定欄位之值的運算式
criteria 此運算式決定更新哪些記錄。 只有滿足運算式的記錄會更新。

註解

當您要變更多筆記錄,或者要變更的記錄位於多個資料表中時,UPDATE 陳述式尤其有用。

您可以同時變更數個欄位。 下列範例會將英國境內貨運公司的「訂單金額」值增加 10%,而「運費」值增加 3%:

UPDATE Orders

SET OrderAmount = OrderAmount * 1.1,

Freight = Freight * 1.03

WHERE ShipCountry = 'UK';

頁面頂端