2009-05-05 6 views
1

J'ai une feuille de calcul que je convertis en base de données Access. J'ai une colonne de noms de clients dactylographiés que je veux remplacer par le numéro de client approprié de notre système comptable.Mettre à jour une requête à partir d'une requête de recherche

J'ai créé une table avec les informations client et une requête indiquant quel ID doit être inséré dans les données source. Ce que je cherche est:

UPDATE tblStarting_Data 
SET CustomerID=x 
WHERE TEMPCustomer=y 

Où X et Y proviennent de qryIDPerCustomer. Puis-je utiliser une boucle?

Comment puis-je référencer une autre requête?

Répondre

2

Une autre possibilité dans MS Access (noms d'objets empruntés à réponse Tomalak):

UPDATE tblStarting_Data, qryIDPerCustomer 
SET tblStarting_Data.CustomerID=qryIDPerCustomer.CustomerID 
WHERE tblStarting_Data.TEMPCustomer=qryIDPerCustomer.CustomerName 
+0

+1 - Je ne savais pas si Access supportait la mise à jour requête (il y a quelques années j'aurais su par coeur ... * soupir *). Je devais le feu et l'essayer. – Tomalak

+0

Je pense qu'il ne supporte pas la construction T-SQL habituelle "update x set a = y.b de x join y" et il ne supporte pas la jonction avec la requête agrégée, d'autres variantes fonctionnent habituellement. Mais je n'ai pas MS Access ici pour vérifier les règles exactes; Donc, je n'ai pas écrit Access queris pour l'année ou deux :) – Arvo

+0

Je n'étais pas un peu clair avec la demande. Votre code finit par être MISE À JOUR tblStarting_Data, qryIDPerCustomer SET tblStarting_Data.CustomerID = qryIDPerCustomer.CustomerID OÙ tblStarting_Data.OpportunityID = qryIDPerCustomer.OpportunityID Tu me as assez proche de ce que je devais bien, MERCI! – NickSentowski

1

Je pense que JOIN vous aidera:

UPDATE 
    tblStarting_Data AS sd 
    INNER JOIN qryIDPerCustomer AS qc ON sd.TEMPCustomer = qc.CustomerName 
SET 
    sd.CustomerID = qc.CustomerID; 

Cela peut être exprimé sous la forme d'une sous-requête corrélée aussi bien (bien que la syntaxe de jointure est préférable):

UPDATE 
    tblStarting_Data 
SET 
    CustomerID = (
    SELECT CustomerID 
    FROM qryIDPerCustomer 
    WHERE CustomerName = tblStarting_Data.TEMPCustomer 
) 

Pas besoin de une boucle, les deux instructions mettra à jour tous les enregistrements dans tblStarting_Data en une seule étape.

+0

Je ne pouvais pas votre méthode de travail ... Il est logique quand je l'ai lu, mais dans le code, il vient de gagner ne pas exécuter. – NickSentowski

+1

Votre syntaxe de sous-requête corrélée, malgré sa syntaxe SQL-92 standard, n'est pas supportée par ACE/Jet (même dans son propre mode de requête ANSI-92!) – onedaywhen

Questions connexes