2010-12-13 50 views
0

J'ai un problème bizarre avec MS Access 2007. Si je lance la requête suivante:Trop de champs définis

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.* 
FROM QUERY_LNK_ORDERS_ITEMS 
INNER JOIN QUERY_LNK_ERASALES_ERACOND 
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat 

Il fonctionne, pas de problèmes, je veux inclure des documents manquants à gauche/droite rejoindre donc je lance:

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.* 
FROM QUERY_LNK_ORDERS_ITEMS 
INNER JOIN QUERY_LNK_ERASALES_ERACOND 
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat 
UNION ALL 
SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.* 
FROM QUERY_LNK_ORDERS_ITEMS 
LEFT JOIN QUERY_LNK_ERASALES_ERACOND 
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat 
WHERE QUERY_LNK_ORDERS_ITEMS.concat IS NULL 
UNION ALL 
SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.* 
FROM QUERY_LNK_ORDERS_ITEMS 
RIGHT JOIN QUERY_LNK_ERASALES_ERACOND 
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat 
WHERE QUERY_LNK_ERASALES_ERACOND.concat IS NULL 

Et je reçois: trop de champs définis

Je ne comprends pas ... je sélectionne le montant exact des champs, où est cette erreur vient de gars?

Merci à l'avance Vive

+0

essayer d'utiliser une liste de colonnes explicite ... –

+0

Salut Mitch, la chose est que j'ai une liste très très long lol En fait, si j'essaie avec seulement un ou deux champs ça marche, mais pas Si j'inclus tout – CoolStraw

+0

sans manquer de respect à MS ou à vous-même, Access n'est pas un produit de base de données complet. Il est destiné à des utilisations simples par des utilisateurs non techniques et le fait bien - mais trop souvent de tels produits sont utilisés pour des choses pour lesquelles ils ne sont pas conçus. Si vous essayez de simuler une jointure complète (comme décrit ci-dessous), vous êtes clairement techniquement sophistiqué et vous méritez d'utiliser un meilleur produit de base de données. Je suggère fortement que vous essayez une autre base de données qui peut faire ce travail mieux et plus facilement. –

Répondre

2

Peut-être que le problème n'a rien à voir avec votre REJOINT, mais avec vos SYNDICATS!

J'ai recherché votre message d'erreur et trouvé ceci: http://www.mvps.org/access/tables/tbl0002.htm. Étant donné que vous avez autant de domaines ... Peut-être que c'est le problème? Notez que les différents articles parlent du nombre de champs INTERNAL de MS Access. Puisque les différentes clauses UNION ALL sont limitées par ce nombre de champs internes

+0

J'ai essayé de compacter la table ... mais elle n'a rien arrangé là-bas – CoolStraw

+0

Que signifie "compactage"? Et combien de champs obtenez-vous lorsque vous sélectionnez * dans les deux tableaux? –

+0

J'ai 199 champs. Et le compactage est un outil dans la base de données qui réinitialise les compteurs de champs (parce que si vous déposez une colonne par exemple, il ne diminue pas, donc le compact est un moyen de nettoyer les lapins hors de la base de données) – CoolStraw

0

Je ne sais pas si cela aide, mais je ne pense pas que vous obtiendrez des résultats d'une requête gauche jointure qui nécessite la gauche colonne de jointure être nulle, et de même pour une requête de jointure à droite où la colonne de jointure à droite est null, ce qui semble être ce qui se passe ici. Peut-être essayer de changer les jointures gauche et droite?

+0

Lorsque j'exécute les jointures gauche/droite séparément, j'obtiens le résultat attendu – CoolStraw

+0

Cela soutiendrait l'idée, que le problème réside dans les UNIONS ... –

+0

En effet! Je viens de recevoir la confirmation ... L'UNION voit ma sélection de 2 * 200 ... donc 400 colonnes ... C'est vraiment bête ... Merci les gars, je vais essayer de trouver une autre façon de résoudre ça .. – CoolStraw

0

Jetez un oeil à ce article. Il explique assez bien toutes les différentes jointures.

Dans votre cas, pourquoi n'utilisez-vous pas une jointure externe complète?

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.* 
FROM QUERY_LNK_ORDERS_ITEMS 
FULL OUTER JOIN QUERY_LNK_ERASALES_ERACOND 
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat 
+0

MS Access n'a pas de connexion externe malheureusement, et la façon dont je fais les choses dans ma requête est la façon de simuler la jointure externe complète en fait :) – CoolStraw

+0

D'accord. Désolé, je ne savais pas ! – Spredzy

+0

Pas de problème du tout merci pour votre tentative si :) – CoolStraw

0

Puisque vous avez trouvé que le problème est avec les UNIONs (commentez la réponse de Spiny Norman), je pense que votre seule option sera une table temporaire (bien que vous pourriez vouloir définir sa structure premanently, puis s'assurer que les utilisations valides l'effacent toujours avant de repeupler). Ensuite, exécutez chacune de vos requêtes sous la forme d'une insertion (peut-être avec la première en tant que make-table si vous ne partez pas avec une structure permanente), et sélectionnez-en une pour votre résultat final.

0

Avez-vous obtenu une réponse à celui-ci d'une autre manière pourrait se situer dans la séparation et la combinaison dans un jeu d'enregistrements.

Set rs = db.OpenRecordset(SQL1) 
Set rs1 = db.OpenRecordset(SQL2) 
Set rs2 = db.OpenRecordset(SQL3) 
.......