2013-04-18 3 views
2

У меня возникла проблема с запросом обновления, который обновляет один столбец в одной из наших таблиц Oracle. В основном мы импортируем CSV-файл в Access, называем его «NewULN», тогда критерии из этого файла используются для обновления нашей таблицы.MS Access Обновление базы данных Oracle - проблемы с запросом

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

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN] 
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=[Enter Person Code]); 

Теперь мы хотим обновить все записи на одном дыхании, но у нас всегда были трудности делают это. Вот я думал этот код ниже будет нормально:

Orginal Код:

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN] 
WHERE (NewULN.ULN Is Not Null) AND (FES_PEOPLE.PERSON_CODE=NewULN.MISIdentifier); 

Самая последняя версия (на основе предложений):

UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN].[ULN] 
WHERE (NewULN.ULN Is Not Null); 

Но мы имели все виды ошибки возникают - иногда Access просто падает, когда вы пытаетесь запустить запрос доступа.

Иногда это может привести к нарушениям блокировки (интересно, что он обновит первую запись, а затем провалится все остальное). Иногда появляется ошибка «FES_PEOPLE -« недопустимый номер », иногда« Может связывать длинное значение только для вставки в длинный столбец ».

Поле ULN всегда было Text, и оно всегда работало до этого, MISIdentifier всегда был текстовым (когда у нас была работающая версия этого в Windows XP), но теперь я изменил его на Long Int.

Я не писал это общенационально, он прекратил работать после того, как мы обновили наши машины до Windows 7, поэтому теперь мне нужно переписать его с очень небольшим знанием Access.

Спасибо за любые ответы, которые я получаю заранее

ответ

0

Оказывается, что создание новой базы данных Access и повторное использование всех таблиц снова позволило этому запросу работать. В синтаксисе не было ничего плохого :-)

1

В вашем втором запросе вы уже делаете объединение на NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE так и в том числе, что условия в вашей ИНЕКЕ является излишней. Возможно, это бросает ключ в работу?

+0

Спасибо за ваш вклад, я этого даже не заметил. Я вынул бит в предложении WHERE и запустил обновление, но получил ошибку нарушения блокировки. Он обновил первую запись снова, но не на другой 67. Новый код: UPDATE NewULN INNER JOIN FES_PEOPLE ON NewULN.MISIdentifier = FES_PEOPLE.PERSON_CODE SET FES_PEOPLE.UNIQUE_LEARN_NO = [NewULN] [ULN] WHERE (NewULN.. ULN не является нулевым); – Zakerias

0

Какой драйвер ODBC вы используете для подключения к Oracle? Если вы используете драйвер Microsoft for Oracle, попробуйте вместо этого использовать драйвер Oracle. Драйвер MS не обновлялся с версии 7 и не должен использоваться.

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