【发布时间】:2016-04-12 18:17:52
【问题描述】:
我的问题与以下两个 Access 表有关,分别命名为 Table_1 和 Table_2。
以下代码旨在通过连接同一个表的其他两个列来更新 [Table_2.CombinedField] 列。两列之一必须是 [Table_2.BookName],另一列在 Table_1 中定义。
例如,在Table_1 中可以看到,小说BookType 应该使用Author 与BookName 连接,研究BookType 应该使用PublishYear 等。这意味着Table_2 中用于连接的列基于Table_1。
理想情况下,以下代码的目标结果应该是:
组合字段
汤姆 - 标题A
约翰 - 标题B
2010 - 标题C
2011 - 标题D
company5 - 标题E
但是,正如您在上面的 Table_2 屏幕截图中看到的 Table_2.CombinedField。该代码仅使用了 Table_1(作者)的第一行,并适用于 Table_2 的所有行。
Function CombineVariableFields_NoLoop()
On Error Resume Next
Dim ws As Workspace
Dim strSQL As String
Dim fieldname As String
fieldname = DLookup("[SelectCombineField]", "Table_1")
Set ws = DBEngine.Workspaces(0)
Set db = CurrentDb()
On Error GoTo Proc_Err
ws.BeginTrans
strSQL = "UPDATE Table_2 INNER JOIN Table_1 ON Table_2.BookType = Table_1.BookType SET Table_2.CombinedField = [Table_2]![" & fieldname & "] & ' - ' & [Table_2]![BookName]"
db.Execute strSQL, dbFailOnError
ws.CommitTrans
Proc_Exit:
Set ws = Nothing
Exit Function
Proc_Err:
ws.Rollback
MsgBox "Error updating: " & Err.Description
Resume Proc_Exit
End Function
我的问题
我想我应该使用类似循环的东西。但是,我真的不知道在这种情况下我应该如何将循环应用于代码。 (对不起,我是 VBA 新手)。下面的代码只是我的猜测,如果有人可以帮助指出确切的代码应该是什么,以便为 Table_2.CombinedField 生成我的目标结果,我将不胜感激。非常感谢。
以下代码只是我的猜测
Function CombineVariableFields_Loop()
On Error Resume Next
Dim ws As Workspace
Dim strSQL As String
Dim fieldname As String
Set ws = DBEngine.Workspaces(0)
Set db = CurrentDb()
On Error GoTo Proc_Err
ws.BeginTrans
Set rst = db.OpenRecordset("Select distinct SelectCombineField FROM Table_1", dbOpenDynaset)
With rst
Do While Not .EOF
fieldname = DLookup("[SelectCombineField]", "Table_1", "BookType = " & DLookup("BookType", "Table_2"))
strSQL = "UPDATE Table_2 INNER JOIN Table_1 ON Table_2.BookType = Table_1.BookType SET Table_2.CombinedField = [Table_2]![" & fieldname & "] & ' - ' & [Table_2]![BookName]"
db.Execute strSQL, dbFailOnError
.MoveNext
Loop
End With
ws.CommitTrans
Proc_Exit:
Set ws = Nothing
Exit Function
Proc_Err:
ws.Rollback
MsgBox "Error updating: " & Err.Description
Resume Proc_Exit
End Function
【问题讨论】: