2014-02-12 6 views
1

Я пытаюсь создать инструмент, который извлекает информацию из базы данных, содержащей финансовую информацию, но я столкнулся с этой проблемой. Следующий запрос предоставит мне некоторые требуемые данные, но как только я добавлю в подзапрос, я получаю сообщение об ошибкеПодзапрос, не работающий со связанными с доступом таблицами

«ODBC - вызов не выполнен».

Если я заменил подзапрос статическим "WHERE TRAN_NUMBER IN (0,1,2,3..)", он возвращает ожидаемые значения. Подзапрос возвращает ожидаемые значения при запуске самостоятельно.

Я использую MS Access и C# и библиотеки OleDB сделать это

Любые идеи, что я сделал неправильно?

SELECT NOMINAL_CODE, DETAILS, AMOUNT, TYPE 
FROM AUDIT_JOURNAL 
WHERE TRAN_NUMBER IN 
    (SELECT AUDIT_TRAIL_ID 
    FROM PROJECT_TRAN 
    WHERE AUDIT_TRAIL_ID > 0); 

Первый шанс исключение типа 'System.Data.OleDb.OleDbException' произошло в System.Data.dll

Дополнительная информация: ODBC - сбой вызова

Изменить: похоже, что подзапросы не работают при подключении к другой базе данных через ODBC (исходная база данных - это база данных SageLine50). Я импортировал таблицы статически и, похоже, работает. Кто-нибудь знает, как я могу сделать эту работу без статического импорта таблиц?

+0

Выполняет ли весь запрос при запуске непосредственно против db? – Dan

+0

Вы пытались запустить подзапрос самостоятельно? – Steve

+0

Yup, подзапрос работает правильно сам по себе, когда он добавлен вместе, он не работает. Может ли это быть связано с тем, что база данных связана с ODBC-соединением? – user3295060

ответ

1

Вместо того, чтобы использовать в операторе и подзапрос можно попробовать РЕГИСТРИРУЙТЕСЬ

SELECT 
    aj.NOMINAL_CODE, 
    aj.DETAILS, 
    aj.AMOUNT, 
    aj.TYPE 
FROM 
    AUDIT_JOURNAL AS aj 
    INNER JOIN 
    PROJECT_TRAN AS pt 
     ON aj.TRAN_NUMBER = pt.AUDIT_TRAIL_ID 
WHERE pt.AUDIT_TRAIL_ID > 0 

Re: Ваш комментарий в редактированием на ваш вопрос

выглядит как подзапросы не работают, когда связаны в другую базу данных через ODBC (исходная база данных - это база данных SageLine50).

Это, безусловно, не так для все ODBC связанные таблицы. Я создал таблицы [AUDIT_JOURNAL] и [PROJECT_TRAN] в SQL Server 2008 R2, создал связанные таблицы в Access 2010, и ваш исходный запрос отлично работает в Access. (Моя тоже.) Ваша проблема почти наверняка вызвана недостатком драйвера SageLine50 ODBC.