IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème dans l'exécution d'une requete !


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Points : 66
    Points
    66
    Par défaut Problème dans l'exécution d'une requete !
    Bonjour,
    J'ai un problème au niveau de l'exécution de ma requete (Joiture)
    J'ai 2 tables: Commandes & MatérielsCommandés et je voudraiis insérer un nouveau enregistrement dans la BD dès que l'utilisateur clic sur le boutton1 qui est le boutton de l'ajout. Pour ce, j'ai écrit le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                Cnx.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
            Dim SQL1, SQL2 As String
            Try
            SQL1 = "Insert into Commandes values(@IDcommande,@DateCommande)"
            SQL2 = "Insert into MatérielsCommandés values(@IDmatérielCommandé, @IDcommande, @QuantitéDésirée, @Unité, @PrixUnitaireMatérielCommandé)"
            Dim cmd1 As New SqlCommand(SQL1, Cnx)
            Dim cmd2 As New SqlCommand(SQL2, Cnx)
     
            cmd1.Parameters.Add(New SqlParameter("@IDcommande", SqlDbType.Int))
            cmd1.Parameters.Add(New SqlParameter("@DateCommande", SqlDbType.SmallDateTime))
            cmd1.Parameters("@IDcommande").Value = Val(Me.TextBox1.Text)
            cmd1.Parameters("@DateCommande").Value = Me.MaskedTextBox1.Text
            cmd1.ExecuteNonQuery()
     
            cmd2.Parameters.Add(New SqlParameter("@IDmatérielCommandé", SqlDbType.Int))
            cmd2.Parameters.Add(New SqlParameter("@IDcommande", SqlDbType.Int))
            cmd2.Parameters.Add(New SqlParameter("@QuantitéDésirée", SqlDbType.Float))
            cmd2.Parameters.Add(New SqlParameter("@Unité", SqlDbType.NVarChar))
            cmd2.Parameters.Add(New SqlParameter("@PrixUnitaireMatérielCommandé", SqlDbType.SmallMoney))
            cmd2.Parameters("@IDmatérielCommandé").Value = Val(Me.TextBox2.Text)
            cmd2.Parameters("@IDcommande").Value = Val(Me.TextBox1.Text)
            cmd2.Parameters("@QuantitéDésirée").Value = Val(Me.TextBox3.Text)
            cmd2.Parameters("@Unité").Value = Me.TextBox4.Text
            cmd2.Parameters("@PrixUnitaireMatérielCommandé").Value = Val(Me.TextBox5.Text)
            cmd2.ExecuteNonQuery()
     
            Catch ex As Exception
            MessageBox.Show(ex.Message)
            End Try
     
     
        End Sub
    Une erreur se produit lors de l'exécution disant:
    Violation of PRIMARY KEY 'PK_Commandes'. Cannot insert duplicate key in object 'Commandes'. The statement has been terminated.
    J'espr que quelqu'un pourra m'aider ..
    Mercii d'avance ..

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    c'est simple, ta table a une clé primaire, tu as mettre un numéro de commande qui existe déjà dans la table donc ca te jete ...


    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	Try
                Cnx.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    là y a de l'idée, mais si la connexion marche pas, le mieux serait quand meme de mettre exit sub dans le catch ...


    cmd2.Parameters("@QuantitéDésirée").Value = Val(Me.TextBox3.Text)

    ici si dans le textbox il n'y a rien (ou des lettres)
    ca va planter, alors que ton insert dans la table commande aura été fait
    donc c'est pas terrible !

  3. #3
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Points : 66
    Points
    66
    Par défaut
    J'ai carément changer de méthode! J'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
      If TextBox1.Text = "" And TextBox2.Text = "" And TextBox3.Text = "" And TextBox4.Text = "" And TextBox5.Text = "" And MaskedTextBox1.Text = "" Then
                MsgBox("Veuillez remplir les champs", MsgBoxStyle.Exclamation, "Ajout des données")
                Exit Sub
            Else
                Try
                    Cnx.Open()
                    com.CommandText = "Insert into Commandes values(" & TextBox1.Text & ",'" & CDate(MaskedTextBox1.Text) & "')"
                    com.ExecuteNonQuery()
     
                    com.CommandText = "Insert into MatérielsCommandés values(" & TextBox2.Text & ", " & TextBox1.Text & ", " & TextBox3.Text & ", '" & TextBox4.Text & "', " & CDbl(TextBox5.Text) & ")"
                    com.ExecuteNonQuery()
     
                    TextBox1.Text = ""
                    MaskedTextBox1.Text = ""
                    TextBox2.Text = ""
                    TextBox3.Text = ""
                    TextBox4.Text = ""
                    TextBox5.Text = ""
     
     
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
                MsgBox("Commande ajoutée avec succés.", MsgBoxStyle.Information, "Ajout Commande")
            End If
    Et ça a marché !!
    Le problème que j'obtient maintenant est au niveau de la modification. J'ai utilisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Ds.Tables("Commandes").Rows(Me.DataGridView1.CurrentRow.Index).Item(0) = Me.TextBox1.Text
            Ds.Tables("Commandes").Rows(Me.DataGridView1.CurrentRow.Index).Item(1) = Me.MaskedTextBox1.Text
            Ds.Tables("MatérielsCommandés").Rows(Me.DataGridView1.CurrentRow.Index).Item(0) = Me.TextBox2.Text
            Ds.Tables("MatérielsCommandés").Rows(Me.DataGridView1.CurrentRow.Index).Item(2) = Me.TextBox3.Text
            Ds.Tables("MatérielsCommandés").Rows(Me.DataGridView1.CurrentRow.Index).Item(3) = Me.TextBox4.Text
            Ds.Tables("MatérielsCommandés").Rows(Me.DataGridView1.CurrentRow.Index).Item(4) = Me.TextBox5.Text
    J'ai obtenu l'erreur suivante :
    La référence d'objet n'est pas définie à une instance d'un objet

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    avant de laisse tomber, j'ajouterais 2 choses

    tu trouves ca bien d'appeler tes textbox TextBox1 TextBox2 etc ... ?

    essaye de mettre un mot avec apostrophe dans un de test textbox et test ...

  5. #5
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 91
    Points : 66
    Points
    66
    Par défaut
    Vous parlez de l'ajout ou de la modification ?
    Je veux dire, est-ce-que vous parlez de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    com.CommandText = "Insert into Commandes values(" & TextBox1.Text & ",'" & CDate(MaskedTextBox1.Text) & "')"
                    com.ExecuteNonQuery()

    ou ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Ds.Tables("Commandes").Rows(Me.DataGridView1.CurrentRow.Index).Item(1) = Me.MaskedTextBox1.Text
    Ou bien des 2 ?

Discussions similaires

  1. probléme de l'exécution d'une requete insert into
    Par aefmaaradji dans le forum Oracle
    Réponses: 3
    Dernier message: 30/09/2010, 11h58
  2. probléme dans l'excécution d'une requete sql
    Par saraenim dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/10/2008, 14h55
  3. Réponses: 14
    Dernier message: 10/01/2007, 10h12
  4. Réponses: 1
    Dernier message: 28/06/2006, 16h07
  5. Réponses: 3
    Dernier message: 15/07/2005, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo