2015-08-26 6 views
0

Я стажер в небольшой компании, которая делает некоторые исправления для 15-летней базы данных доступа, которая используется для отслеживания клиентов, рабочих мест и т. m пытается написать запрос на обновление и, похоже, не может работать так, как мне это нужно. Вот мое отношение.Обновление запроса в Access 2010-Update на основе совпадающих полей

У меня есть две таблицы. Один содержит информацию о компании. Другая содержит контактную информацию. Первичный ключ таблицы компаний также находится в таблице контактов, для отношения «один ко многим». Например, если компания имеет 3 контакта, номер CompanyID, который находится в первичном ключе таблицы компании, связан с тремя контактами в таблице контактов.

Хорошо. Теперь проблема заключается в том, что в форме, называемой «Компания», есть какой-то унаследованный код, который одновременно выполняет поиск как для контактов, так и для компаний. Проблема в том, что в таблице контактов есть поле «ContactCompany», которое используется этой старой функцией поиска. Если пользователь меняет название Компании в форме, название Компании обновляется в таблице Компании, но НЕ в таблице «Контакты».

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

UPDATE Company INNER JOIN Contacts ON (Company.ID = Contacts.CompanyID) AND (Company.ContactCompany = Contacts.ContactCompany) SET Contacts.ContactCompany = [Company].[ContactCompany] WHERE (([Contacts].[CompanyID]=[Company].[ID])); 

При запуске Access запрос говорит мне, что это обновление X количество записей, но записи не обновляются.

Обратите внимание: я использовал построитель запросов; код SQL был автоматически сгенерирован путем доступа, когда я перехожу в представление SQL.

Я не очень опытен с VB; все мои знания были из материалов для Google. Если кто-то может дать мне несколько указаний на то, что я делаю неправильно или как действовать, я был бы благодарен. Благодаря!

+0

Здравствуйте Someguy Добро пожаловать в StackOverflow, в следующий раз попытаться обеспечить [** SqlFiddle **] (HTTP : //sqlfiddle.com/#! 15/5368b/6), чтобы мы могли лучше понять проблему и дать вам ответ намного быстрее. Также прочитайте [** Как спросить **] (http: // stackoverflow. com/help/how-to-ask) и [** Как создать минимальную , Complete и Verifiable. **] (http://stackoverflow.com/help/mcve) –

+0

Спасибо, я не знал о SqlFiddle. – someguy

ответ

0

Поскольку в вашем состоянии соединения вы выбираете Contact.ContactCompany, у которого уже есть такое же имя ContactCompany.

AND (Company.ContactCompany = Contacts.ContactCompany) 

Удалите эту часть «И», и ваш запрос должен выглядеть примерно так.

UPDATE Company 
INNER JOIN Contact ON Company.ID = Contact.CompanyID 
SET Contact.ContactCompany = [Company]![ContactCompany] 
WHERE (([Contact]![CompanyID]=[Company]![ID])); 

P.S. Убедитесь, что у вас есть резервная копия вашей базы данных перед обновлением

+0

Это сработало отлично! Большое вам спасибо за то, что нашли время, чтобы помочь новичкам! – someguy

+0

Одна вещь 'WHERE (([Contact]! [CompanyID] = [Company]! [ID]));' избыточно, потому что вы уже делаете 'join on Company.ID = Contact.CompanyID' –

0

Я использую assitance запроса из Access

Вам не нужно AND (Company.ContactCompany = Contacts.ContactCompany) вы уже сейчас говорите те разные.

UPDATE Company 
INNER JOIN Contact 
     ON Company.CompanyID = Contact.CompanyID 
SET Contact.CompanyName = [Company].[CompanyName]; 

Вы можете добавить эту строку обновлять только те разные

WHERE Contact.CompanyName <> = [Company].[CompanyName] 

enter image description here

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