Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La vue ne peut pas être mise à jour

4 réponses
Avatar
jpgr
La vue ou la fonction 'R_produits' ne peut pas être mise à jour car la
modification affecte les tables de base multiples.

SELECT dbo.produits.id_produit, dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille, dbo.ndxlibelle.libProduit,
dbo.ndxdescription.libDescription,
dbo.ndxprix.libPrix, dbo.produits.aulieude,
dbo.produits.reforigine, dbo.produits.refSaari, dbo.produits.texteplus,
dbo.produits.origine,
dbo.produits.dispo, dbo.produits.photo,
dbo.produits.vignette, dbo.produits.extention, dbo.produits.enligne,
dbo.produits.select_produit,
dbo.produits.garantie, dbo.produits.id_sous_famille,
dbo.produits.qteStock, dbo.produits.seuilCmd, dbo.produits.stokMax,
dbo.produits.enCmd,
dbo.produits.id_prix, dbo.produits.id_lib,
dbo.produits.id_description
FROM dbo.ndxprix INNER JOIN
dbo.famille INNER JOIN
dbo.sous_famille ON dbo.famille.id_famille =
dbo.sous_famille.id_famille INNER JOIN
dbo.ndxlibelle INNER JOIN
dbo.ndxdescription INNER JOIN
dbo.produits ON dbo.ndxdescription.id_description =
dbo.produits.id_description ON dbo.ndxlibelle.id_lib = dbo.produits.id_lib
ON
dbo.sous_famille.id_sous_famille =
dbo.produits.id_sous_famille ON dbo.ndxprix.id_prix = dbo.produits.id_prix

Bon !

c'est une vue concernant 5 tables (c'est d'ailleurs pour cela que j'ai créé
une vue !)
sous access tout fonctionne bien mais avec mssql2000 non !
j'avais meme un ORDER BY dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille
mais cela creait un SELECT TOP 100 PERCENT qui empechait aussi l'update
!

voici mon ordre d'update

UPDATE R_produits SET select_produit = 'False', libProduit = 'dvd
Compatible',
libDescription = 'C'est super top . Tip top quoi !', libPrix = 37.9900,
nom_famille = 'dvd', nom_sous_famille = 'divx', reforigine = '',
refSaari = 'SAAR-HH2B4', texteplus = 'pas d´infos supplémentaires', dispo =
'24h',
aulieude = 125, origine = 'False', vignette = 'v_vide', photo = 'p_vide',
extention = 'jpg',
enligne = 'True', garantie = '6',
qteStock = '9', seuilCmd = '3', stokMax = '10', enCmd = 'False' WHERE
id_produit= 14

je suis en asp.net

merci de me donner une piste parceque la je pete un cable

4 réponses

Avatar
bruno reiter [MVP]
on ne peut pas mettre a jour plusieurs tables dans un seul update
c'est ce que tu veux faire en utilisant la vue

br

"jpgr" wrote in message
news:#
La vue ou la fonction 'R_produits' ne peut pas être mise à jour car la
modification affecte les tables de base multiples.

SELECT dbo.produits.id_produit, dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille, dbo.ndxlibelle.libProduit,
dbo.ndxdescription.libDescription,
dbo.ndxprix.libPrix, dbo.produits.aulieude,
dbo.produits.reforigine, dbo.produits.refSaari, dbo.produits.texteplus,
dbo.produits.origine,
dbo.produits.dispo, dbo.produits.photo,
dbo.produits.vignette, dbo.produits.extention, dbo.produits.enligne,
dbo.produits.select_produit,
dbo.produits.garantie, dbo.produits.id_sous_famille,
dbo.produits.qteStock, dbo.produits.seuilCmd, dbo.produits.stokMax,
dbo.produits.enCmd,
dbo.produits.id_prix, dbo.produits.id_lib,
dbo.produits.id_description
FROM dbo.ndxprix INNER JOIN
dbo.famille INNER JOIN
dbo.sous_famille ON dbo.famille.id_famille > dbo.sous_famille.id_famille INNER JOIN
dbo.ndxlibelle INNER JOIN
dbo.ndxdescription INNER JOIN
dbo.produits ON dbo.ndxdescription.id_description > dbo.produits.id_description ON dbo.ndxlibelle.id_lib = dbo.produits.id_lib
ON
dbo.sous_famille.id_sous_famille > dbo.produits.id_sous_famille ON dbo.ndxprix.id_prix = dbo.produits.id_prix

