簡體   English   中英

如何使用查詢或 VBA 和 SQL 更新 MS ACCESS 中的表

[英]How to update tables in MS ACCESS with query or with VBA & SQL

我已經使我的數據庫與各種代碼和解決方法一起工作,但效率不高! 所以這是一個可以解決我很多問題的問題:

兩個訪問表:Tab01 和 Tab02。 兩者都有相同的列標題,但列數不同。 暫時擱置主鍵和 ID,為了檢查內容是否相同,我從每個表中選擇了 3 個必須相同的列:日期、地點和時間。

現在如下:

Tab01.column01 包含第 1、4、5、8、10 行中的值

Tab01.column02 包含第 2、3、10 行中的值

Tab01.column03 包含第 1、2、3、4、5、6、7、8、9 行中的值


Tab02.column01 包含第 1、2、3、4、5、9、10 行中的值

Tab02.column02 不包含任何值

Tab02.column03 包含第 1、10 行中的值

如果我想用 Tab02.columnX 中的值完成 Tab01.columnX 中的缺失值(通過使用日期、時間、地點設置為 ID 的 3 個值):

怎么會在這里進行? 使用表格查詢? 有第三張桌子? 使用 VBA 和 SQL 代碼? 我選擇了大量 VBA 代碼和 If-Then 語句的方式。 完成表的值大約需要 30 分鍾 (!!!!)。 准確地說,十幾個表,每個表大約有 1000 行和大約 10 列,其中的值看起來像這樣,需要完成。

但無論如何,請繼續使用上面描述的兩個表,我正在尋找一種可能更優雅、更快速的更新 Tab01 的方法。 有人有好的建議嗎? 非常感謝!

這就是我的 Tab01 和 Tab02 代碼的樣子:(我對所有其他表使用了大約 20 -30 個!!!!)

Sub CompTabsExmpl()

Dim x As Long, y As Long
Dim xRecsMain As Long, xRecsSub As Long

Dim db As DAO.Database
Dim rsTab01 As DAO.Recordset
Dim rsTab02 As DAO.Recordset

Set db = CurrentDb
Set rsTab01 = db.OpenRecordset("Table01", dbOpenDynaset)
Set rsTab02 = db.OpenRecordset("Table02", dbOpenDynaset)

xRecsMain = DCount("*", "Table01")
xRecsSub = DCount("*", "Table02")

rsTab01.MoveFirst
rsTab02.MoveFirst

For y = 0 To xRecsMain - 1
    
   For x = 0 To xRecsSub - 1
   
      If rsTab01.Fields("fieldDATE") = rsTab02.Fields("fieldDATE") And _
         rsTab01.Fields("fieldTIME") = rsTab02.Fields("fieldTIME") And _
         rsTab01.Fields("fieldPLACE") = rsTab02.Fields("fieldPLACE") And _
         IsNull(rsTab01.Fields(fieldX)) And _
         Not IsNull(rsTab02.Fields(fieldX)) Then

         rsTab01.Edit
         rsTab01.Fields("fieldX") = rsTab02.Fields("fieldX")
         'same for all other fields ....
         'same for all other fields ....
         'same for all other fields ....
         '...
         rsTab01.Update
       End If
      
         rsTab01.MoveNext
   Next
    
         rsTab01.MoveFirst
         rsTab02.MoveNext
    
Next

rsTab01.Close
rsTab02.Close
db.Close

End Sub

好的,到目前為止,我們有這個問題:

獲取 table2 中的缺失值並將它們移動到 table1

(但匹配 3 列)。 好的,我會為此使用查詢構建器 - 它會運行得非常快。

因此,創建一個新查詢。 放入兩個表(確保首先放入主表(第一個表)。

現在,放入第二張桌子。 向查詢網格添加左側表(我們要更新的主表)中的 PK id。

所以,我要用 tblHotels 和 tblHotelsB 來做這件事

我想匹配 FirstName、HotelName、City 和 TRANSFER 兩列 HotelTax 和 Description。

那么,查詢構建器? 從左側表格中拖出一條連接線(始終以正確的方向拖放該線非常重要)。

您現在可以運行查詢 - 它運行了嗎??? (它應該運行得非常快 - 特別是如果你在每個表的 3 列上都有索引。

好的,讓這個查詢工作!!!!!!!

它看起來像這樣:

在此處輸入圖片說明

如前所述,雙擊 PK id(將其放入網格中)。 對要復制的所有列執行相同操作。

現在,右鍵單擊查詢構建器中的任何空白區域,並更改更新查詢的查詢類型 - 如下所示:

在此處輸入圖片說明

現在,就在更新的表達式中,輸入 tableB 中的字段

你得到這個:

在此處輸入圖片說明

注意非常小心 - 更新到(表達式可以是我們想要的任何東西 - 這也允許您輸入第二個表中的列。

當然,對這種危險的操作進行備份。

暫無
暫無

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

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