建立與執行更新查詢
套用到
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. 選擇包含你想更新紀錄的資料表,選擇新增,然後選擇關閉

    在查詢設計工具中,資料表會以一或多個視窗顯示,而視窗會列出每個資料表的所有欄位。 此圖顯示具備一般資料表的查詢設計工具。

    查詢設計工具中的資料表

    1. 顯示在查詢設計工具中的資料表

    2. 查詢設計格線

  5. 在資料表視窗中按兩下要更新的欄位。 選取的欄位就會出現在查詢設計格線的 [欄位] 列裡。

    您可以在查詢設計格線中的每一個資料行中新增一個資料表欄位。

    若要快速新增資料表中的所有欄位,在資料表視窗的資料表欄位清單頂端按兩下星號 (*)。 此圖顯示已新增所有欄位的查詢設計格線。

    已新增所有資料表欄位的查詢

  6. 若要根據欄位值限制查詢結果,請在查詢設計格線的 [準則] 列中,輸入您要用於限制結果的準則。

    範例準則資料表

    下表顯示一些範例準則,並說明這些準則對查詢結果的影響。

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

    準則

    影響

    >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') 。

    < Date() - 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 預設不會在結果中顯示這些欄位。 例如,您可能會包含兩個資料表的 [識別碼] 欄位,以協助確保查詢識別並更新正確的記錄。 如果你不更新那些 ID 欄位, 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.

三 Microsoft 路

Portland

或者

31415

USA

(503) 555-2129

Brian Smith

9

Tailspin Toys

4 Microsoft

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.

三 Microsoft 路

Portland

或者

31415

USA

(503) 555-2129

Jesper Aaberg

9

Tailspin Toys

4 Microsoft

Portland

或者

31415

USA

(503) 555-2233

Phil Gibbins

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

建立與執行更新查詢

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

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

  2. 選擇 新增資料表

  3. 雙擊你的來源和目的地資料表,將它們加入查詢中。 每個資料表都會顯示在查詢設計工具的視窗中。

  4. 在大多數情況下, Access 會自動在查詢中加入相關欄位。 若要手動聯結包含相關資訊的欄位,請將相關的欄位從一個資料表拖曳到其他資料表中的對等欄位。

    例如,如果您使用之前顯示的範例資料表,則要將 [用戶端識別碼] 欄位拖曳到 [客戶識別碼] 欄位。 Access 建立兩個資料表中欄位之間的關係,並利用該關係連接任何相關紀錄。

  5. 查詢設計 標籤的查詢 類型 群組中,選擇更新

  6. 在目的資料表中,按兩下要更新的欄位。 每個欄位都會顯示在查詢設計格線的 [欄位] 列中。

    如果您使用範例資料表,可新增 [客戶識別碼] 欄位以外的所有欄位。 請注意,目的資料表的名稱會出現在設計格線的 [資料表] 列中。

  7. 在查詢的 [更新至] 列中,在每個包含目標欄位的資料欄中,新增來源資料表的名稱,以及來源資料表中對應至目的資料表欄位的欄位名稱,並請務必使用以下語法:[Table].[Field],其中請用方括號括住資料表和欄位名稱,並且使用英文句號分隔資料表和欄位名稱。

    下圖顯示範例資料表的部分設計格線。 請注意 [更新至] 列中的資料表和欄位名稱的語法。

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

    繼續時請記住,您必須在 [更新至] 列中正確拼出資料表和欄位的名稱,而且必須符合原始資料表和欄位名稱中的標點符號。 不過,英文大小寫不需要相符。

  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.comwww.adatum.comhttp://www.adatum.com , Access 會將文字轉換成超連結。 Access 嘗試轉換其他值,也就是說你會看到底線文字,當你指向連結時游標會改變,但連結卻無法運作。 文字可以包含任何有效的 Web 通訊協定,包括 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';

頁面頂端

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。