Bon !

c'est une vue concernant 5 tables (c'est d'ailleurs pour cela que j'ai


créé
une vue !)
sous access tout fonctionne bien mais avec mssql2000 non !
j'avais meme un ORDER BY dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille
mais cela creait un SELECT TOP 100 PERCENT qui empechait aussi


l'update
!

voici mon ordre d'update

UPDATE R_produits SET select_produit = 'False', libProduit = 'dvd
Compatible',
libDescription = 'C'est super top . Tip top quoi !', libPrix = 37.9900,
nom_famille = 'dvd', nom_sous_famille = 'divx', reforigine = '',
refSaari = 'SAAR-HH2B4', texteplus = 'pas d´infos supplémentaires', dispo


> '24h',
aulieude = 125, origine = 'False', vignette = 'v_vide', photo = 'p_vide',
extention = 'jpg',
enligne = 'True', garantie = '6',
qteStock = '9', seuilCmd = '3', stokMax = '10', enCmd = 'False' WHERE
id_produit= 14

je suis en asp.net

merci de me donner une piste parceque la je pete un cable




Avatar
Fred BROUARD
SQL est un langage et qui plus est normatif.

Les vues peuvent êtres mises à jours, uniquement dans le cas de vues respectant
les conditions suivantes :
1) ne porter que sur une seule table
1) ne pas contenir de fonction d'agrégation dans la liste de sélection
2) ne pas contenir TOP ou DISTINCT dans la clause SELECT
3) ne pas employer les clauses GROUP BY ou UNION
4) ne pas utiliser de colonne dérivée dans la liste de sélection.

Autrement dit : le SGBDR doit pouvoir retrouver ses petits, c'est à dire les
lignes à mettre à jour. Or en présence de tables multiple il ne peut savoir a
quelle table appartient telle ou telle colonne.

A +


jpgr a écrit:
La vue ou la fonction 'R_produits' ne peut pas être mise à jour car la
modification affecte les tables de base multiples.

SELECT dbo.produits.id_produit, dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille, dbo.ndxlibelle.libProduit,
dbo.ndxdescription.libDescription,
dbo.ndxprix.libPrix, dbo.produits.aulieude,
dbo.produits.reforigine, dbo.produits.refSaari, dbo.produits.texteplus,
dbo.produits.origine,
dbo.produits.dispo, dbo.produits.photo,
dbo.produits.vignette, dbo.produits.extention, dbo.produits.enligne,
dbo.produits.select_produit,
dbo.produits.garantie, dbo.produits.id_sous_famille,
dbo.produits.qteStock, dbo.produits.seuilCmd, dbo.produits.stokMax,
dbo.produits.enCmd,
dbo.produits.id_prix, dbo.produits.id_lib,
dbo.produits.id_description
FROM dbo.ndxprix INNER JOIN
dbo.famille INNER JOIN
dbo.sous_famille ON dbo.famille.id_famille > dbo.sous_famille.id_famille INNER JOIN
dbo.ndxlibelle INNER JOIN
dbo.ndxdescription INNER JOIN
dbo.produits ON dbo.ndxdescription.id_description > dbo.produits.id_description ON dbo.ndxlibelle.id_lib = dbo.produits.id_lib
ON
dbo.sous_famille.id_sous_famille > dbo.produits.id_sous_famille ON dbo.ndxprix.id_prix = dbo.produits.id_prix

Bon !

c'est une vue concernant 5 tables (c'est d'ailleurs pour cela que j'ai créé
une vue !)
sous access tout fonctionne bien mais avec mssql2000 non !
j'avais meme un ORDER BY dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille
mais cela creait un SELECT TOP 100 PERCENT qui empechait aussi l'update
!

voici mon ordre d'update

UPDATE R_produits SET select_produit = 'False', libProduit = 'dvd
Compatible',
libDescription = 'C'est super top . Tip top quoi !', libPrix = 37.9900,
nom_famille = 'dvd', nom_sous_famille = 'divx', reforigine = '',
refSaari = 'SAAR-HH2B4', texteplus = 'pas d´infos supplémentaires', dispo > '24h',
aulieude = 125, origine = 'False', vignette = 'v_vide', photo = 'p_vide',
extention = 'jpg',
enligne = 'True', garantie = '6',
qteStock = '9', seuilCmd = '3', stokMax = '10', enCmd = 'False' WHERE
id_produit= 14

