2009-08-04 2 views
1

Реализация Microsoft Access бросает ошибку несоответствия типа при попытке выполнить макрос, который открывает некоторые запросы. Большинство таблиц связаны с SQL Server, и мне нужно объединить две таблицы вместе с разными типами данных.Как объединить таблицы вместе с колонками с различными типами данных?

Таблица A:
ССЫЛКА TEXT

Таблица B:
Код ссылки ЧИСЛО

я обычно хочу, чтобы исправить проблемы на стороне SQL Server, но есть несколько приложений, поражающие одна и та же база данных, и для их проверки потребуется немало времени. Кроме того, мы находимся в процессе полного перезаписи этого приложения, и любая работа, которую я делаю сегодня, полностью отбрасывается ...

Если есть способ сделать это соединение доступным для доступа, я бы сэкономил все виды времени ...

ответ

3

Внутри Access вы можете использовать функцию CLng (или Cint), чтобы преобразовать значения REFERENCE таблицы A из текста в число.

Я бы предпочел создать представление таблицы A на SQL Server, чтобы преобразовать тип данных поля, прежде чем Access получит данные. Вам не нужно проверять представление на наличие других существующих приложений. Когда повторная запись сделает просмотр более бесполезным, просто отбросьте его.

+0

Мне удалось это сделать, создав представление по SQL-базе данных, а затем доставив его в Access и заменив таблицу на представление запросов. Спасибо за быстрое предложение. – RSolberg

1

Каков тип данных для каждого столбца, о котором вы упомянули?

Если вы хотите сравнить его по строкам, вы можете сделать Cstr(myNumericColumn) = myStringColumn.
ИЛИ сравнить его в цифровом режиме, сделать CLng(myStringColumn) = myNumericColumn.

+0

его выше, TableA имеет текстовый столбец в то время как TableB имеет целочисленный столбец. – RSolberg

+0

Вы можете использовать любой из перечисленных выше способов, в зависимости от того, как вы хотите сравнить. – shahkalpesh

+0

Я не считаю, что работает в контексте присоединения – RSolberg

2

Вы можете сделать сравнение по критериям.

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

Вы также можете сделать Проходное - запрос в отношении доступа, который выполняется на сервере SQL и возвращает только данные.

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

НТН

Смежные вопросы