none
val+1 RRS feed

  • Question

  • Bonjour,

     j'ai une datagridview "article" et lorsque je fait un double clik, les données seront enregistrés dans une table "ticket" qui contient parmi ces attribut un "codeTicket".je veux que codeTicket recoit "1" et augmente(+1) à chaque validation.c'est à dire lorsque je refait le double clik codeTicket=ancienne valeur+1

     

     

    Private Sub DataGridview1_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    
      Dim cnx As New SqlConnection
      cnx.ConnectionString = ("Data Source=PC\SQLEXPRESS;Initial Catalog=Fournisseur;Integrated Security=True;Pooling=False;")
      cnx.Open()
      
      Dim Val, val1, val2, val3 As String
      Try
       Val = CType(DataGridView1.CurrentRow.Cells(0).Value.ToString, Integer)
       val1 = DataGridView1.CurrentRow.Cells(5).Value.ToString
       val2 = DataGridView1.CurrentRow.Cells(6).Value.ToString
       val3 = DataGridView1.CurrentRow.Cells(13).Value.ToString
    
    
    
       Dim cmd As New SqlCommand("insert into Ticket(CodeTicket,Code_a_Barre,DesignationArt,PrixU,Qté,ValeurRemise) values(1, '" & Val & "','" & val1 & "','" & val2 & "',1,'" & val3 & "')", cnx)
       Dim affectedrows As String = cmd.ExecuteNonQuery()
       MsgBox("ajout effectué")
       
    
    
       Dim cmd1 As New SqlCommand("SELECT * FROM Ticket", cnx)
       Dim dt As New DataTable
    
       Dim ObjDataAdapter As SqlDataAdapter
       Dim ObjDataSet As New DataSet
    
       ObjDataAdapter = New SqlDataAdapter(cmd1)
       ObjDataAdapter.Fill(ObjDataSet, "Ticket")
       dt = ObjDataSet.Tables("Ticket")
    
       Caisse.DataGridView1.DataSource = dt
       Caisse.DataGridView1.SelectedColumns.ToString()
    
      Catch ex As Exception
       MsgBox("Article déjà ajouté !", MsgBoxStyle.Critical)
    
      End Try
      cnx.Close()
    
      Me.Close()
     End Sub
    
    ce code c'est lorsque le "codeTicket" recoit toujours 1

     

    • Modifié marwa580 jeudi 6 mai 2010 10:37
    mercredi 5 mai 2010 02:39

Réponses

Toutes les réponses

  • Bonjour,

    Il faut exécuter la requête SQL suivante lorsque votre ticket est déjà existant :

    UPDATE Ticket SET Qté = Qté + 1

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mercredi 5 mai 2010 06:46
    Modérateur
  • Bonjour,

    vous pouvez egalement récupérer le code_ticket max au moment de votre insert en effectuant une requete du type : insert into ...select.

    D'après votre exemple :

     

    Dim cmd As New SqlCommand("insert into Ticket(CodeTicket,Code_a_Barre,DesignationArt,PrixU,Qté,ValeurRemise) select max(CodeTicket) + 1,'" & Val() & "','" & val1 & "','" & val2 & "',1,'" & val3 & "' from Ticket", cnx)
    

     

    Cependant est ce que votre code_ticket ne dépend pas de votre artcile ?

    Si c'est le cas rajouter une clause where pour obtenir le max pour l'article sélectionné.

    Cordialement

    Nb: éviter de passer des paramètres par concaténation et utiliser à la place des DbParameter ( voir DbCommand. Parameters )

     

    mercredi 5 mai 2010 08:01
    Modérateur
  • et s'il n'existe pas de ticket d' avant?
    mercredi 5 mai 2010 09:51
  • on peut tester si la valeur est null et dans ce cas renvoyer 0 via isnull :

    select isnull(max(id),0) + 1, ....

    Cordialement

     

    • Marqué comme réponse marwa580 samedi 8 mai 2010 18:45
    mercredi 5 mai 2010 10:14
    Modérateur
  • Ce code fonctionne correctement, mais la valeur "id" augment (+1) dans chaque ligne alors que je veux qu'elle augmente quand je veux créer une nouvelle achat (bouton valider qui supprime les ligne de la datagrid et la valeur "id" augmente +1)
    mercredi 5 mai 2010 15:36
  • Bonjour,

    vous problème ne semble plus être un problème technique puisque le code fonctionne mais un problème fonctionnel. Essayez d'être très clair si les notions que vous manipulez : achat , articles, ticket sinon nous ne pourrons pas vous aidez.

    Cordialement

    jeudi 6 mai 2010 08:29
    Modérateur
  • j'ai une datagridview qui contient les champs de la table "article".lorsque je fait un double clik sur l'une de ces lignes,les seront enregistrés dans une table Ticket et en meme temps dans autre datagridview qui contient ces champs(on ajoute aussi à ces donnéeun autre champs "CodeTicket" initialisé à 1.Au premier ajout,le CodeTicket =1 .et aprés validation de plusieurs lignes (c'est à dire saisie d'un autre ticket),le Codeticket=i+1 j'espère que mon problème est claire
    jeudi 6 mai 2010 08:49
  • Désolé mais pour ma part non ce n'est pas clair du tout...

    jeudi 6 mai 2010 09:36
    Modérateur
  • Bonjour,

     

    Pour simplifier, vous avez une table qui peut contenir ou pas des lignes. Dans cette table, vous introduisez des nouvelles lignes.

     

    Un des champs de cette table contient la valeur ‘CodeTicket’. Cette valeur est une valeur séquentielle et unique pour chaque ligne. Chaque fois que vous ajoutez une nouvelle ligne dans la table, vous voulez qu’elle ait la valeur CodeTicket augmente avec +1, par rapport à la dernière (et la plus grande) valeur déjà existante dans la table.

     

    Si votre problème peut être formulé comme ça, la solution proposée par Nikho marche.

     

    Sinon, je vous prie aussi d’être plus explicite dans votre description.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    jeudi 6 mai 2010 09:57
  • mais il faut que plusieurs lignes vont prendre la valeur 1 et lorsque je fait un clik sur "valider" et je recommence l'ajout des autres lignes, CodeTicket sera égal à 2 et ainsi de suite
    jeudi 6 mai 2010 10:21
  • CodeTicket egal à 2 est la valeur pour les nouvelles valeurs, ou pour les valeurs déjà existantes ? Je reconnais que moi aussi j’ai des difficultés à comprendre le fil logique de votre application. Peut-être si vous présentez les pas d’une manière plus explicite, on réussira à trouver une solution.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    jeudi 6 mai 2010 10:28
  • mon but c'est de faire un double clik sur une ligne de la datagrid et les données seront enregistrés dans une autre datagrid qui contient de plus une colonne "CodeTicket" . Dans l'ajout des premiers ligne, la valeur de CodeTicket=1.aprés d'effectuer cet ajout, on clique sur "valider". lorsqu'on veut ajouter d'autre ligne,la valeur de codeTicket va etre ègale à 2 puis lorsqu'on valide et on va ajouter d'autre le CodeTicket va etre égal à 3...
    jeudi 6 mai 2010 10:35
  • Bonjour,

     

    Quand vous dites ‘la valeur de CodeTicket’, il s’agit de la valeur de toutes les lignes, des lignes déjà existantes, ou des nouvelles lignes ?

     

    L’action ‘valider’ a-t-elle aucune relevance pour ce cas ? Est-ce qu’elle modifie quelque-chose dans le datagrid ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    vendredi 7 mai 2010 08:43