Формы доступа - редактировать запись из запроса с объединением по связанной таблице

Моя установка использует Access 2000 со связанными таблицами с сервером SQL 2008.

Я создал форму, которая отображает данные из одной связанной таблицы, которая объединяется с 1 полем из представления в базе данных (см. SQL ниже). Соотношение между таблицей и представлением 1:1, поэтому это не должно вызывать проблем. Тем не менее, я понимаю, что не могу обновить записи в наборе записей через форму. Я получаю сообщение об ошибке "Невозможно обновить набор записей" при попытке записи в одно из полей.

Согласно http://rogersaccessblog.blogspot.dk/2009/11/this-recordset-is-not-updateable-why.html есть много проблем, связанных с этим, но я бы сказал, что я выполняю правила отсутствия набор записей не обновляется.

Я видел, как он работает с той же настройкой, поэтому я озадачен, почему он сейчас блокирует набор записей.

Это мой SQL-запрос:

    SELECT dbo_Balance.*, 
[dbo_Amount_summary_all_specifications].[SUM_AMOUNT] AS Specification
    FROM dbo_Amount_summary_all_specifications 
RIGHT JOIN dbo_Balance ON 
([dbo_Amount_summary_all_specifications].[Version]=[dbo_Balance].[Version]) AND
([dbo_Amount_summary_all_specifications].[Year]=[dbo_Balance].[Year]) AND
([dbo_Amount_summary_all_specifications].[Period]=[dbo_Balance].[Period]) AND
([dbo_Amount_summary_all_specifications].[Kardex]=[dbo_Balance].[Kardex]) AND
([dbo_Amount_summary_all_specifications].[Account]=[dbo_Balance].[Account])

WHERE [dbo_balance].[Balance]<>0;

Заранее спасибо!

ОБНОВЛЕНИЕ 2014-03-12

Мой источник данных в моей базе данных SQL:

CREATE VIEW [dbo].[VW_Overview_balance]
AS SELECT TOP (100) PERCENT dbo.Balance.ID, dbo.Balance.Year, dbo.Balance.Period,
dbo.Balance.Version, dbo.Balance.Kardex, dbo.Balance.Account, dbo.Balance.Kardex_name,
dbo.Balance.Kardex_code, dbo.Balance.Kardex_hierarki, dbo.Balance.Coop_franchise,
dbo.Balance.Chain, dbo.Balance.Chain_name, dbo.Balance.Responsible, 
dbo.Balance.Balance, dbo.Balance.Comment, dbo.Balance.Bank_account, 
dbo.Balance.Approver, dbo.Balance.Timestamp, dbo.VW_specifications_bank.SUM_AMOUNT_bank,
dbo.VW_specifications_system.SUM_AMOUNT_system,dbo.VW_specifications_erp.SUM_AMOUNT_erp, 
dbo.VW_specifications_user.SUM_AMOUNT_user, dbo.SUM_Total_Balance.Tot_Balance, - 
ISNULL(dbo.Balance.Bank_account, 0) - ISNULL(dbo.VW_specifications_erp.SUM_AMOUNT_erp, 0) 
+ ISNULL(dbo.VW_specifications_bank.SUM_AMOUNT_bank, 0) - 
ISNULL(dbo.VW_specifications_system.SUM_AMOUNT_system, 0) - 
ISNULL(dbo.VW_specifications_user.SUM_AMOUNT_user, 0) AS Specification, 
dbo.SUM_Total_Balance.Tot_Balance - ISNULL(dbo.Balance.Bank_account, 0) - 
ISNULL(dbo.VW_specifications_erp.SUM_AMOUNT_erp, 0)  +
ISNULL(dbo.VW_specifications_bank.SUM_AMOUNT_bank, 0) -
ISNULL(dbo.VW_specifications_system.SUM_AMOUNT_system, 0)  -
ISNULL(dbo.VW_specifications_user.SUM_AMOUNT_user, 0) AS Difference, dbo.Account.Account_name

FROM dbo.Balance LEFT OUTER JOIN dbo.Account ON 
dbo.Balance.Account = dbo.Account.Account_no LEFT OUTER JOIN dbo.SUM_Total_Balance 
ON dbo.Balance.ID = dbo.SUM_Total_Balance.ID LEFT OUTER JOIN dbo.VW_specifications_bank 
ON dbo.VW_specifications_bank.Balance_id = dbo.Balance.ID LEFT OUTER JOIN dbo.VW_specifications_erp 
ON dbo.VW_specifications_erp.Balance_id = dbo.Balance.ID LEFT OUTER JOIN dbo.VW_specifications_system 
ON dbo.VW_specifications_system.Balance_id = dbo.Balance.ID LEFT OUTER JOIN dbo.VW_specifications_user
ON dbo.VW_specifications_user.Balance_id = dbo.Balance.ID

WHERE     (dbo.Balance.Kardex_code <> 3) 
AND (dbo.Balance.Kardex_code <> 13) 
AND (dbo.SUM_Total_Balance.Tot_Balance <> 0) 
AND (dbo.Balance.Account IN
(SELECT Account_no FROM dbo.Account AS Account_1))

Запрос в базе данных Access был сокращен до:

SELECT dbo_VW_Overview_balance.Kardex, dbo_VW_Overview_balance.Account,
dbo_VW_Overview_balance.Kardex_name, dbo_VW_Overview_balance.Kardex_hierarki,
dbo_VW_Overview_balance.Coop_franchise, dbo_VW_Overview_balance.Chain_name,
dbo_VW_Overview_balance.Responsible, dbo_VW_Overview_balance.Comment,
dbo_VW_Overview_balance.Approver, dbo_VW_Overview_balance.Tot_Balance,
dbo_VW_Overview_balance.Specification, dbo_VW_Overview_balance.Difference,
dbo_VW_Overview_balance.Year, dbo_VW_Overview_balance.Period,
dbo_VW_Overview_balance.Version, dbo_VW_Overview_balance.Account_name

FROM dbo_VW_Overview_balance

ORDER BY dbo_VW_Overview_balance.Kardex, dbo_VW_Overview_balance.Account;

1 ответ

Решение

С помощью http://support.microsoft.com/KB/304179 я нашел решение: хотя у меня были первичные ключи в базе данных SQL, я не настроил это и в связанной таблице в Access. Обновив связанную таблицу и назначив первичный ключ вручную, я теперь могу обновить набор записей как через запрос, так и через форму!

Другие вопросы по тегам