VBA mise à Jour de la table/jeu d'enregistrements dans l'Accès à l'aide de Boucle avec des valeurs d'une autre table/jeu d'enregistrements?
J'ai besoin d'aide avec certains de VBA pour Access.
J'ai une table "Client_Table"
avec 100 lignes de données. J'ai une autre table "SalesRep_Table"
où j'ai 10 distinctes Représentant des Ventes de numéros d'identification (comme: AA1111
, et ainsi de suite).
Mon but est d'exécuter une procédure qui prend le premier enregistrement de l'ID de "AA1111"
et la place dans la colonne appropriée sur la les Clients table nommée "AssignedSalesRepID"
pour les 10 premières lignes, alors le prochain numéro d'identification dans le SalesRep_Table
est insérée dans le prochain 10 cellules dans le Clients
table, et le processus se répète à travers une boucle jusqu'à ce que tous les 10 Id sont maintenant en 10 lignes à remplir les 100 lignes de données dans les Clients à la table.
Je suis allé à ce sujet par la création de deux jeux d'enregistrements et d'essayer une boucle à l'aide de SQL de mise à Jour. Cependant, je me retrouve avec tous les 100 enregistrements contenant juste le dernier Représentant des Ventes ID 100 fois répété. Pouvez-vous jeter un oeil à mon code et laissez-moi savoir où il doit être corrigé?
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
Vous devez vous connecter pour publier un commentaire.
Je déteste être le seul à vous le dire, mais vous devriez reconsidérer l'utilisation de SQL pour faire cette mise à jour. Je vois que vous avez déjà écrit beaucoup de code et peut se sentir comme si vous revenez à SQL que vous aurez alors perdu tout ce code vb. Je me suis senti comme moi-même dans le passé. Mais vous pouvez résoudre ce problème avec SQL avec un ordre de grandeur de moins de code(ou presque).
Étapes pour SQL solution:
Vous faire une Jointure appel dans votre requête, sans définir comment ces 2 tables sont jointes. Vous n'êtes pas mentionner n'importe où, l'enregistrement de la rstSalesRep jeu d'enregistrements que vous souhaitez définir les assignedSalesRepId à.
Aussi je voudrais réduire tout votre code comme suit: