簡體   English   中英

使用另一個表中的值更新ms-access表中的值

[英]Updating values in ms-access table with values from another table

我有一個帶有兩個表T1和T2的Access 2010數據庫。 我想編寫一個更新查詢,以便T1中的值被T2中的值更新。 T2有其他字段,而T1沒有。 這些字段應忽略以進行更新。 除了那些字段,T1和T2共享相同的字段和字段名稱。

由於字段的數量很大(至少50個),因此我試圖查找查詢的簡單拖放配置。 通過將T1的主鍵拖到T2的主鍵,我在設計視圖中連接了兩個表。 然后,我將T1的所有字段添加到表視圖下面的數據網格中。

Access現在希望我選擇並輸入添加字段下面的每個字段([T2]。[fieldname])。 我想嘗試實現的是那些信息自動填寫。 我懷疑Access缺少如此重要的功能,並且會感謝有人向我指出正確的方向或對為什么這不是更新表的正確方法提供一些見解。

考慮在更新查詢中的INNER JOIN

UPDATE Table1 t1 
INNER JOIN Table2 t2 ON t1.ID = t2.ID
SET 
   t1.Col1 = t2.Col1,
   t1.Col2 = t2.Col2,
   t1.Col3 = t2.Col3,
   ...

但是,編寫50個字段的SET行有點繁瑣,而且您發現使用“設計視圖”不容易做到。 因此,考慮使用VBA使用querydef以編程方式創建查詢,並遍歷tabledef的字段:

Public Sub CreateUpdateQuery()
    Dim tbl As DAO.TableDef
    Dim qdf As DAO.querydef
    Dim fld As DAO.Field
    Dim strSQL As String

    strSQL = "UPDATE Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID SET "

    For Each tbl In CurrentDb.TableDefs
        If tbl.Name = "Table1" Then
            For Each fld In tbl.Fields
                If fld.Name <> "ID" Then
                    strSQL = strSQL & " t1.[" & fld.Name & "] = t2.[" & fld.Name & "],"
                End If
            Next fld
        End If
    Next tbl

    strSQL = Left(strSQL, Len(strSQL) - 1) & ";"                 ' REPLACING LAST COLUMN

    For Each qdf In CurrentDb.QueryDefs
        If qdf.Name = "QryName" Then
            CurrentDb.Execute "DROP TABLE " & qdf.Name           ' DELETES QUERY IF EXISTS
        End If
    Next qdf

    Set qdf = CurrentDb.CreateQueryDef("QryName", strSQL)  ' SAVES A STORED QUERY

    Set tbl = Nothing
    Set qdf = Nothing
End Sub

我不確定您嘗試的問題是什么,但是使用編碼的更新查詢(例如:

UPDATE T1
SET T1.col1 = T2.col1,
    T1.col2 = T2.col2,
    T1.col3 = T2.col3,
    [repeat for each field you're updating]
WHERE T1.pKey = T2.pKey

通過僅包含要更新的T1中的字段,T2中的其他字段就沒有關系。

暫無
暫無

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

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