Requete Delete From Where impossible à éxecuter

Résolu
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007 - 8 oct. 2005 à 20:19
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 9 oct. 2005 à 12:52
Bonjour


Je developpe actuellement un logiciel de cuisine en relation avec une base de données access 2000, je l'ai quasiment terminé à l'exception d'une requete sql qui refuse de marcher, il s'agit d'une requete de suppression DELETE , voici le code concernés :


Détails : Recettes.Text est une combobox qui contient la recette selectionnée par l'utilisateur, ce bout de code sert a supprimer une recette qui est consultée, result est un tableau ArrayList dont je me sert pour traiter les resultats de mes requetes sql, Connection est une méthode que j'ai declarée dans une bibliothèque de classe (un fichier dll si vous preferez et dont je peut me servir pour n'importe quel requete).


if( this.Recettes.Text == "")
{


MessageBox.Show("Vous ne pouvez supprimer une recette sans l'avoir selectionée et consultée");


}


else


{


string recettesup = this.Recettes.Text;


this.Recettes.Text = "";


bd.Connection("Delete From Recettes " + " where NomRecette='"+recettesup+"'");


MessageBox.Show("Une Si Belle Recette T_T, j'espère que tu m'en proposera des meilleurs ^^ ");


}

J'espere que qq pourra me dire pourquoi la requete ne fonctionne pas T_T
Merci d'avance
Maiku

28 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:45
coq -> non, pas forcement besoin du *
Maiku -> Ca prouve bien qu'avec un Try /Catch, tu pourrais controler ton exception.

Tu as plus d'infos dans ton message d'erreur ?



essaie

try

{

bd.Connection("Delete From Recettes " + " where NomRecette='"+recettesup+"'");

}

catch(OleDbException ode){ MessageBox.Show(ode.ToString()); }


Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 oct. 2005 à 12:25
La suppression en cascade, ca veut dire que ca va aller supprimer dans
les autres tables tout ce qui fait reference au champ que tu as
supprimé.



Exemple : un resto qui aurait plusieurs menus, et plusieurs plats. (donc une table Menu, et une table Plat)

Un plat peut faire parti de plusieurs menus.

Cependant, si tu supprimes un plat, chaque menu aura un plat qui n'existe plus dans la base

La suppression en cascade va faire qu'Access supprimera dans la table
Menu toutes les lignes qui concernent le plat que tu auras supprimé



Dans ton cas, ca va enlever automatiquement dans ta table composer, la recette que tu as supprimé dans la table recettes

Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 oct. 2005 à 10:10
Le probleme c'est que tu as du mettre des contraintes d'integrité referentielle dans Access.

As-tu vraiment besoin de les mettres ? (meme si le MLD l'indique). Je veux dire, est-ce une obligation ?



Si tu dois les mettre, alors vas dans access, et choisis ta relation
entre tes tables Recettes et Composer. Click Droit -> Modifier une
relation, et clic "Effacer en cascade les enregistrements
correspondants", et reteste ton code (sans la requete "DELETE FROM
Composer") pour voir.



Cependant, je trouve ca bizarre que meme avec les 2 requetes enchainées, il n'y arrive pas

Mx
1
cispo Messages postés 103 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 10 septembre 2007 3
8 oct. 2005 à 21:43
Bonsoir,



Si tu englobes ce bout de code dans un try / catch, quelle erreur t'est retournée ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:08
Controle aussi la string equivalent a la requete, pour voir si elle ne contient pas une erreur.

Il pourrait par exemple avoir des espaces a la fin de recettesup (a ce
propos, tu pourrais pas plutot utiliser un identifiant ?)

Et execute la dans ton SGBD pour voir si elle reagit comme tu veux.


Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:14
Rebonjour

Alors pour le contrôlé du string, ben j'affiche la requete avant de l'executer, elle m'affiche bien le nom de la recette.
Pourquoi pas utilisé un identifiant ?
Bonne question, je n'en voyais pas le besoin vu que j'ai le nom de la recette dans la feuille.
Quand au try catch ben ......je sé vraiment l'utiliser en fait.
Donc si tu pouvais m'expliquer cispo.....
Parce que j'ai deja essayé d'en faire mais ca marchait pas T_T

Maiku

PS : La requete dans le SGBD marche parfaitement.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:18
Basiquement, englobe tout le contenu de la fonction bd.Connection() par Try/Catch



void Connection()

{

try

{

// ton code

}

catch(Exception e){ System.Windows.Forms.MessageBox.Show(e.ToString()); }

}


Si une quelconque erreur est levée, tu auras toute sa trace dans un MessageBox


Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:20
Euh.....
désolée de dire ça mais j'en vois pas l'intêret ce n'est pas bdConnection qui pose problème puisque toutes mes requetes fonctionne avec cette méthode.
Pourquoi faire un try/catch dedans ?

Maiku
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:23
Tu as raison. De toutes facons, si il y avait une erreur, tu serais au courant par un plantage.

As-tu essayé le mode pas a pas dans ta fonction ?

Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:25
Lol

Ben y a pas vraiment de mode pas a pas, si tu vois ce que je veux dire, c'est juste une requete que je fais ds cette fonction.
Pourtant ds mon logiciel, je fais plein d'otre requetes : insert, update, select et y a que le delete qui marche pas et j'en ai besoin ds deux feuilles.
T_T

Je vais essayé de faire un delete sans where pour voir, c'est la seule chose que je peux tenter.

Maiku
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:27
Resultat des courses :

Meme sans un where, impossible de supprimer.
Je vais bientot m'arracher les cheveux !!!!!

Maiku
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:30
Oui c'est tres bizarre.



MessageBox.Show("Une Si Belle Recette T_T, j'espère que tu m'en
proposera des meilleurs ^^ "); <- Ca s'affiche bien ca ?

Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:31
Non il ne peut s'afficher puisqu'il s'agit de la ligne situé apres la requete, et puisque la requete plante, elle ne s'affiche pas

Maiku
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:33
Ca veut rien dire ca.

Par contre, ca voudrait peut etre tout simplement dire que ce bout de code, que tu nous a presenté, n'est pas executé.

Mets un MessageBox de test avant la Connection, pour voir.

Mx
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 oct. 2005 à 22:33
Donc il y a bien une exception qui est levée, non ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 oct. 2005 à 22:34
coq -> il parait que non

Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:38
Alors j'ai remis le même MessageBox mais cette fois ci avant la requete, celle ci s'est bien affichée, ce qui est logique car il ne doit rentrer dans le else que si j'ai selectionné une recette.
Je vous met le message d'erreur qu'il me donne sur la ligne de ma requete :

Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans system.data.dll

Maiku

PS : j'ai deja eu le même genre d'erreur au debut quand mes requetes foiraient mais la cette requete elle commence a me peser.

Maiku
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 oct. 2005 à 22:40
ah.

Sinon sous acces ce n'est pas plutot
bd.Connection("Delete * From Recettes " + " where NomRecette='"+recettesup+"'");

?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 oct. 2005 à 22:41
Nous y voilà, c'est ça qu'on appelle une exception.
Peut tu nous sortir le restant du message stp ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
8 oct. 2005 à 22:44
Alors pour te repondre coq :
le * je viens de le tester mais je ne vois pas ce que ca aurait changer car sous access sous le * il marchait.
Quand au restant du message : que veut tu dire par la ?
Je n'ai eu que ce message d'erreur : que je connais d'ailleurs par coeur lol puisqu'il s'affiche tjrs lors d'erreur de requete.

Maiku

PS : Tu viens de m'apprendre ce qu'est un exception, merci, dsl je me suis mis au c# mode graphique que depuis debut septembre ^^°. Et pour l'instant je me contente de ce que je dois faire ds mon prog.
0
Rejoignez-nous