Loops VBA是否使用另一个表/记录集的值在Access中使用循环更新表/记录集?
我需要一些VBA的帮助才能访问 我有一个包含100行数据的表Loops VBA是否使用另一个表/记录集的值在Access中使用循环更新表/记录集?,loops,ms-access,vba,recordset,Loops,Ms Access,Vba,Recordset,我需要一些VBA的帮助才能访问 我有一个包含100行数据的表“Client\u table”。我有另一个表“SalesRep_table”,其中我有10个不同的销售代表ID号(例如:AA1111,等等) 我的目标是运行一个过程,获取第一个ID记录“AA1111”,并将其放置在客户表中名为“AssignedSalesRepID”的适当列中,用于前10行,然后将SalesRep_表中的下一个ID号插入客户表中的下10个单元格中,这个过程通过一个循环重复,直到所有10个ID现在都在10行中,每个ID填
“Client\u table”
。我有另一个表“SalesRep_table”
,其中我有10个不同的销售代表ID号(例如:AA1111
,等等)
我的目标是运行一个过程,获取第一个ID记录“AA1111”
,并将其放置在客户表中名为“AssignedSalesRepID”
的适当列中,用于前10行,然后将SalesRep_表中的下一个ID号插入客户表中的下10个单元格中,这个过程通过一个循环重复,直到所有10个ID现在都在10行中,每个ID填充Clients表中的100行数据
我创建了两个记录集,并尝试通过SQL更新进行循环。但是,我最终发现所有100条记录只包含最后一个销售代表ID,重复了100次。你能看一下我的代码,让我知道在哪里需要修复吗
Public Sub Command01_Click()
Dim strSQL
Dim ClientsTableQuery, SalesRepList
Dim DataB as Database
Dim ClientQD as QueryDef
Dim SalesQD as QueryDef
Dim rstClient as Recordset
Dim rstSalesRep as Recordset
ClientTableQuery = "Clients"
SalesTableQuery = "SalesRepList"
'Creates a recordset with 100 client records named "Clients"
strSQL = "Select * from Client_Table"
Set DataB = CurrentDB()
Set ClientQD.CreateQueryDef(ClientTableQuery, strSQL)
Set rstClient = DataB.OpenRecordset(ClientTableQuery)
'Creates a recordset with 10 sales rep records named "SalesRepList"
strSQL = "Select SalesRepID from SalesRep_Table"
Set DataB = CurrentDB()
Set SalesQD.CreateQueryDef(SalesTableQuery, strSQL)
Set rstSalesRep = DataB.OpenRecordset(SalesTableQuery)
rstSalesRep.MoveFirst
rstClient.MoveFirst
Do Until rstSalesRep.EOF = True
'SQL Query to update the top 10 cells in the "Assigned Sales Rep ID" column in the
Clients recordset with the Sales Rep ID from the SalesRepList recordset
strSQL = "Update Clients, SalesRepList SET Clients.AssignedSalesRepID =
SalesRepList.SalesRepID where Clients.ClientIDNumber in (Select Top 10
Clients.ClientIDNumber FROM Clents where Clients.AssignedSalesRepID is Null)"
DoCmd.RunSQL (strSQL)
rstSalesRep.MoveNext
Loop
MsgBox "Finished Looping"
rstSalesRep.Close
End Sub
我不想告诉你这一点,但你应该重新考虑使用SQL进行更新。我看到您已经编写了很多代码,如果切换回SQL,您可能会觉得浪费了所有这些vb代码。过去我自己也有这种感觉。但是,您可以使用数量级更少的代码(或者几乎如此)使用SQL来解决这个问题
SQL解决方案的步骤:
对两个集合中的行进行排序
用B集合序列最大值修改A集合序列
更新mod=b seq上的集合
我不想告诉你这一点,但你应该重新考虑使用SQL进行更新。我看到您已经编写了很多代码,如果切换回SQL,您可能会觉得浪费了所有这些vb代码。过去我自己也有这种感觉。但是,您可以使用数量级更少的代码(或者几乎如此)使用SQL来解决这个问题
SQL解决方案的步骤:
对两个集合中的行进行排序
用B集合序列最大值修改A集合序列
更新mod=b seq上的集合
您正在查询中进行连接调用,但未定义这两个表的连接方式。您没有提到要将assignedSalesRepId设置为的rstSalesRep记录集的哪个记录
此外,我会将您的所有代码缩减为以下内容:
Dim strSQL
Dim DataB As Database
Dim rstSalesRep As Recordset
Set DataB = CurrentDb()
Set rstSalesRep = DataB.OpenRecordset("Select SalesRepID from SalesRep_Table ")
Do Until rstSalesRep.EOF = True
strSQL = "Update Client_Table, SalesRep_Table SET Client_Table.AssignedSalesRepID = SalesRep_Table.SalesRepID " & _
"where Client_Table.ClientIDNumber in (Select Top 2 Client_Table.ClientIDNumber FROM Client_Table where Client_Table.AssignedSalesRepID is Null)" & _
" and SalesRep_Table.SalesRepID = '" & rstSalesRep("SalesRepID") & "'"
DoCmd.RunSQL (strSQL)
rstSalesRep.MoveNext
Loop
MsgBox "Finished Looping"
rstSalesRep.Close
您正在查询中进行连接调用,但未定义这两个表的连接方式。您没有提到要将assignedSalesRepId设置为的rstSalesRep记录集的哪个记录
此外,我会将您的所有代码缩减为以下内容:
Dim strSQL
Dim DataB As Database
Dim rstSalesRep As Recordset
Set DataB = CurrentDb()
Set rstSalesRep = DataB.OpenRecordset("Select SalesRepID from SalesRep_Table ")
Do Until rstSalesRep.EOF = True
strSQL = "Update Client_Table, SalesRep_Table SET Client_Table.AssignedSalesRepID = SalesRep_Table.SalesRepID " & _
"where Client_Table.ClientIDNumber in (Select Top 2 Client_Table.ClientIDNumber FROM Client_Table where Client_Table.AssignedSalesRepID is Null)" & _
" and SalesRep_Table.SalesRepID = '" & rstSalesRep("SalesRepID") & "'"
DoCmd.RunSQL (strSQL)
rstSalesRep.MoveNext
Loop
MsgBox "Finished Looping"
rstSalesRep.Close