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溶液:在两组

  1. 序列行
  2. MOD被B组序列最大
  3. 更新上模= 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