我需要一些VBA for Access的帮助。
我有一个包含100行数据的表"Client_Table"
。我有另一个表"SalesRep_Table"
,其中有10个不同的销售代表ID号(例如:AA1111
,依此类推)。
我的目标是运行一个获取第一个ID记录"AA1111"
的过程,并将其放在前10行的名为"AssignedSalesRepID"
的Clients表的相应列中,然后是下一个ID号。 SalesRep_Table
被插入到Clients
表中的下10个单元格中,并且该过程重复循环,直到所有10个ID现在分别为10行,以填充Clients表中的100行数据。
我通过创建两个记录集并尝试通过SQL Update循环来实现它。但是,我最终得到的所有100条记录只包含最近100次重复的销售代表ID。你能看一下我的代码,让我知道它需要修复的地方吗?
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
答案 0 :(得分:3)
我不想成为那个告诉你的人,但你应该重新考虑使用SQL来做这个更新。我看到你已经编写了很多代码,可能会觉得如果你切换回SQL那么你就会浪费掉所有这些vb代码。我过去曾经感觉到这一点。但是你可以用SQL来解决这个问题,其代码数量减少了一个数量级(或差不多)。
SQL解决方案的步骤:
答案 1 :(得分:1)
您正在查询中进行加入调用,而不定义如何加入这两个表。您没有在任何地方提及,您希望将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