Probleme avec ma requete SQL

cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022 - 21 avril 2007 à 17:16
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 - 5 avril 2008 à 17:06
Bonjour à  tous,
Voila je galère depuis plusieurs jours avec ma requete
j'ai un listview qui est charger avec ma table access
en clickant sur une ligne du listview et ensuite sur mon bouton je veux que la ligne s'efface de ma base
Mais j'ai toujours un message d'erreur
pourtant ce code fonctionne parfaitement sur une autre appli que j'ai pris sur ce site
je ne comprends pas !

Je debute et je bloque dessus depuis longtemps
Je ne sais pas si le probleme est sur la construction de ma requete SQL ou si c'est sur le code qui execute la requete

Mon message d'erreur :
Aucune valeur donnée pour un ou plusieurs des parametres requis
à system.data.oledb.oledb.command.executecommandtextforsingleresult etc .........
Merci beaucoup a tous pour votre aide

Voici mon code :

Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click

SQLString =

"DELETE FROM PROG " _&

"WHERE ([Fabricant] = '" & ListView1.Items(ListView1Position).Text &
"'" _&

"AND [Type] = '" & ListView1.Items(ListView1Position).SubItems(1).Text &
"'" _&

"AND [D‚signation] = '" & ListView1.Items(ListView1Position).SubItems(2).Text &
"'" _&

"AND [Taille m‚moire] = '" & ListView1.Items(ListView1Position).SubItems(3).Text &
"'" _&

"AND [Boitier] = '" & ListView1.Items(ListView1Position).SubItems(4).Text &
"'" _&

"AND [Temps d'accŠs] = '" & ListView1.Items(ListView1Position).SubItems(5).Text &
"'" _&

"AND [Nombre d'octets] = '" & ListView1.Items(ListView1Position).SubItems(6).Text &
"'" _&

"AND [Code Fabricant] = '" & ListView1.Items(ListView1Position).SubItems(7).Text &
"'" _&

"AND [Code Composant] = '" & ListView1.Items(ListView1Position).SubItems(8).Text &
"'"

Try 

objconnection.Open()

Dim objCommand
As
New OleDbCommand(SQLString, objconnection)objCommand.ExecuteNonQuery()

objconnection.Close()

Catch ex
As ExceptionMsgBox(ex.ToString)

End
TryChargebd()

'Affiche dans label15 le nombre d'entr‚es dans la base de donn‚esLabel15.Text = ListView1.Items.Count

End
Sub

12 réponses

cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
21 avril 2007 à 17:30
Dans la première ligne du code SQL, je pense qu'il y a une erreur :
Il y a : " DELETE FROM PROG ",
Il faut : "DELETE
*
FROM PROG ",
De plus, pour Access, il manque un point virgule à la fin du code SQL :


"AND [Code Composant] = '"
& ListView1.Items(ListView1Position).SubItems(8).Text &
"';"
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 avril 2007 à 17:49
Non, "DELETE FROM PROG" est une syntaxe habituellement correcte

De plus le point virgule n'est pas non plus obligatoire lorsque on passe une requette depuis le code

Ceci dit, ça n'empeche pas de faire des essais pour voir.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
21 avril 2007 à 18:21
Le probleme est toujours le meme
point virgule ou pas
et la " je seche "
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 avril 2007 à 18:22
Sur quelle ligne exactement tu as l'erreur?

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #

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

Posez votre question
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
21 avril 2007 à 18:34
bonsoir Casy,
les données ne sont pas effacées de ma table "PROG"
et lors du click sur mon bouton1 j'ai une fenetre avec :

"Aucune valeur donnée pour un ou plusieurs des parametres requis
à system.data.oledb.oledb.command.executecommandtextforsingleresult etc ........."
Je cherche depuis un long moment et je ne trouve pas
je te remercie pour ton aide
A+
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 avril 2007 à 19:01
Oui mais justement il serait interessant de savoir sur quelle ligne tu as l'erreur, car pour moi ce code me semble correct. D'autant plus que tu as un gestionnaire d'erreur sur l'execution de la requette, donc tu ne devrais pas avoir le message d'erreur, je pense.

En plus le message d'erreur ne semble pas correspondre avec l'instruction que tu utilise :
system.data.oledb.oledb.command.executecommandtextforsingleresult <--> objCommand.ExecuteNonQuery()

Mais l'erreur peux aussi venir de la fonction ChargeBD()

