¿Por qué no me deja insertar en esta vista?

09/11/2007 - 13:05 por Eve | Informe spam
Hola,

A ver si alguien puede decirme porqué no puedo en la "Vista_1" agregar
valores en el campo "imprimible" en el registro de código=2 y código=3.

Me dice: "Los datos han cambiado desde la última vez que se recuperó el
panel de resultados. (Error de concurrencia optimista)..." Le digo que Si
para que continúe y me sale otro error: "No se ha actualizado ninguna fila.
Los datos de la fila 2 no se confirmaron. La fila actualizada ha cambiado o
se ha eliminado desde la última vez que se recuperaron los datos".

Si la importo desde Access si que me deja poner un valor en "imprimible", y
CodSubFam coge AUTOMÁTICAMENTE el valor del código que estoy modificando.

Muchísimas gracias,

Eve.



Código que crea las 2 tablas y la Vista relacionándola:



/****** Objeto: Table [dbo].[TL_SubFamilias] Fecha de la secuencia de
comandos: 11/09/2007 09:40:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE TL_SubFamilias(
[Grupo] [varchar](20) NOT NULL,
[Familia] [varchar](20) NOT NULL,
[Codigo] [varchar](20) NOT NULL,
[Nombre] [varchar](50) NULL,
[PathFoto] [varchar](250) NULL,
[NombreCorto] [varchar](20) NULL,
CONSTRAINT [PK_TL_SubFamilias] PRIMARY KEY CLUSTERED
(
[Grupo] ASC,
[Familia] ASC,
[Codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF;

INSERT INTO TL_SubFamilias VALUES
('FA9001','1','1','Entradas',NULL,'Entradas')
GO
INSERT INTO TL_SubFamilias VALUES
('FA9001','1','2','Primeros',NULL,'Primeros')
GO
INSERT INTO TL_SubFamilias VALUES ('FA9001','1','3','Postres',NULL,'Postres')
GO
/****** Objeto: Table [dbo].[AA_CartasPDF_SubfamImprim] Fecha de la
secuencia de comandos: 11/09/2007 09:29:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE AA_CartasPDF_SubfamImprim(
[CodSubFam] [varchar](20) NOT NULL,
[Imprimible] [varchar](50) NULL,
CONSTRAINT [PK_AA_CartasPDF_SubfamImprim] PRIMARY KEY CLUSTERED
(
[CodSubFam] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

INSERT INTO AA_CartasPDF_SubfamImprim VALUES ('1','si')
GO


/****** Objeto: View [dbo].[Vista_1] Fecha de la secuencia de comandos:
11/09/2007 09:50:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[Vista_1]
AS
SELECT dbo.TL_SubFamilias.Codigo,
dbo.AA_CartasPDF_SubfamImprim.CodSubFam,
dbo.AA_CartasPDF_SubfamImprim.Imprimible
FROM dbo.TL_SubFamilias LEFT OUTER JOIN
dbo.AA_CartasPDF_SubfamImprim ON
dbo.TL_SubFamilias.Codigo = dbo.AA_CartasPDF_SubfamImprim.CodSubFam

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
09/11/2007 - 16:50 | Informe spam
Desde qué programa está usted intentando modificar los datos de la vista?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Eve" wrote:

Hola,

A ver si alguien puede decirme porqué no puedo en la "Vista_1" agregar
valores en el campo "imprimible" en el registro de código=2 y código=3.

Me dice: "Los datos han cambiado desde la última vez que se recuperó el
panel de resultados. (Error de concurrencia optimista)..." Le digo que Si
para que continúe y me sale otro error: "No se ha actualizado ninguna fila.
Los datos de la fila 2 no se confirmaron. La fila actualizada ha cambiado o
se ha eliminado desde la última vez que se recuperaron los datos".

Si la importo desde Access si que me deja poner un valor en "imprimible", y
CodSubFam coge AUTOMÁTICAMENTE el valor del código que estoy modificando.

Muchísimas gracias,

Eve.



Código que crea las 2 tablas y la Vista relacionándola:



/****** Objeto: Table [dbo].[TL_SubFamilias] Fecha de la secuencia de
comandos: 11/09/2007 09:40:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE TL_SubFamilias(
[Grupo] [varchar](20) NOT NULL,
[Familia] [varchar](20) NOT NULL,
[Codigo] [varchar](20) NOT NULL,
[Nombre] [varchar](50) NULL,
[PathFoto] [varchar](250) NULL,
[NombreCorto] [varchar](20) NULL,
CONSTRAINT [PK_TL_SubFamilias] PRIMARY KEY CLUSTERED
(
[Grupo] ASC,
[Familia] ASC,
[Codigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF;

INSERT INTO TL_SubFamilias VALUES
('FA9001','1','1','Entradas',NULL,'Entradas')
GO
INSERT INTO TL_SubFamilias VALUES
('FA9001','1','2','Primeros',NULL,'Primeros')
GO
INSERT INTO TL_SubFamilias VALUES ('FA9001','1','3','Postres',NULL,'Postres')
GO
/****** Objeto: Table [dbo].[AA_CartasPDF_SubfamImprim] Fecha de la
secuencia de comandos: 11/09/2007 09:29:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE AA_CartasPDF_SubfamImprim(
[CodSubFam] [varchar](20) NOT NULL,
[Imprimible] [varchar](50) NULL,
CONSTRAINT [PK_AA_CartasPDF_SubfamImprim] PRIMARY KEY CLUSTERED
(
[CodSubFam] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

INSERT INTO AA_CartasPDF_SubfamImprim VALUES ('1','si')
GO


/****** Objeto: View [dbo].[Vista_1] Fecha de la secuencia de comandos:
11/09/2007 09:50:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[Vista_1]
AS
SELECT dbo.TL_SubFamilias.Codigo,
dbo.AA_CartasPDF_SubfamImprim.CodSubFam,
dbo.AA_CartasPDF_SubfamImprim.Imprimible
FROM dbo.TL_SubFamilias LEFT OUTER JOIN
dbo.AA_CartasPDF_SubfamImprim ON
dbo.TL_SubFamilias.Codigo = dbo.AA_CartasPDF_SubfamImprim.CodSubFam

Respuesta Responder a este mensaje
#2 jcpc91
09/11/2007 - 17:26 | Informe spam
Probe tu código desde SQLSErveExpress 2005 no me dió ese error pero
tampoco me dejo insertar desde la vista yo lo ke haría en tu caso
seria un desencadenante sobre la vista algo así

ALTER TRIGGER insertar
ON Vista_1
INSTEAD OF INSERT
AS
BEGIN


DECLARE @GRUPO NVARCHAR(20)
DECLARE @FAM NVARCHAR(20)
DECLARE @CODIGO VARCHAR(20)
DECLARE @CODFUN NVARCHAR(20)
DECLARE @IMPRIMIBLE NVARCHAR(50)
SELECT @GRUPO = Grupo, @FAM = Familia, @CODIGO = Codigo, @CODFUN CodSubFam, @IMPRIMIBLE = Imprimible
FROM inserted
PRINT @GRUPO
PRINT @FAM
PRINT @CODIGO

INSERT INTO [prueba].[dbo].[TL_SubFamilias]
([Grupo]
,[Familia]
,[Codigo])
VALUES
(@GRUPO
,@FAM
,@CODIGO)

INSERT INTO AA_CartasPDF_SubfamImprim
([CodSubFam]
,[Imprimible])
VALUES
(@CODFUN
,@IMPRIMIBLE)

END
GO

yo lo probé y si me funcionó intentando insertar lo siguiente haa y
claro modifique la vista para ke incluyera las llaves ya ke no aceptan
valores null porke si fueran enteros y autonuméricos no sería
necesario

INSERT INTO [Vista_1]
([Codigo]
,[CodSubFam]
,[Imprimible]
,[Familia]
,[Grupo])
VALUES
('4'
,'4'
,'NO'
,'1'
,'FA009')
Respuesta Responder a este mensaje
#3 Eve
12/11/2007 - 09:00 | Informe spam
Hola, primero, gracias por responder y por su tiempo.

Segundo: Yo intento modificar los datos de la vista en la consulta hecha en
Microsoft SQL Server Management Studio.

"Gux (MVP)" wrote:

Desde qué programa está usted intentando modificar los datos de la vista?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Eve" wrote:

> Hola,
>
> A ver si alguien puede decirme porqué no puedo en la "Vista_1" agregar
> valores en el campo "imprimible" en el registro de código=2 y código=3.
>
> Me dice: "Los datos han cambiado desde la última vez que se recuperó el
> panel de resultados. (Error de concurrencia optimista)..." Le digo que Si
> para que continúe y me sale otro error: "No se ha actualizado ninguna fila.
> Los datos de la fila 2 no se confirmaron. La fila actualizada ha cambiado o
> se ha eliminado desde la última vez que se recuperaron los datos".
>
> Si la importo desde Access si que me deja poner un valor en "imprimible", y
> CodSubFam coge AUTOMÁTICAMENTE el valor del código que estoy modificando.
>
> Muchísimas gracias,
>
> Eve.
>
>
>
> Código que crea las 2 tablas y la Vista relacionándola:
>
>
>
> /****** Objeto: Table [dbo].[TL_SubFamilias] Fecha de la secuencia de
> comandos: 11/09/2007 09:40:50 ******/
> SET ANSI_NULLS ON
> GO
> SET QUOTED_IDENTIFIER ON
> GO
> SET ANSI_PADDING ON
> GO
> CREATE TABLE TL_SubFamilias(
> [Grupo] [varchar](20) NOT NULL,
> [Familia] [varchar](20) NOT NULL,
> [Codigo] [varchar](20) NOT NULL,
> [Nombre] [varchar](50) NULL,
> [PathFoto] [varchar](250) NULL,
> [NombreCorto] [varchar](20) NULL,
> CONSTRAINT [PK_TL_SubFamilias] PRIMARY KEY CLUSTERED
> (
> [Grupo] ASC,
> [Familia] ASC,
> [Codigo] ASC
> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
> ) ON [PRIMARY]
>
> GO
> SET ANSI_PADDING OFF;
>
> INSERT INTO TL_SubFamilias VALUES
> ('FA9001','1','1','Entradas',NULL,'Entradas')
> GO
> INSERT INTO TL_SubFamilias VALUES
> ('FA9001','1','2','Primeros',NULL,'Primeros')
> GO
> INSERT INTO TL_SubFamilias VALUES ('FA9001','1','3','Postres',NULL,'Postres')
> GO
> /****** Objeto: Table [dbo].[AA_CartasPDF_SubfamImprim] Fecha de la
> secuencia de comandos: 11/09/2007 09:29:21 ******/
> SET ANSI_NULLS ON
> GO
> SET QUOTED_IDENTIFIER ON
> GO
> SET ANSI_PADDING ON
> GO
> CREATE TABLE AA_CartasPDF_SubfamImprim(
> [CodSubFam] [varchar](20) NOT NULL,
> [Imprimible] [varchar](50) NULL,
> CONSTRAINT [PK_AA_CartasPDF_SubfamImprim] PRIMARY KEY CLUSTERED
> (
> [CodSubFam] ASC
> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
> ) ON [PRIMARY]
>
> GO
> SET ANSI_PADDING OFF
>
> INSERT INTO AA_CartasPDF_SubfamImprim VALUES ('1','si')
> GO
>
>
> /****** Objeto: View [dbo].[Vista_1] Fecha de la secuencia de comandos:
> 11/09/2007 09:50:21 ******/
> SET ANSI_NULLS ON
> GO
> SET QUOTED_IDENTIFIER ON
> GO
> CREATE VIEW [dbo].[Vista_1]
> AS
> SELECT dbo.TL_SubFamilias.Codigo,
> dbo.AA_CartasPDF_SubfamImprim.CodSubFam,
> dbo.AA_CartasPDF_SubfamImprim.Imprimible
> FROM dbo.TL_SubFamilias LEFT OUTER JOIN
> dbo.AA_CartasPDF_SubfamImprim ON
> dbo.TL_SubFamilias.Codigo = dbo.AA_CartasPDF_SubfamImprim.CodSubFam
>
Respuesta Responder a este mensaje
#4 Eve
12/11/2007 - 10:15 | Informe spam
Hola, Gracias por responder.

Voy a probar el desencadenador que me recomiendas, pero viendo tu respuesta,
no se si me expliqué bien en mi primera pregunta. El objetivo es crear un
nuevo registro, pero SÓLO en la tabla AA_CartasPDF_SubFamImprim, no quiero
crear un registro nuevo en TL_Subfamilias.

Por ejemplo: Si yo tengo en la Vista_1 estos datos:

Código CodSubFam Imprimible
1 1 si
2 NULL NULL
3 NULL NULL
NULL NULL NULL


Y me sitúo en el registro 2 para insertar un "no" en la columa imprimible
tal que así:

1 1 si
2 NULL no
3 NULL NULL
NULL NULL NULL

Lo que hace ACCESS(vinculando las tablas al SQL) y no hace SQL Server
Management Studio 2005 es insertar este registro en la tabla
AA_CartasPDF_SubFamImprim:

CodSubFam Imprimible
1 si
2 no <- [Nuevo registro]

Y la Vista_1 se queda así:

Código CodSubFam Imprimible
1 1 si
2 2 no
3 NULL NULL
NULL NULL NULL

Pero voy a probar tu disparador a ver si me ayuda. Muchas gracias.



"" wrote:

Probe tu código desde SQLSErveExpress 2005 no me dió ese error pero
tampoco me dejo insertar desde la vista yo lo ke haría en tu caso
seria un desencadenante sobre la vista algo así

ALTER TRIGGER insertar
ON Vista_1
INSTEAD OF INSERT
AS
BEGIN


DECLARE @GRUPO NVARCHAR(20)
DECLARE @FAM NVARCHAR(20)
DECLARE @CODIGO VARCHAR(20)
DECLARE @CODFUN NVARCHAR(20)
DECLARE @IMPRIMIBLE NVARCHAR(50)
SELECT @GRUPO = Grupo, @FAM = Familia, @CODIGO = Codigo, @CODFUN > CodSubFam, @IMPRIMIBLE = Imprimible
FROM inserted
PRINT @GRUPO
PRINT @FAM
PRINT @CODIGO

INSERT INTO [prueba].[dbo].[TL_SubFamilias]
([Grupo]
,[Familia]
,[Codigo])
VALUES
(@GRUPO
,@FAM
,@CODIGO)

INSERT INTO AA_CartasPDF_SubfamImprim
([CodSubFam]
,[Imprimible])
VALUES
(@CODFUN
,@IMPRIMIBLE)

END
GO

yo lo probé y si me funcionó intentando insertar lo siguiente haa y
claro modifique la vista para ke incluyera las llaves ya ke no aceptan
valores null porke si fueran enteros y autonuméricos no sería
necesario

INSERT INTO [Vista_1]
([Codigo]
,[CodSubFam]
,[Imprimible]
,[Familia]
,[Grupo])
VALUES
('4'
,'4'
,'NO'
,'1'
,'FA009')


Respuesta Responder a este mensaje
#5 Gux (MVP)
12/11/2007 - 15:35 | Informe spam
La única forma de actualizar la vista es que usted solamente modifique
columnas de solamente una de las tablas involucradas en la vista.

Por ejemplo:

create table t1 (col1 int, col2 int, col3 char(20))
create table t2 (col1 int, col4 char(20))
go

create view v1
as
select t1.col1 as t1col1, t2.col1 as t2col1, col2, col3, col4
from t1, t2
where t1.col1 = t2.col1


Si usted edita la vista V1 en la grilla de Management Studio, podrá hacer
con éxito cada una de estas cosas:

1. Ingresar datos solamente en t1col1, col2, col3. Esto provoca una
inserción en la tabla T1.

2. Ingresar datos solamente en t2col1, col4. Esto provoca una inserción en
la tabla T2.

En ambos casos, la grilla le advertirá que pudo insertar los datos pero que
no los puede mostrar (porque no cumplen con la condición de join de la vista).

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Eve" wrote:

Hola, primero, gracias por responder y por su tiempo.

Segundo: Yo intento modificar los datos de la vista en la consulta hecha en
Microsoft SQL Server Management Studio.

"Gux (MVP)" wrote:

> Desde qué programa está usted intentando modificar los datos de la vista?
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/profile/gux
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Eve" wrote:
>
> > Hola,
> >
> > A ver si alguien puede decirme porqué no puedo en la "Vista_1" agregar
> > valores en el campo "imprimible" en el registro de código=2 y código=3.
> >
> > Me dice: "Los datos han cambiado desde la última vez que se recuperó el
> > panel de resultados. (Error de concurrencia optimista)..." Le digo que Si
> > para que continúe y me sale otro error: "No se ha actualizado ninguna fila.
> > Los datos de la fila 2 no se confirmaron. La fila actualizada ha cambiado o
> > se ha eliminado desde la última vez que se recuperaron los datos".
> >
> > Si la importo desde Access si que me deja poner un valor en "imprimible", y
> > CodSubFam coge AUTOMÁTICAMENTE el valor del código que estoy modificando.
> >
> > Muchísimas gracias,
> >
> > Eve.
> >
> >
> >
> > Código que crea las 2 tablas y la Vista relacionándola:
> >
> >
> >
> > /****** Objeto: Table [dbo].[TL_SubFamilias] Fecha de la secuencia de
> > comandos: 11/09/2007 09:40:50 ******/
> > SET ANSI_NULLS ON
> > GO
> > SET QUOTED_IDENTIFIER ON
> > GO
> > SET ANSI_PADDING ON
> > GO
> > CREATE TABLE TL_SubFamilias(
> > [Grupo] [varchar](20) NOT NULL,
> > [Familia] [varchar](20) NOT NULL,
> > [Codigo] [varchar](20) NOT NULL,
> > [Nombre] [varchar](50) NULL,
> > [PathFoto] [varchar](250) NULL,
> > [NombreCorto] [varchar](20) NULL,
> > CONSTRAINT [PK_TL_SubFamilias] PRIMARY KEY CLUSTERED
> > (
> > [Grupo] ASC,
> > [Familia] ASC,
> > [Codigo] ASC
> > )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> > OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
> > ) ON [PRIMARY]
> >
> > GO
> > SET ANSI_PADDING OFF;
> >
> > INSERT INTO TL_SubFamilias VALUES
> > ('FA9001','1','1','Entradas',NULL,'Entradas')
> > GO
> > INSERT INTO TL_SubFamilias VALUES
> > ('FA9001','1','2','Primeros',NULL,'Primeros')
> > GO
> > INSERT INTO TL_SubFamilias VALUES ('FA9001','1','3','Postres',NULL,'Postres')
> > GO
> > /****** Objeto: Table [dbo].[AA_CartasPDF_SubfamImprim] Fecha de la
> > secuencia de comandos: 11/09/2007 09:29:21 ******/
> > SET ANSI_NULLS ON
> > GO
> > SET QUOTED_IDENTIFIER ON
> > GO
> > SET ANSI_PADDING ON
> > GO
> > CREATE TABLE AA_CartasPDF_SubfamImprim(
> > [CodSubFam] [varchar](20) NOT NULL,
> > [Imprimible] [varchar](50) NULL,
> > CONSTRAINT [PK_AA_CartasPDF_SubfamImprim] PRIMARY KEY CLUSTERED
> > (
> > [CodSubFam] ASC
> > )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> > OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
> > ) ON [PRIMARY]
> >
> > GO
> > SET ANSI_PADDING OFF
> >
> > INSERT INTO AA_CartasPDF_SubfamImprim VALUES ('1','si')
> > GO
> >
> >
> > /****** Objeto: View [dbo].[Vista_1] Fecha de la secuencia de comandos:
> > 11/09/2007 09:50:21 ******/
> > SET ANSI_NULLS ON
> > GO
> > SET QUOTED_IDENTIFIER ON
> > GO
> > CREATE VIEW [dbo].[Vista_1]
> > AS
> > SELECT dbo.TL_SubFamilias.Codigo,
> > dbo.AA_CartasPDF_SubfamImprim.CodSubFam,
> > dbo.AA_CartasPDF_SubfamImprim.Imprimible
> > FROM dbo.TL_SubFamilias LEFT OUTER JOIN
> > dbo.AA_CartasPDF_SubfamImprim ON
> > dbo.TL_SubFamilias.Codigo = dbo.AA_CartasPDF_SubfamImprim.CodSubFam
> >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida