0

这是我的问题:

假设我有这些表:

表格1

1 - “一个”

2 - “乙”

表2

1 -

2 -

3 -

现在,我使用以下代码来比较表格:

table2.MoveFirst
Do While Not table2.EOF
 table1.Seek "=", table2!field2
  If table1.NoMatch Then
               go do a lot of things to find that information
  Else 
   table2.Edit
   table2!Field2 = table1!field2
   table2.update
  End If
 table2.MoveNext
Loop

但是线

table2!Field2 = table1!field2

工作得不是很好。我很确定我在这里做错了什么,但我在寻找解决方案时遇到了问题。我什至不确定我应该用谷歌搜索什么......

编辑:字段 2 在表 1 中编入索引,因此“查找”有效。

4

3 回答 3

1

但是这条线运行table2!Field2 = table1!field2得不太好

...不是很好地描述出了什么问题。

代码是否在此行停止/崩溃?
它是否运行没有错误,但没有做任何事情/超出您的预期?

我想您正在使用 DAO 记录集。
没有更多信息很难给出建议,但我会试一试:

  1. table2完全空的吗?您的描述如下所示:

    table2
    1 -
    2 -
    3 -

    如果是,则整个循环可能根本不会执行。

  2. 记录集table2可以更新吗?
    并非所有类型的 Recordsets 都支持这一点,这取决于您如何创建它。请参阅 MSDN:Recordset Object (DAO),开头有一个 Recordset 类型列表。
    如果它不可更新,您应该在调用.Update.

于 2011-11-21T15:23:12.010 回答
1

一些笔记。

假设您想要 Table2 中在名为 Field1 的字段上没有匹配项的所有记录:

sSQL = "SELECT Field1, FieldX FROM Table2 " _
     & "LEFT JOIN Table1 " _
     & "ON Table2.Field1 = Table1.Field1 " _
     & "WHERE Table1.Field1 Is Null"

当然,您可以在查询设计窗口中构建查询并摆弄直到是您想要的,然后切换到 SQL 视图以获得正确的(ish)SQL 字符串。

Dim rs As DAO.Recordset

Set rs = CurrentDB.Openrecordset(sSQL)

''table2.MoveFirst
Do While Not rs.EOF ''table2.EOF

''You do not need no match, all these records are missing a match
''    table1.Seek "=", table2!field2
''    If table1.NoMatch Then
           go do a lot of things to find that information
    rs.MoveNext
Loop
''This can all be done with one update query
''    Else 
''    table2.Edit
''    table2!Field2 = table1!field2
''    table2.update
''    End If
''    table2.MoveNext
''    Loop

sSQL = "UPDATE Table2 " _
     & "INNER JOIN Table1 " _
     & "SET table2.Field2 = table1.field2 " 

CurrentDB.Execute sSQL dbFailOnerror

请将以上内容视为注释,而不是完成的代码。

于 2011-11-21T16:01:00.357 回答
1

如果您使用的是 DAO 记录集(如 Christian 建议的那样),您可以更改该行

table2!Field2 = table1!field2

table2.Fields("Field2").value = table1.Fields("field2").value

我假设两个 Field2 都是文本数据类型。

于 2011-11-21T20:31:31.720 回答