微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用查询或 VBA 和 SQL

如何解决如何使用查询或 VBA 和 SQL

我已经使我的数据库与各种代码解决方法一起工作,但效率不高!所以这是一个可以解决我很多问题的问题:

两个 ACCESS 表: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 中的缺失值(使用日期、时间、地点这 3 个值设置为 ID):

这里将如何进行?使用表格查询?有第三张桌子?使用 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 列建立索引。

好的,让这个查询正常工作!!!!!!!!!

它看起来像这样:

enter image description here

如前所述,双击 PK id(将其放入网格中)。对要复制的所有列执行相同操作。

现在,右键单击查询构建器中的任何空白区域,然后更改更新查询的查询类型 - 如下所示:

enter image description here

现在,在更新的表达式中,输入 tableB 中的字段

你明白了:

enter image description here

注意非常小心 - 更新到(表达式可以是我们想要的任何东西 - 这也允许您输入第二个表中的列。

当然,在这种危险的操作中进行备份。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。