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 :

Interdiction de choisir un nombre plus de N fois


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut Interdiction de choisir un nombre plus de N fois
    Salut tout le monde
    Svp Gentelman .. j'ai vraiment besoin d'aide
    J'ai deux Tables
    TableSection avec deux champs (SectionId de Tye Numerique - SectionNumber de Type Numerique)
    TableSuppliers avec 3 champs ( SupplierID de Type Numerique - SupplierSection de Type Numerique - SupplierName de Type Text)
    Dans ma Form1 j'ai TextBox1 pour recuperer Max Id dans TableSuppliers
    ComboBox1 pour choisir (SectionNumber) .. ComboBox1 deja remplit par le champ (SectionNumber) du Table (TableSection) de cette facon (111-222-333-444-555-666-777-888-999-101010)
    TextBox2 pour remplir le nom de Supplier
    TextBox3 que je vais la remplir par un nombre fixe par exemple (5) .. Alors dans ce cas si les records inscrits dans une meme (SupplierSection) dans ma TableSuppliers il faut qu'il ne depassent pas 5.
    j'enregistre mes records dans (TableSuppliers) par Button2 de cette facon :
    1 111 name1
    2 111 name2
    3 111 name3
    4 111 name4
    5 111 name5
    Ici le nombre (111) a atteint (5) fois .. alors je veux automatiquement lorsque je vais choisir pour le sixieme record .. dans ma ComboBox1 je serai oblige de choisir (222) jusqu'a 5 fois .. apres je serai oblige de choisir dans ComboBox1 (333) aussi uniquement 5 fois ...etc ..ou bien je serai averti par un message d'erreur que j'ai fais le mauvais choix dans ComboBox1.
    Voici tout mon code :
    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
    39
    40
    41
    42
    Imports System.Data.OleDb
    Public Class Form1
        Public constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Database1.accdb"
        Public myconnection As New OleDbConnection(constring)
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myconnection.Open()
            Dim query As String = "select * from TableSection"
            Dim command As OleDbCommand = New OleDbCommand(query, myconnection)
            Dim reader As OleDbDataReader = command.ExecuteReader()
            If reader.HasRows Then
                While reader.Read()
                    ComboBox1.Items.Add(reader("SectionNumber"))
                End While
            End If
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim InfoCommand As New OleDbCommand("Select max(SupplierID) from TableSuppliers", myconnection)
            If myconnection.State = ConnectionState.Closed Then myconnection.Open()
            If InfoCommand.ExecuteScalar Is DBNull.Value Then
     
                TextBox1.Text = 1
                TextBox2.Focus()
            Else
     
                TextBox1.Text = InfoCommand.ExecuteScalar + 1
                TextBox2.Focus()
            End If
     
        End Sub
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim sqlQry As String = "Insert Into TableSuppliers (SupplierID, SupplierSection, SupplierName) values (@SupplierID, @SupplierSection,@SupplierName)"
            Using cmd As New OleDbCommand(sqlQry, myconnection)
                cmd.Parameters.AddWithValue("@SupplierID", TextBox1.Text)
                cmd.Parameters.AddWithValue("@SupplierSection", ComboBox1.Text)
                cmd.Parameters.AddWithValue("@SupplierName", TextBox2.Text)
                Dim SaveOk As Integer = cmd.ExecuteNonQuery()
                If SaveOk <> -1 Then
                    MsgBox("record enregistre avec succes")
                End If
            End Using
        End Sub
    End Class
    Merci beaucoup d'avance pour l'aide
    Amicalement
    MADA

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Salut Mada,

    Peut-être ceci te servira-t-il ... ?

    (Attention si cela te convient, il faudra prévoir la remise à zéro du tableau des compteurs).



    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
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Static TableDesIndexSelectionnes(ComboBox1.Items.Count - 1) As Integer
     
            ' Ce tableau est un ensemble de compteurs dont les indices de cette table varient de 0 à Items.Count -1, comme les indices de ComboBox1
            ' A chaque position du tableau se trouve le compteur des sélections de l'Item situé au même indice dans ComboBox1
            ' Ex. Je sélectionne 3 x l'élément d'indice 0 du Combo et 5 x celui de l'indice 3, alors on a :
            ' TableDesIndexSelectionnes(0) vaut 3 et TableDesIndexSelectionnes(3) vaut 5.
     
            ' Eventuellement ignorer la seléction si maximum déjà atteint :
            If TableDesIndexSelectionnes(ComboBox1.SelectedIndex) = 5 Then
                Exit Sub
            End If
     
            ' Ou inciter l'utilisateur à choir autre chose :
            If TableDesIndexSelectionnes(ComboBox1.SelectedIndex) = 5 Then
                MessageBox.Show("Maximum de " & ComboBox1.SelectedItem & " atteint. Choisissez une autre valeur.")
                Exit Sub
            End If
     
            TableDesIndexSelectionnes(ComboBox1.SelectedIndex) += 1
     
        End Sub

  3. #3
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut
    Merci beaucoup pour l'aide
    Tres tres gentil de votre part .. respectable Phil Rob
    J'ai uniquement change les sections numeros .. au lieu de (111-222-333-444-555-666........etc) .. j'ai mis (1-2-3-4-5-6-7-8-9-10)
    J'ai essaye d'enregistrer certains records mais malheureusement j'ai pas pu arriver ..
    Nom : p_1243jyo7p1.jpg