je suis en asp.net

merci de me donner une piste parceque la je pete un cable





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
jpgr
Merci pour vos remarques
juste que c'est rageant car le même programme marche avec access

"Or en présence de tables multiple il ne peut savoir a quelle table
appartient telle ou telle colonne."
Ok mais notez que lors de la création de la vue "il" possède ses infos...
puisque la vue fonctionne bien !
ou alors il suffirait de rajouter nomTable.ColonneMiseAJour : mais ça c'est
une autre histoire non ?

merci quand même
il faut que je trouve une solution contournant ce problème


"Fred BROUARD" a écrit dans le message de news:

SQL est un langage et qui plus est normatif.

Les vues peuvent êtres mises à jours, uniquement dans le cas de vues


respectant
les conditions suivantes :
1) ne porter que sur une seule table
1) ne pas contenir de fonction d'agrégation dans la liste de sélection
2) ne pas contenir TOP ou DISTINCT dans la clause SELECT
3) ne pas employer les clauses GROUP BY ou UNION
4) ne pas utiliser de colonne dérivée dans la liste de sélection.

Autrement dit : le SGBDR doit pouvoir retrouver ses petits, c'est à dire


les
lignes à mettre à jour. Or en présence de tables multiple il ne peut


savoir a
quelle table appartient telle ou telle colonne.

A +


jpgr a écrit:
> La vue ou la fonction 'R_produits' ne peut pas être mise à jour car la
> modification affecte les tables de base multiples.
>
> SELECT dbo.produits.id_produit, dbo.famille.nom_famille,
> dbo.sous_famille.nom_sous_famille, dbo.ndxlibelle.libProduit,
> dbo.ndxdescription.libDescription,
> dbo.ndxprix.libPrix, dbo.produits.aulieude,
> dbo.produits.reforigine, dbo.produits.refSaari, dbo.produits.texteplus,
> dbo.produits.origine,
> dbo.produits.dispo, dbo.produits.photo,
> dbo.produits.vignette, dbo.produits.extention, dbo.produits.enligne,
> dbo.produits.select_produit,
> dbo.produits.garantie,


dbo.produits.id_sous_famille,
> dbo.produits.qteStock, dbo.produits.seuilCmd, dbo.produits.stokMax,
> dbo.produits.enCmd,
> dbo.produits.id_prix, dbo.produits.id_lib,
> dbo.produits.id_description
> FROM dbo.ndxprix INNER JOIN
> dbo.famille INNER JOIN
> dbo.sous_famille ON dbo.famille.id_famille > > dbo.sous_famille.id_famille INNER JOIN
> dbo.ndxlibelle INNER JOIN
> dbo.ndxdescription INNER JOIN
> dbo.produits ON dbo.ndxdescription.id_description


> > dbo.produits.id_description ON dbo.ndxlibelle.id_lib dbo.produits.id_lib
> ON
> dbo.sous_famille.id_sous_famille > > dbo.produits.id_sous_famille ON dbo.ndxprix.id_prix dbo.produits.id_prix
>
> Bon !
>
> c'est une vue concernant 5 tables (c'est d'ailleurs pour cela que j'ai


créé
> une vue !)
> sous access tout fonctionne bien mais avec mssql2000 non !
> j'avais meme un ORDER BY dbo.famille.nom_famille,
> dbo.sous_famille.nom_sous_famille
> mais cela creait un SELECT TOP 100 PERCENT qui empechait aussi


l'update
> !
>
> voici mon ordre d'update
>
> UPDATE R_produits SET select_produit = 'False', libProduit = 'dvd
> Compatible',
> libDescription = 'C'est super top . Tip top quoi !', libPrix 37.9900,
> nom_famille = 'dvd', nom_sous_famille = 'divx', reforigine = '',
> refSaari = 'SAAR-HH2B4', texteplus = 'pas d´infos supplémentaires',


dispo > > '24h',
> aulieude = 125, origine = 'False', vignette = 'v_vide', photo 'p_vide',
> extention = 'jpg',
> enligne = 'True', garantie = '6',
> qteStock = '9', seuilCmd = '3', stokMax = '10', enCmd = 'False' WHERE
> id_produit= 14
>
> je suis en asp.net
>
> merci de me donner une piste parceque la je pete un cable
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
Fred BROUARD
re bonjour,

