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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    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 confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    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
    Membre Expert
    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
    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 confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    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

+ 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