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 :

Utilisation de textbox dynamiques pour écrire dans une BDD [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut Utilisation de textbox dynamiques pour écrire dans une BDD
    Bonjour,
    Je génère dynamique des label, des textbox et un button avec ce 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
     
    Dim top As Integer = 40
            Dim a As Integer = 1
            For a = 1 To 3
                Dim labelbox As New System.Windows.Forms.Label
                Dim textbox As New System.Windows.Forms.TextBox
                With labelbox
                    .Name = "NELB" & a
                    .Left = 20
                    .Top = top
                    Select Case a
                        Case Is = 1
                            .Text = "Numéro HCC"
                        Case Is = 2
                            .Text = "Situation"
                        Case Is = 3
                            .Text = "EudraCT"
                    End Select
                End With
                With textbox
                    .Name = "NETB" & a
                    .Left = 150
                    .Top = top - 2
                    .Text = ""
                End With
                top = top + 40
                Me.Controls.Add(labelbox)
                Me.Controls.Add(textbox)
            Next
            Dim bouton As New System.Windows.Forms.Button
            With bouton
                .Name = "TEST"
                .Left = 300
                .Top = 40
                .Text = "Cliquer"
                AddHandler bouton.Click, AddressOf clicbouton
            End With
            Me.Controls.Add(bouton)
    Est-il possible d'utiliser les valeurs saisies dans les textbox comme paramètres d'une requête SQL ?
    Si les textbox étaient statiques, j'utiliserai une requête SQL du type :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO BDD(nom,sexe) VALUES (textBox1.Text, TextBox2.Text)
    Ce que je ne peux pas faire puisque les textbox n'existent pas et ne sont donc pas déclarés.
    Comment faire ?
    D'avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je ne sais pas quelle est ta base de données!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""""mabase.accdb"""" "
     
    Dim connexion As New System.Data.OleDb.OleDbConnection(connectionString)
    connexion.Open()
    Dim requete as string = "INSERT INTO BDD(nom,sexe) VALUES (?,?)"
    Dim commande As System.Data.OleDb.OleDbCommand = New system.Data.OleDb.OleDbCommand(requete , connexion)
    commande.Parameters.AddWithValue("@nom", "Le Noble")
    commande.Parameters.AddWithValue("@sexe", "Masculin")
    commande.ExecuteNonQuery()
    commande.Dispose()
    connexion.Close()
    Si les textbox étaient statiques, j'utiliserai une requête SQL du type :
    Par définition si ils ne sont pas statistiques il sont dynamiques, alors je ne vois pas le problème!
    Dernière modification par Invité ; 16/04/2016 à 16h59.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Bonjour et merci pour votre réponse.
    En fait, le nom et le sexe seront saisis dans des textbox créés dynamiquement.
    Ce que je ne sais pas faire, c'est comment faire pour la valeur saisie dans les textbox dynamiques soit utilisée pour les paramètres nom et sexe.
    D'avance merci
    Et bon dimanche

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il te suffis de créer une sub avec te paramètre! Ta requête ne change pas elle est écrit un fois pour toutes, ce sont les paramètres qui fixe la valeur. Quand tu click sur le bouton valider tu passe la valeurs contenu dans tes contrôles créer dynamiquement et là pour le coup tu les connais!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Maj(ByVal crt1 as string,ByVal Crt2 as string)
    Dim requete as string = "INSERT INTO BDD(nom,sexe) VALUES (?,?)"
    Dim commande As System.Data.OleDb.OleDbCommand = New system.Data.OleDb.OleDbCommand(requete , connexion)
    commande.Parameters.AddWithValue("@nom", Crt1)
    commande.Parameters.AddWithValue("@sexe", Crt2)
    commande.ExecuteNonQuery()
    commande.Dispose()
    End sub
    Code Formulaire : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dub valide_click(?????)
     
    Maj
    (DynamiqueControle1.text,DynamiqueControle2.text)

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Ce qu'il serait bon de savoir c'est :

    1 - A quel moment tu exécutes ta sub MAJ et à quel endroit tu créés dynamiquement tes contrôles, les routines sont-elles localisées au même endroit (même classe) ?
    2 - Est-ce le bouton TEST (que tu créés dynamiquement) qui exécutes ta sub MAJ ?

    Je veux en venir au fait que tes contrôles créés dynamiquement sont déclarés dans la boucle alors ils ne peuvent être accessible depuis l'ensemble de ta classe.
    Donc il faut prévoir de déclarer une List(Of Textbox) et List(Of Label) accessible depuis l'ensemble de ta classe ou créer une classe Shared si ta sub MAJ et la création de tes contrôles ne sont pas dans la même classe. Le but étant de pouvoir récupérer chaque contrôle (ainsi que leur propriété Text) ultérieurement.

    A+

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Merci à vous deux pour vos réponses.
    Je débute à peine et j'avoue ne pas bien saisir ce que vous écrivez.
    Actuellement, je suis sur un projet 'test' pour apprendre.
    Dans un premier temps j'ai essayé et réussi à me connecter à une base de données access pour y lire les champs et renseigner une listview.
    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
    44
    45
    46
    47
    48
    49
    50
    51
    Module Module1
        Function ListerEssai(ByVal Requete)
            'définition de la connexion
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & _
                                                                     Application.StartupPath & "\ListeEssais.accdb")
            'ouverture de la connexion
            Try
                MyConnexion.Open()
                ' définition de la requête
                'Dim requete1 As String = "SELECT * FROM BDD WHERE NumeroHCC=?"
                Dim requete1 As String = Requete
                ' définition de la commande
                Dim Mycommand As OleDbCommand = New OleDbCommand(requete1, MyConnexion)
                ' définition de l'interrogation du paramètre
                'Dim NumeroHCCRech As String = InputBox("Numéro HCC ?")
                ' définition du type de commande
                Mycommand.CommandType = CommandType.Text
                ' lancement de la requête
                'Mycommand.ExecuteNonQuery()
                ' définition du reader
                Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
                ' lecture du reader
                Do While myReader.Read()
                    ' création des items à ajouter à la listview
                    Dim LVI As New ListViewItem
                    ' récupération de l'item dans le reader
                    If myReader.IsDBNull(0) = True Then LVI.Text = "" Else LVI.Text = myReader.GetInt32(0)
                    ' récupération du subitem dans le reader
                    If myReader.IsDBNull(1) = True Then LVI.SubItems.Add("") Else _
                        LVI.SubItems.Add(myReader.GetString(1))
                    ' récupération du subitem dans le reader
                    If myReader.IsDBNull(3) = True Then LVI.SubItems.Add("") Else _
                        LVI.SubItems.Add(myReader.GetString(3))
                    ' récupération du subitem dans le reader
                    If myReader.IsDBNull(4) = True Then LVI.SubItems.Add("") Else _
                        LVI.SubItems.Add(myReader.GetString(4))
                    ' récupération du subitem dans le reader
                    If myReader.IsDBNull(2) = True Then LVI.SubItems.Add("") Else _
                        LVI.SubItems.Add(myReader.GetString(2))
                    ' insertion de l'item et des subitems dans la listview
                    Form1.ListView1.Items.Add(LVI)
                Loop
                ' fermeture du reader
                myReader.Close()
                ' fermeture de la connexion
                MyConnexion.Close()
            Catch ex As OleDbException
                MsgBox(ex.Message)
            End Try
        End Function
    End Module
    Que j'appelle dans une sub liée au clic sur un élément du menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TousLesEssaisToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TousLesEssaisToolStripMenuItem.Click
            Call ListerEssai("SELECT * FROM BDD")
        End Sub
    Dans un second temps, je souhaite écrire dans cette BDD.
    J'utilise ce 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
    Function NouvelEssai(ByVal Requete)
            'définition de la connexion
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & _
                                                                     Application.StartupPath & "\ListeEssais.accdb")
            'ouverture de la connexion
            Try
                MyConnexion.Open()
                ' définition de la requête
                'Dim requete1 As String = "SELECT * FROM BDD WHERE NumeroHCC=?"
                Dim requete1 As String = Requete
                ' définition de la commande
                Dim Mycommand As OleDbCommand = New OleDbCommand(requete1, MyConnexion)
                ' définition de l'interrogation du paramètre
                'Dim NumeroHCCRech As String = InputBox("Numéro HCC ?")
                ' définition du type de commande
                Mycommand.CommandType = CommandType.Text
                ' définition du reader
                Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
                ' lecture du reader
                myReader.Read()
                ' fermeture du reader
                myReader.Close()
                ' fermeture de la connexion
                MyConnexion.Close()
            Catch ex As OleDbException
                MsgBox(ex.Message)
            End Try
        End Function
    Que j'appelle dans une sub liée au clic sur le bouton créé dynamiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub clicbouton()
            Call NouvelEssai("INSERT INTO BDD(NumeroHCC,Situation,EudraCT) VALUES ('test1','test2','test3')")
        End Sub
    Tout cela fonctionne.
    Le code qui crée les textbox, labelbox et le bouton sont dans la public class Form1.
    Les fonctions ListerEssai et NouvelEssai sont dans le module1.
    Ce que je voudrais c'est utiliser les valeurs de NETB1, 2 et 3 à la place du 'test1', 'test2 et 'test3.
    Avec un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim requete as string = "INSERT INTO BDD(NumeroHCC,Situation,EudraCT) VALUES (?,?,?)"
    Dim commande As System.Data.OleDb.OleDbCommand = New system.Data.OleDb.OleDbCommand(requete , connexion)
    commande.Parameters.AddWithValue("@NumeroHCC", NETB1)
    commande.Parameters.AddWithValue("@Situation", NETB2)
    commande.Parameters.AddWithValue("@EudraCT", NETB3)
    Voilà ce que je n'arrive pas à faire.
    Merci++ pour votre aide

  7. #7
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Février 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2014
    Messages : 50
    Points : 97
    Points
    97
    Par défaut
    Voici un exemple pour parcourir des contrôles créés dynamiquement, à adapter à ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                Dim txtTextBox As TextBox = Nothing
     
                For i = 0 To pPanel.Controls.Count - 1
                    If pPanel.Controls.Item(i).GetType.Equals(GetType(TextBox)) AndAlso _
                       CType(pPanel.Controls.Item(i), TextBox).Name.StartsWith = "NETB" Then
                        txtTextBox = pPanel.Controls.Item(i)
                    End If
                Next
     
                MessageBox.Show(txtTextBox.Text)

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Voilà une solution qui fonctionne.
    Je ne sais pas si elle est élégante mais bon, elle fonctionne :
    La fonction dans un module :
    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
    Function NouvelEssai(ByVal Requete As String, ByVal crt1 As String, ByVal crt2 As String, ByVal crt3 As String)
            'définition de la connexion
            Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & _
                                                                     Application.StartupPath & "\ListeEssais.accdb")
            'ouverture de la connexion
            Try
                MyConnexion.Open()
                ' définition de la requête
                'Dim requete1 As String = "SELECT * FROM BDD WHERE NumeroHCC=?"
                Dim requete1 As String = Requete
                ' définition de la commande
                Dim Mycommand As OleDbCommand = New OleDbCommand(requete1, MyConnexion)
                ' définition de l'interrogation du paramètre
                'Dim NumeroHCCRech As String = InputBox("Numéro HCC ?")
                ' définition du type de commande
                Mycommand.CommandType = CommandType.Text
                ' définition des paramètres de la requête
                With Mycommand.Parameters
                    .Add("@NumeroHCC", OleDbType.Char).Value = crt1
                    .Add("@Situation", OleDbType.Char).Value = crt2
                    .Add("@EudraCT", OleDbType.Char).Value = crt3
                End With
                ' lancement de la requête
                'Mycommand.ExecuteNonQuery()
                ' définition du reader
                Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
                ' lecture du reader
                myReader.Read()
                ' fermeture du reader
                myReader.Close()
                ' fermeture de la connexion
                MyConnexion.Close()
            Catch ex As OleDbException
                MsgBox(ex.Message)
            End Try
        End Function
    L'appel de la fonction dans une sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub clicbouton()
     
            Call NouvelEssai("INSERT INTO BDD(NumeroHCC,Situation,EudraCT) VALUES (?,?,?)", DirectCast(Me.Controls("NETB1"), TextBox).Text, _
                    DirectCast(Me.Controls("NETB2"), TextBox).Text, DirectCast(Me.Controls("NETB3"), TextBox).Text)
        End Sub
    Ce qui me manquait c'était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectCast(Me.Controls("NETB1"), TextBox).Text
    Est ce que fonctionner comme ça vous parait bien ?
    Merci

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par FLYeRNeT Voir le message
    Voici un exemple pour parcourir des contrôles créés dynamiquement, à adapter à ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                Dim txtTextBox As TextBox = Nothing
     
                For i = 0 To pPanel.Controls.Count - 1
                    If pPanel.Controls.Item(i).GetType.Equals(GetType(TextBox)) AndAlso _
                       CType(pPanel.Controls.Item(i), TextBox).Name.StartsWith = "NETB" Then
                        txtTextBox = pPanel.Controls.Item(i)
                    End If
                Next
     
                MessageBox.Show(txtTextBox.Text)
    Merci ++

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub clicbouton()
            Maj(NETB1.Text, NETB2.Text,NETB3.Text )
    End Sub
    Sub Maj(ByVal TXT1 As String, ByVal TXT2 As String, ByVal TXT3 As String)
            Dim requete as string = "INSERT INTO BDD(NumeroHCC,Situation,EudraCT) VALUES (?,?,?)"
            Dim commande As System.Data.OleDb.OleDbCommand = New system.Data.OleDb.OleDbCommand(requete , connexion)
            commande.Parameters.AddWithValue("@NumeroHCC", TXT1)
            commande.Parameters.AddWithValue("@Situation", TXT2)
            commande.Parameters.AddWithValue("@EudraCT", TXT3)
    	commande.ExecuteNonQuery()
            commande.Dispose()
     End Sub

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    En fait, si j'écris ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub clicbouton()
            Maj(NETB1.Text, NETB2.Text,NETB3.Text )
    End Sub
    Le système me dit que NETB1 n'est pas déclaré (puisqu'il est créé dynamiquement).

  12. #12
    Invité
    Invité(e)
    Par défaut
    tu as bien créé dynamiquement Me.Controls("NETB1") ? nom

    Code Contrôle dynamique : Sélectionner tout - Visualiser dans une fenêtre à part
    Maj( Me.Controls("NETB1").Text,  Me.Controls("NETB2").Text, Me.Controls("NETB3").Text )

  13. #13
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    A la création de tes contrôles tu peux associer leurs événements à des méthodes qui effectueront le traitement de la saisie. Ainsi tu pourras récupérer l'objet ayant été modifié ou cliqué et y faire le traitement approprié. C'est, selon moi, plus propre qu'une parcours des contrôles existant (à un instant t donc).

    Une autre question à se poser est pourquoi choisir de créer tes contrôles dynamiquement? Cela complexifie le code pour "pas grand chose".

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Je mets le fil en résolu.
    Merci à tous pour votre aide qui m'a permis de progresser.
    A bientôt pour une nouvelle difficulté !

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

Discussions similaires

  1. [C#][Excel] Problème pour écrire dans une cellule
    Par MoscoBlade dans le forum C#
    Réponses: 1
    Dernier message: 24/02/2010, 16h54
  2. [MySQL] fonction implode pour écrire dans une BD
    Par tinkerbell dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 05/05/2009, 18h17
  3. Incrémenter une lettre pour enregistrement dans une bdd
    Par baggie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2008, 16h26
  4. Question simple pour écrire dans une File
    Par HeyItsIan dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2007, 01h40
  5. Réponses: 3
    Dernier message: 01/02/2006, 21h31

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