Affichages : 180
Taille : 400,7 Ko
    Svp .. apres votre permission .. si tu peux uniquement .. voir ces codes de ce fichier RAR .. peut etre je ne savais pas comment l'installer
    Interdiction de choisir un nombre plus de N fois.rar
    Cordialement
    MADA

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re ...

    J'ai sorti la déclaration du tableau de la Sub et l'ai mis au niveau global. il est ainsi initialisé au moment du chargement de ComboBox1 et dispense de résoudre une mise à zéro.

    Par rapport à l'erreur que tu as obtenue, elle est due au fait qu'après l'ajout d'un enregistrement, rien n'est sélectionné dans le ComboBox et le SelectedIndex vaut -1, donc hors des indices possibles pour mon tableau.

    Par ailleurs, il te faut choisir entre "Ignorer et quitter la Sub" et "Informer et quitter la Sub". Dans l'extrait de code suivant, j'ai choisi la 2ème solution mais tu peux toujours en changer.

    Voici les codes ajustés :

    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
    39
    40
    41
    42
    43
        Dim TableDesIndexSelectionnes() As Integer  ' ********************** déclaration du tableau
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myconnection.Open()
            Dim query As String = "select * from TableSection"
            Dim command As OleDbCommand = New OleDbCommand(query, myconnection)
            Dim reader As OleDbDataReader = command.ExecuteReader()
            If reader.HasRows Then
                While reader.Read()
                    ComboBox1.Items.Add(reader("SectionNumber"))
                End While
            End If
     
            ReDim TableDesIndexSelectionnes(ComboBox1.Items.Count - 1)  ' **********************  initialisation du tableau
     
        End Sub
     
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
     
            If ComboBox1.SelectedIndex < 0 Then  ' **********************  éviter la l'indice -1
                Exit Sub
            End If
     
     
            ' Ce tableau est un ensemble de compteurs dont les indices de cette table varient de 0 à Items.Count -1, comme les indices de ComboBox1
            ' A chaque position du tableau se trouve le compteur des sélections de l'Item situé au même indice dans ComboBox1
            ' Ex. Je sélectionne 3 x l'élément d'indice 0 du Combo et 5 x celui de l'indice 3, alors on a :
            ' TableDesIndexSelectionnes(0) vaut 3 et TableDesIndexSelectionnes(3) vaut 5.
     
            ' Eventuellement ignorer la seléction si maximum déjà atteint :  FAUT CHOISIR ENTRE CECI
            'If TableDesIndexSelectionnes(ComboBox1.SelectedIndex) = 5 Then
            '    Exit Sub
            'End If
     
            ' Ou inciter l'utilisateur à choir autre chose :  ET CECI
            If TableDesIndexSelectionnes(ComboBox1.SelectedIndex) = 5 Then
                MessageBox.Show("Maximum de " & ComboBox1.SelectedItem & " atteint. Choisissez une autre valeur.")
                Exit Sub
            End If
     
            TableDesIndexSelectionnes(ComboBox1.SelectedIndex) += 1
     
        End Sub
    ... et les enregistrezments sont effectivement enregistrés dans la DB

    A bientôt,

  5. #5
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut
    Merci maitre
    Merci Phil Rob
    Ca fonctionne tres bien .. et c'est parfaitement resolu
    Je vous trouve toujours dans les moments difficiles
    Tres gentil de votre part
    Amicalement
    MADA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. declarer un nombre plus grand qu'avec int?
    Par menzeli dans le forum C
    Réponses: 14
    Dernier message: 05/01/2007, 00h14
  2. nombre plus present dans un tableau
    Par Hachmoon dans le forum C
    Réponses: 8
    Dernier message: 21/11/2006, 16h21
  3. Réponses: 4
    Dernier message: 11/06/2006, 19h04
  4. [Tableaux] Choisir le nombre de paramètres
    Par MYster dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2005, 20h27
  5. [FLASH MX] Choisir un nombre aléatoire dans une liste
    Par grenatdu55 dans le forum Flash
    Réponses: 4
    Dernier message: 23/04/2005, 21h09

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