Pb de DeLEte en SQL avec Jointure

Résolu
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 14 janv. 2013 à 11:50
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 18 janv. 2013 à 09:33
Bonjour à tous,

Je suis en train de développer un système de recherche par mot-clé pour une application de gestion vidéo. Pour cela j'utilise 2 tables (entre autres):
Une table principale nommé T_KeyWords avec les champs suivants:

KW_ID Integer AutoIncrement PrimaryKey
KW_WORD Varcher(25) n'accepte pas les nuls

Une 2ème table répertorie les seuls mot-clés pour une vidéo précisée, nommé T_Video_Related avec les champs suivants:
KWR_ID Integer AutoIncrement PrimaryKey
KWR_KWID ID de la Table principale
KWR_VIDEO_ID (l'ID repris de ma table principale vidéo qui comprend entre autres les titres).

J'ai 2 requêtes SQL, la 1ère porte sur la table principale et est un simple SELECT ALL.
La seconde sur la table T_Video_Related que voici:
CREATE PROCEDURE [BH_SP_SEL_KEYWORDS]

@VIDEO_ID  AS INTEGER

AS 

BEGIN

SELECT 	KR.*, K.KW_WORD
FROM		T_Keywords_Related	AS	KR
LEFT JOIN	T_Keywords	AS	K	ON	KR.KWR_KW_ID = K.KW_ID 
WHERE	KR.KWR_REC_ID	=	@VIDEO_ID
ORDER BY 	K.KW_WORD

END
GO


les 2 requêtes sont affichés chacun dans un DataGrid tout simple et là, aucun problème. Celui-ci arrive quand je veux supprimer un mot clé dans la seule table T_Keywords_Related.
Je le fais comme suit: myRecordset.Delete
ce qui supprime effectivement le mot-clé de la table Related MAIS AUSSI de la table principale, ce que je ne veux pas.

1° question: Peut-être y a t'il une autre façon d'écrire ma requête (j'ai essayé avec un RIGHT JOIN avec et sans intervertir les 2 membres de la relation qui suit, mais sans succès).
2)question: J'avais vu et utilisé une option SQL pure qui permet en substance de ne pas tenir compte du JOIN lors du Delete, mais impossible de m'en souvenir ni de la retrouver.

Alors si quelqu'un pouvait me dépanner, merci d'avance.

Calade

3 réponses

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
18 janv. 2013 à 09:33
Bonjour,

Pour ceux que cela intéresse, j'avais aussi posté dans la section SQL et un certain "jopop" (merci à lui) m'a dépanné. Il faut renseigner la propriété dynamique "Unique Table:

myRecordset.Properties("Unique Table") = "T_Video_Related"
myRecordset.Delete()

et dans le cas précis d'une requête SELECT avec JOINTURE vous précisez ainsi sur quelle table doit porter les suppressions à venir.
attention, tout REQUERY subséquent supprime cette propriété, il faut donc la remettre à chaque fois.


Calade
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 janv. 2013 à 23:07
Salut

J'essaie de comprendre


dans la table T_Video_Related
le champ KWR_VIDEO_ID vient d'une autre table ?

Celui-ci arrive quand je veux supprimer un mot clé dans la seule table T_Keywords_Related.
Je le fais comme suit: myRecordset.Delete
ce qui supprime effectivement le mot-clé de la table Related MAIS AUSSI de la table principale, ce que je ne veux pas.


pas très clair

Qu'est ce la table T_Keywords_Related
et ta table principal T_Keywords ?

il manque des éclaircissements pour mieux
comprendre
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
15 janv. 2013 à 07:46
Bonjour et merci de ta réponse,

Ce que je veux faire, c'est un système de recherche par mot-clé sur une base de gestion vidéo qui comporte tous les renseignements classiques (Titre, Réalisateur, Acteurs, etc...). Le champ KWR_VIDEO_ID est l'ID (AutoIncrement) de la table principale de cette base.

Le système de mot-clé serait lui composé de 2 tables.La 1ère, T_KeyWords contient TOUS les mot-clés déjà employés et ce indépendamment de la base vidéo.
La seconde contiendrait seulement les mot-clés relatifs à un titre donné et cette table est nommé T_Keywords_Related et contient donc le fameux champ KWR_VIDEO_ID (ID de la vidéo lié et KWR_KW_ID, l'ID venant de la table générale des mot-clés.

J(espère avoir été assez clair.


Calade
0
Rejoignez-nous