2009-08-04 13 views
1

Une implémentation Microsoft Access lève une erreur d'incompatibilité de type en essayant d'exécuter une macro qui ouvre certaines requêtes. La plupart des tables sont liées à un serveur SQL et j'ai besoin de joindre deux des tables qui ont des types de données différents.Comment joindre des tables ensemble sur des colonnes avec différents types de données?

Tableau A:
TEXTE DE RÉFÉRENCE

Tableau B:
REFNO NUMÉRO

Je veux habituellement pour corriger le problème du côté de SQL Server, mais il y a plusieurs applications qui frappent la même base de données et il faudrait beaucoup de temps pour les tester tous. En outre, nous sommes en train de réécrire complètement cette application et tout travail que je fais aujourd'hui est complètement jetable ...

S'il y a un moyen de rendre cette jointure possible en accès, je voudrais gagner tout le temps ...

Répondre

3

Dans Access, vous pouvez utiliser la fonction CLng (ou Cint) pour convertir les valeurs REFERENCE du tableau A du texte en nombre.

Je préférerais créer une vue du tableau A dans SQL Server pour transformer le type de données du champ avant qu'Access obtienne les données. Vous ne devriez pas avoir besoin de tester la vue par rapport à vos autres applications existantes. Lorsque votre réécriture rend la vue inutile, jetez-la.

+0

J'ai été capable d'accomplir cela en créant une vue sur la base de données SQL, puis l'ai amené dans Access et j'ai remplacé la table par la vue des requêtes. Merci pour la suggestion rapide. – RSolberg

1

Quel est le type de données pour chacune des colonnes, vous l'avez mentionné?

Si vous voulez le comparer dans le sens chaîne, vous pouvez faire Cstr(myNumericColumn) = myStringColumn. OU pour le comparer en mode numérique, faites CLng(myStringColumn) = myNumericColumn.

+0

son dessus, tableA a une colonne de texte tout en tableB a une colonne entière. – RSolberg

+0

Vous pouvez utiliser l'un des éléments ci-dessus, selon la façon dont vous souhaitez comparer. – shahkalpesh

+0

Je ne crois pas que cela fonctionne dans le contexte d'une jointure – RSolberg

2

Vous pouvez faire la comparaison dans les critères.

SELECT [REFERENCE], [REFNO] 
FROM [Table a], [Table b] 
WHERE [REFERENCE]=cstr(nz([REFNO],"")) 

Vous pouvez également faire un passthrough - une requête d'accès qui exécute sur le serveur SQL et renvoie uniquement les données.

SELECT [REFERENCE], [REFNO] 
FROM [Table a], [Table b] 
WHERE [REFERENCE]=cast([REFNO] as varchar(25)) 

HTH

Questions connexes