VBA更新Access中的表/记录集使用循环与另一个表/记录集中的值?
问题描述:
我需要一些有关Access的VBA的帮助。VBA更新Access中的表/记录集使用循环与另一个表/记录集中的值?
我有一个表"Client_Table"
与100行数据。我有另一张表"SalesRep_Table"
,其中我有10个不同的销售代表ID号(例如:AA1111
等)。
我的目标是运行采取的第一个ID记录"AA1111"
并将其放置在一个名为"AssignedSalesRepID"
的第10行的客户表中相应列的程序,然后在SalesRep_Table
下一个ID号被插入到下一个Clients
表中有10个单元,并且该过程通过循环重复,直到所有10个ID现在都在10行中,以填充“客户”表中的100行数据。
我通过创建两个记录集并尝试通过SQL Update进行循环来解决这个问题。然而,我最终得到的所有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溶液:在两组
- 序列行
- MOD被B组序列最大
- 更新上模= B SEQ一组一组序列
答
您正在查询中进行Join调用,而不定义如何连接这两个表。你没有提及任何地方,你希望设置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