|
This recordset is not updatable
|
|||
---|---|---|---|
#18+
Я новичок в 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 05:24 |
|
This recordset is not updatable
|
|||
---|---|---|---|
#18+
Очень не хочется разбираться во всём вышенаписанном, извини :-). Но вот совет маленький, вдруг поможет: в результирующем наборе должен быть первичный ключ, без этого рекордсет на нём не будет редактируемым. Если используется связка из нескольких таблиц, нужно будет указать, которая из них СВОИМ КЛЮЧОМ ОПРЕДЕЛЯЕТ УНИКАЛЬНОСТЬ ЗАПИСИ В РЕКОРДСЕТЕ - это указывается в свойстве формы "Однозначная таблица" (вкладка "Данные"). Понятно, что в результирующем наборе должен засветиться первичный ключ этой таблицы. Похоже, у тебя есть ProductID, проверь, является ли он первичным ключом (identity недостаточно!) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 06:17 |
|
This recordset is not updatable
|
|||
---|---|---|---|
#18+
[Понятно, что в результирующем наборе должен засветиться первичный ключ этой таблицы. Похоже, у тебя есть ProductID, проверь, является ли он первичным ключом (identity недостаточно!) Да productID является первичным ключом . Только вот он первичный ключ в таблице products ,а в запросе используются и другие данные тоже ( в частности получаемые функцией fn_productsproperties) . редактируемым. Если используется связка из нескольких таблиц, нужно будет указать, которая из них СВОИМ КЛЮЧОМ ОПРЕДЕЛЯЕТ УНИКАЛЬНОСТЬ ЗАПИСИ В РЕКОРДСЕТЕ - это указывается в свойстве формы "Однозначная таблица" (вкладка "Данные"). Где указывается извиняюсь? form->design view, а дальше? У меня access английский . Свойство формы "однозначная таблица " это где? В свойствах собственно формы нету ничего похожего . ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 06:56 |
|
|
start [/forum/topic.php?fid=45&msg=32062937&tid=1683046]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 434ms |
0 / 0 |