powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / This recordset is not updatable
4 сообщений из 4, страница 1 из 1
This recordset is not updatable
    #32062927
DarkMadMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичок в SQL и Access так что просьба ногами не пинать. Есть база на MSSAQL200 мне нужно написатьь клиента для работы с ней .

В ней есть такой удобный Queries->Vw_Products view . Но проблема в том что я не могу редактирорвать поля полученные через этоот view - выдаёт ошибку "this recordset is not updatable". Сама таблица products очень запутанная и связанная с кучей других таблиц ( базу делал не я ) , и нужные данные оттуда просто так не получить без сложного запроса. Запрос vw_products как раз делает именно то что мне надо , но когда я делаю форму с vw_products - я получаю эту дурацкую ошибку при попытке редактирования "This recordset is not updatable" . Как бы мне обойти это?

Query vw_products :

SELECT fn_ProductsProperties.Productid, dbo.Products.VendorID, dbo.Products.TypeID, fn_ProductsProperties.ItemCode,
dbo.Products.Created AS Introduced, dbo.Products.SysName AS ProductShortName, dbo.Prices.Price AS Cost,
dbo.Prices.Price * dbo.Products.Margin / 100 - dbo.Prices.Price * dbo.Products.Discount / 100 AS RetailPrice, fn_ProductsProperties.ScaleRatio,
fn_ProductsProperties.ScaleRatioId, fn_ProductsProperties.Category, fn_ProductsProperties.CategoryID, fn_ProductsProperties.HistoricalPeriod,
fn_ProductsProperties.HistoricalPeriodID, fn_ProductsProperties.Product, fn_ProductsProperties.SkillLevel, fn_ProductsProperties.SkillLevelID,
fn_ProductsProperties.Decal, fn_ProductsProperties.PartsQuantity, fn_ProductsProperties.ProductionYear, fn_ProductsProperties.Country,
fn_ProductsProperties.CountryID, fn_ProductsProperties.PhotoPath, fn_ProductsProperties.Promotion, fn_ProductsProperties.Description,
dbo.Products.UnitsInStock, dbo.Products.AllowDiscount, dbo.Products.Margin, dbo.Products.Discount, dbo.Products.Notes,
dbo.Prices.IsCalculated

FROM dbo.Products INNER JOIN
dbo.Prices ON dbo.Products.ProductID = dbo.Prices.ProductID INNER JOIN
usr226100184.fn_ProductsProperties() fn_ProductsProperties ON dbo.Products.ProductID = fn_ProductsProperties.Productid

==============================================

Функция fn_ProductsProperties

