[Catégorie modifiée VB6 -> .Net] aucun valeur donné pour un ou plusieurs paramèt

Signaler
-
 Utilisateur anonyme -
bonjour
j'ai une erreur
aucun valeur donné pour un ou plusieurs paramètre requis erreur dans:Microsoft Jet Database engine
aider moi svp !!!!

11 réponses

Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bonjour,

On a donc l'erreur..
On doit inventer le code et deviner l'environnement?


L'expérience, c'est une connerie par jour, mais jamais la même..
je veut ajouter dans ume base de donné a partir du vb 2008
voila le code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'si on a ouvert le form en mode modif alors ...
        If Me.typemiseajour = TypeMaj.modification Then
            Try
                'instance connection
                Dim conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" & Application.StartupPath & "\gestionstock.mdb")
                'instance commande + type + commandText
                Dim CmdInsert As New OleDbCommand
                CmdInsert.CommandType = CommandType.Text
                CmdInsert.CommandText "update materiel  set id_mat '" & txt_num.Text & "', Nom_mat = '" & txt_nom.Text & "', Marque =" & txt_marque.Text & ", Caracteristique = '" & txt_carac.Text & "' where Id_mat = " & Integer.Parse(txt_num.Text)
                CmdInsert.Connection = conn
                conn.Open()
                'execution de la requette de Mise a jour UPDATE
                CmdInsert.ExecuteNonQuery()
                conn.Close()
                MsgBox("modifié avec succés", MsgBoxStyle.Information, "modification de Materiel")
                Me.Close()
                'retour au form d'aceuilade 
                frmContacts.Show()
            Catch ex As Exception
                MessageBox.Show("l'erreur suivante s'est produite lors de la tentative de modification:" & vbCrLf & ex.Message & vbCrLf & "erreur dans : " & ex.Source, "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End Try
        Else
            'sinon le form doit etre ouvert en mode ajout
            'selon la declaration de l'enumeration TypeMaj
            Try
                'idem instance connection ... commande..puis execution
                'de la requette d'ajout INSERT
                Dim conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" & Application.StartupPath & "\gestionstock.mdb")
                Dim CmdInsert As New OleDbCommand
                CmdInsert.CommandType = CommandType.Text
                CmdInsert.CommandText = "insert into contact(nom,email,tel,adresse) values ('" & txt_num.Text & "', '" & txt_nom.Text & "'," & txt_marque.Text & ",'" & txt_carac.Text & "')"
                CmdInsert.Connection = conn
                conn.Open()
                CmdInsert.ExecuteNonQuery()
                conn.Close()
                MsgBox("ajouté avec succés", MsgBoxStyle.Information, "ajout de Materiel")
                Me.Close()
                frmContacts.Show()
            Catch ex As OleDbException
                MessageBox.Show("l'erreur suivante s'est produite lors de la tentative d'ajout:" & vbCrLf & ex.Message & vbCrLf & "erreur dans : " & ex.Source, "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End Try
        End If
    End Sub
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Si tu fais du VB.Net, pourquoi poster dans la catégorie VB6 ?

N'attends pas qu'on te demande les détails. C'est une perte de temps pour tout le monde.

Une chose me saute aux yeux, hors mis la présentation désastreuse de ta requète qui nous oblige, nous, à se tordre dans tous les sens pour pouvoir la lire ou a faire la mise en forme à ta place :
CmdInsert.CommandText = "update materiel " & _
                        "    set id_mat = '" & txt_num.Text & "', " & _
                        "        Nom_mat = '" & txt_nom.Text & "', " & _
                        "        Marque =" & txt_marque.Text & ", " & _
                        "        Caracteristique = '" & txt_carac.Text & "' " & _
                        "  where Id_mat = " & Integer.Parse(txt_num.Text)
Dans cette requète, tu utilises le champ id_mat dans les "set" ainsi que dans la clause "Where" : Or, tu traites différemment le champ dans ces deux utilisations :
- Dans le "set", tu considères id_mat comme un champ de type texte puisque tu as utilisé des ' pour encadrer son contenu
- Dans le Where, tu as pris soin de le transformer en numérique.
Alors ? Texte ou numérique ?

Il est évident qu'il faut aussi se reposer la question pour les autres champs.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
id_mat ou Id_mat ?
i minuscule ou majuscule ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Je reviens sur cette ligne :
" where Id_mat = " & Integer.Parse(txt_num.Text)

Sur cette ligne, tu construis une chaine de caractères.
Certes, elle sera interprétée comme une requète SQL quand tu vas la soumettre, mais pour l'instant, c'est une chaine.
Or, mélanger du texte et des chiffres n'est jamais bon.
Tu aurais eu intérêt à laisser txt_num.Text sans vouloir le parser : le texte se concatène mieux avec du texte qu'avec du numérique.

Alors oui, c'est un chiffre, mais il sera interprété comme cela par la requète, plus tard. Pour l'instant, tu construis une chaine de caractères, du texte.
Comprends-tu ce que je veux te dire ?

Rappel de ce qu'on rabache à longueur de temps sur ce forum à chaque fois qu'il y a ce genre de problème de compilation des requètes :
Si le champ est déclaré ***dans la table*** de type :
- Texte : Encadrer les valeurs par des apostrophes '
- Date : Encadrer les valeurs par des dièses #
- Numérique : pas d'encadrement
De plus, si le nom d'une table ou d'un champ comporte des caractères spéciaux (accents, espaces, mots réservés ...), il faut encadrer le nom de ces tables ou champs par des crochets droits [ et ]
il est de type numérique
est il est id_mat
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Et sur quelle ligne apparaît le souci la connexion à ta base s'effectue t-elle correctement?
Ta base access est en quelle version, non protégée par mot de passe?


L'expérience, c'est une connerie par jour, mais jamais la même..
j'ai changer
where id_mat " = txt_num

m'ai j'ai trouver la même erreur
slt lolukun
j'utulise Acces 2007 et ma base sans mot de passe
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Relis ce que j'ai écris plus haut.
C'est la syntaxe dans le "set" qu'il faut modifier en fonction du type de champ.
Pour cela, il n'y a que toi qui sache de quels types sont tes champs.
Il te suffit de respecter la syntaxe SQL.

where id_mat " = txt_num
Il y a une erreur dans cette chaine

Bonjour,

j'utulise Acces 2007 et ma base sans mot de passe


Pour continuer d'enfoncer le clou: Acces 2007 et 2010 ne peuvent pas fonctionner avec le moteur JET.

Donc, en principe, tu devrais déjà avoir une erreur dès la tentative de connexion, avant même d'arriver à ta requête.