Execute ton code en mode debug et sur l'erreur tu devrais etre arreté sur la ligne en cause.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 avril 2007 à 20:07
Les espaces entre les mots clé !
Penses-y quand tu passes à la ligne : Ajoute un espace avant de fermer le " ou devant chaque AND
(déjà dis)
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
21 avril 2007 à 20:46
Toujours le meme probleme meme avec des "espaces"

L'erreur est sur :


Catch ex
As Exception

le detail de l'erreur :

Interception de System.Data.OleDb.OleDbException
  ErrorCode=-2147217904
  Message="Aucune valeur donnée pour un ou plusieurs des paramètres requis."
  Source="Microsoft JET Database Engine"
  StackTrace:
       à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       à System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       à System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       à System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       à PROGRAMMATEUR_D_EPROM.form11.Button1_Click(Object sender, EventArgs e)
zener82 Messages postés 15 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 18 juillet 2021
25 avril 2007 à 08:50
J'ai le meme soucis.

Je pense que ça vient du fait que la requete SQL ne donne aucun résultat... (RecordSet vide).
Je vais essayer de voir comment passer outre...

bon courage !
zener82 Messages postés 15 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 18 juillet 2021
25 avril 2007 à 08:57
En fait je penche plutot sur un probleme de synthaxe...

Sans rien garantir, j'essaierais :
"WHERE ([Fabricant] = " & ListView1.Items(ListView1Position).Text
 au lieu de
"WHERE ([Fabricant] = '" & ListView1.Items(ListView1Position).Text

Bon courage !
cs_ppch Messages postés 1 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 5 avril 2008
5 avril 2008 à 14:35
Bonjour à toutes et tous,

Débutant en VBA - ACCESS, je sèche depuis 2 jours sur une erreur SQL :
"Aucune valeur donnée pour un ou plusieurs des paraètres requis"

Mes autres requêtes de type 'select', sur d'autres tables ne posent pas de Pb !

Clé primaire de la table db_user = db_user_ident (type texte, longueur 6)
txt_nom_user est un contrôle de formulaire

Merci si vous pouviez m'expliquer !!!
ci-dessous le code

If txt_nom_user = "" Then
    MsgBox "Saisie obligatoire "
    Exit Sub
    End If
   
Set cnnx = CurrentProject.Connection
Dim ws_lst As New ADODB.Recordset
ws_lst.ActiveConnection = cnnx
ws_lst.CursorType = adOpenDynamic


 


mysql = "SELECT [db_user.ident], [db_user.nom], [db_user.prenom], [db_user.initiales], [db_user.psw] "mysql mysql + "FROM db_user WHERE db_user " & txt_nom_user
MsgBox mysql
ws_lst.Open mysql


MsgBox ws_lst(1)



PPCH
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
5 avril 2008 à 17:06
Il y a une erreur patente dans votre requête SQL :

Vous avez écrit :

mysql = "SELECT [db_user.ident], [db_user.nom], [db_user.prenom], [db_user.initiales], [db_user.psw] "mysql mysql + "FROM db_user WHERE db_user " & txt_nom_user
MsgBox mysql
ws_lst.Open mysql

Il faut écrire :
mysql = "SELECT ident, nom, prenom, initiales, psw "mysql mysql & "FROM db_user WHERE ident '" & txt_nom_user.Text & "'"
MsgBox mysql
ws_lst.Open mysql

Motif des corrections :
<li>Il est totalement inutile de faire précéder les noms des champs du nom de la table dans la mesure où il y a une seule table origine : db_user</li>(entre nous, je n'appellerais pas une table db_..., db sont les initiales de database : le fichier de base de données, il vaut mieux désigner les tables par t_...)
<li>La concaténation de chaînes se fait avec un "&" en VB, de préférence au "+".
</li><li>On ne peut pas prendre le nom de la table comme paramètre d'une condition WHERE. Dans le cas où l'on veut afficher tout le contenu de la table, il suffit de ne pas mettre de condition WHERE (mais je ne pense pas que c'était ce que vous vouliez faire!..)</li><li>Dans le cas où le paramètre à entrer est une chaîne de caractères, il convient d'encadrer la chaîne par des simples cotes (car dans le code, la chaîne SQL est délimitée par des doubles cotes).
</li>Attention :Si toutefois il y a un apostrophe dans le texte de la chaîne passée en paramètre, il convient de doubler cet  apostrophe  pour éviter que la  requête  n'échoue.
Rejoignez-nous