Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops VBA是否使用另一个表/记录集的值在Access中使用循环更新表/记录集?_Loops_Ms Access_Vba_Recordset - Fatal编程技术网

Loops VBA是否使用另一个表/记录集的值在Access中使用循环更新表/记录集?

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填

我需要一些VBA的帮助才能访问

我有一个包含100行数据的表
“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