2014-02-05 2 views
1

Access 용 VBA에 대한 도움이 필요합니다.다른 테이블/레코드 세트의 값으로 루프를 사용하여 VBA 업데이트 테이블/레코드 집합에 액세스 하시겠습니까?

나는 100 개의 데이터 행을 갖는 테이블 "Client_Table"을 가지고 있습니다. 나는 과 같은 다른 별개의 영업 담당자 ID 번호가있는 "SalesRep_Table" 테이블을 가지고있다.

내 목표는 첫째 ID 기록 "AA1111"과 제 10 행에 대한 "AssignedSalesRepID"을 명명 된 클라이언트 테이블의 해당 열에 배치합니다 걸리는 절차를 실행하는 것입니다, 다음 SalesRep_Table의 다음 ID 번호는 다음에 삽입됩니다 10 셀을 Clients 테이블에 저장하고 클라이언트 테이블의 100 행 데이터를 채우기 위해 10 개의 ID가 모두 10 개의 행에 모두 들어갈 때까지 루프를 통해 프로세스가 반복됩니다.

2 개의 레코드 세트를 만들고 SQL Update를 통해 루프를 시도해 보았습니다. 그러나 나는 마지막 판매 담당자 ID가 100 번 반복되는 모든 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 

답변

3

나는이 말을하기가 싫지만 SQL을 사용하여이 업데이트를 다시 고려해야합니다. 나는 당신이 이미 많은 코드를 작성했으며,이 모든 VB 코드를 낭비했다는 것을 SQL로 다시 전환하는 것처럼 느낄 수도 있습니다. 나는 과거와 같은 느낌이었다. 그러나 SQL을 사용하여이 문제를 해결할 수 있습니다. SQL 솔루션

단계 : 두 세트의

  1. 시퀀스 행
  2. 개조 B 세트 시퀀스 최대
  3. 업데이트 모드 = B 서열의 집합에 의해 정해진 순서
1

하면 이 두 테이블이 조인되는 f}을 정의하지 않고 조회에서 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 
관련 문제