jpgr a écrit:
Merci pour vos remarques
juste que c'est rageant car le même programme marche avec access

"Or en présence de tables multiple il ne peut savoir a quelle table
appartient telle ou telle colonne."
Ok mais notez que lors de la création de la vue "il" possède ses infos...
puisque la vue fonctionne bien !
ou alors il suffirait de rajouter nomTable.ColonneMiseAJour : mais ça c'est
une autre histoire non ?



Vous ne pourriez pas utiliser MaTable.MaColonne dans l'update de la vue, puisque
la vue est l'équivalent d'une table donc les colonnes ne peuvent avoir un nom
composé. Le seul usage d'un nom composé est pour différencier les objets des
serveur, bases, et utilisateurs : Server.Base.User.Objet...



merci quand même
il faut que je trouve une solution contournant ce problème



Utiliser une procédure stockée, c'est fait pour cela !


A +



"Fred BROUARD" a écrit dans le message de news:


SQL est un langage et qui plus est normatif.

Les vues peuvent êtres mises à jours, uniquement dans le cas de vues



respectant

les conditions suivantes :
1) ne porter que sur une seule table
1) ne pas contenir de fonction d'agrégation dans la liste de sélection
2) ne pas contenir TOP ou DISTINCT dans la clause SELECT
3) ne pas employer les clauses GROUP BY ou UNION
4) ne pas utiliser de colonne dérivée dans la liste de sélection.

Autrement dit : le SGBDR doit pouvoir retrouver ses petits, c'est à dire



les

lignes à mettre à jour. Or en présence de tables multiple il ne peut



savoir a

quelle table appartient telle ou telle colonne.

A +


jpgr a écrit:

La vue ou la fonction 'R_produits' ne peut pas être mise à jour car la
modification affecte les tables de base multiples.

SELECT dbo.produits.id_produit, dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille, dbo.ndxlibelle.libProduit,
dbo.ndxdescription.libDescription,
dbo.ndxprix.libPrix, dbo.produits.aulieude,
dbo.produits.reforigine, dbo.produits.refSaari, dbo.produits.texteplus,
dbo.produits.origine,
dbo.produits.dispo, dbo.produits.photo,
dbo.produits.vignette, dbo.produits.extention, dbo.produits.enligne,
dbo.produits.select_produit,
dbo.produits.garantie,





dbo.produits.id_sous_famille,

dbo.produits.qteStock, dbo.produits.seuilCmd, dbo.produits.stokMax,
dbo.produits.enCmd,
dbo.produits.id_prix, dbo.produits.id_lib,
dbo.produits.id_description
FROM dbo.ndxprix INNER JOIN
dbo.famille INNER JOIN
dbo.sous_famille ON dbo.famille.id_famille >>>dbo.sous_famille.id_famille INNER JOIN
dbo.ndxlibelle INNER JOIN
dbo.ndxdescription INNER JOIN
dbo.produits ON dbo.ndxdescription.id_description





>
dbo.produits.id_description ON dbo.ndxlibelle.id_lib >




dbo.produits.id_lib

ON
dbo.sous_famille.id_sous_famille >>>dbo.produits.id_sous_famille ON dbo.ndxprix.id_prix >




dbo.produits.id_prix

Bon !

c'est une vue concernant 5 tables (c'est d'ailleurs pour cela que j'ai





créé

une vue !)
sous access tout fonctionne bien mais avec mssql2000 non !
j'avais meme un ORDER BY dbo.famille.nom_famille,
dbo.sous_famille.nom_sous_famille
mais cela creait un SELECT TOP 100 PERCENT qui empechait aussi





l'update

!

voici mon ordre d'update

UPDATE R_produits SET select_produit = 'False', libProduit = 'dvd
Compatible',
libDescription = 'C'est super top . Tip top quoi !', libPrix >




37.9900,

nom_famille = 'dvd', nom_sous_famille = 'divx', reforigine = '',
refSaari = 'SAAR-HH2B4', texteplus = 'pas d´infos supplémentaires',





dispo >
'24h',
aulieude = 125, origine = 'False', vignette = 'v_vide', photo >




'p_vide',

extention = 'jpg',
enligne = 'True', garantie = '6',
qteStock = '9', seuilCmd = '3', stokMax = '10', enCmd = 'False' WHERE
id_produit= 14

je suis en asp.net

merci de me donner une piste parceque la je pete un cable





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************