/****** Object: User Defined Function dbo.F_Price Script Date: 25.10.2002 12:55:28 ******/
ALTER function fn_ProductsProperties
()
returns @rettable table (Productid int,ItemCode nvarchar(50),ScaleRatio nvarchar(50),ScaleRatioId int,Category nvarchar(50),CategoryID int,HistoricalPeriod nvarchar(50),HistoricalPeriodID int,Product nvarchar(100),SkillLevel nvarchar(50),SkillLevelID int,Decal nvarchar(255),PartsQuantity int,ProductionYear int,Country nvarchar(50),CountryID int,PhotoPath nvarchar(255),Promotion bit,[Description] nvarchar(3000), AmountOfParts int)
AS
BEGIN
declare @Property nvarchar(200),@Value nvarchar(3000),@PropertyID int ,@ProductID int,@Pvalue nvarchar(100)
Insert into @RetTable (ProductID) (select ProductID from Products)
declare Properties_Cursor cursor FOR select ProductID, PropertyID, Value, Cast(PValue as nvarchar(100))as PValue from vw_ProductsPropertiesValues
Open Properties_Cursor
FETCH NEXT FROM Properties_Cursor INTO @ProductID,@PropertyID,@Value,@PValue
WHILE @@FETCH_STATUS = 0
Begin
IF (@PropertyID=1) UPDATE @RETTable SET ItemCode=@Value where ProductID=@ProductID
else
IF (@PropertyID=2) UPDATE @RETTable SET ScaleRatio=@Value,ScaleRatioID=@PValue where ProductID=@ProductID
else
IF (@PropertyID=3) UPDATE @RETTable SET CAtegory=@Value,CategoryID=@PValue where ProductID=@ProductID
else
IF (@PropertyID=4) UPDATE @RETTable SET HistoricalPeriod=@Value,HistoricalPeriodID=@PValue where ProductID=@ProductID
else
IF (@PropertyID=5) UPDATE @RETTable SET Product=@Value where ProductID=@ProductID
else
IF (@PropertyID=7) UPDATE @RETTable SET SkillLevel=@Value,SkillLevelID=@PValue where ProductID=@ProductID
else
IF (@PropertyID=8) UPDATE @RETTable SET Decal=@Value where ProductID=@ProductID
else
IF (@PropertyID=9) UPDATE @RETTable SET PartsQuantity=@Value where ProductID=@ProductID
else
IF (@PropertyID=10) UPDATE @RETTable SET ProductionYear=@Value where ProductID=@ProductID
else
IF (@PropertyID=11) UPDATE @RETTable SET Country=@Value,CountryID=@PValue where ProductID=@ProductID
else
IF (@PropertyID=12) UPDATE @RETTable SET PhotoPath=@Value where ProductID=@ProductID
else
IF (@PropertyID=13) UPDATE @RETTable SET Promotion= CAST(@PValue AS bit) where ProductID=@ProductID
else
IF (@PropertyID=14) UPDATE @RETTable SET [Description]=CAST(@Value AS nvarchar(2000)) where ProductID=@ProductID
else
IF (@PropertyID=15) UPDATE @RETTable SET AmountOfParts=@Value where ProductID=@ProductID
FETCH NEXT FROM Properties_Cursor INTO @ProductID,@PropertyID,@Value,@PValue
End
CLOSE Properties_Cursor
DEALLOCATE Properties_Cursor
return
END
...
Рейтинг: 0 / 0
This recordset is not updatable
    #32062932
Очень не хочется разбираться во всём вышенаписанном, извини :-). Но вот совет маленький, вдруг поможет: в результирующем наборе должен быть первичный ключ, без этого рекордсет на нём не будет редактируемым. Если используется связка из нескольких таблиц, нужно будет указать, которая из них СВОИМ КЛЮЧОМ ОПРЕДЕЛЯЕТ УНИКАЛЬНОСТЬ ЗАПИСИ В РЕКОРДСЕТЕ - это указывается в свойстве формы "Однозначная таблица" (вкладка "Данные"). Понятно, что в результирующем наборе должен засветиться первичный ключ этой таблицы.
Похоже, у тебя есть ProductID, проверь, является ли он первичным ключом (identity недостаточно!)
...
Рейтинг: 0 / 0
This recordset is not updatable
    #32062937
DarkMadMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[Понятно, что в результирующем наборе должен засветиться первичный ключ этой таблицы.
Похоже, у тебя есть ProductID, проверь, является ли он первичным ключом (identity недостаточно!)

Да productID является первичным ключом . Только вот он первичный ключ в таблице products ,а в запросе используются и другие данные тоже ( в частности получаемые функцией fn_productsproperties) .



редактируемым. Если используется связка из нескольких таблиц, нужно будет указать, которая из них СВОИМ КЛЮЧОМ ОПРЕДЕЛЯЕТ УНИКАЛЬНОСТЬ ЗАПИСИ В РЕКОРДСЕТЕ - это указывается в свойстве формы "Однозначная таблица" (вкладка "Данные").

Где указывается извиняюсь? form->design view, а дальше? У меня access английский . Свойство формы "однозначная таблица " это где? В свойствах собственно формы нету ничего похожего .
...
Рейтинг: 0 / 0
This recordset is not updatable
    #32062940
UniqueTable
Почитай хелп, там очень красиво всё это описано.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / This recordset is not updatable
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]