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 :

Remplir les bases de données via un formulaire


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 129
    Points : 55
    Points
    55
    Par défaut Remplir les bases de données via un formulaire
    Hello!

    J'ai une question peut-être simple, mais vu que je débute...

    J'ai créé une application avec un Form, des contrôles et 2 tables qui sont liées. Je souhaite maintenant créer un bouton qui, lorsque l'on clique dessus, intégrera les données entrées dans le formulaire dans la base de données.
    Je sais faire ça sous Excel, mais là, sous vb.net, je ne sais pas.

    Merci d'avance pour vos contributions!

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Points : 312
    Points
    312
    Par défaut
    Utilise le : DataSet

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 28
    Points
    28
    Par défaut
    Salut,gangsterus

    si tu trouves la réponse à ton probleme, cela m'interesse fortement.

    J'essaie de faire la même chose que toi en utilsant un dataset, mais je n'y parviens pas avec plusieurs tables ..

    eric

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Même réponse donc eric :
    http://www.developpez.net/forums/sho...d.php?t=457991

    Cdt.

  5. #5
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Slt
    tout dépend cmt tu souhaites t'y prendre
    tu peux fonctionner via requête sql

    tu crées ta requête pour une insertion avec les champs dont tu as besoin
    et ensuite tu utilises OleDbCommand, il a besoin comme paramètre un string (ta requête sql) et d'un OleDbConnection pour réaliser la connexion à 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
    13
     
    Public Function querySql(ByVal con As OleDbConnection, ByVal sSql As String) As Integer
            Dim cmd As OleDbCommand
            cmd = New OleDbCommand(sSql, con)
            Try
                cmd.CommandText = sSql
                cmd.CommandType = CommandType.Text
                Return cmd.ExecuteNonQuery
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Return 0
            End Try
        End Function

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour tout le monde,

    Je vois qu'on est trois à chercher un même problème, puisque moi aussi j'essaye de chercher comment insérer des données dans une table, par le biais du code. Et je ne trouve pas depuis déjà environ une semaine de recherche

    Si ce problème se résoud, il fera donc avancer beaucoup de monde d'un seul coup.

    Sinon, Jaduta, j'ai pas compris ta ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.CommandType = CommandType.Text
    Et comment tu fais pour appeler ta fonction, et tous les paramètres qui vont autour... Hé oui, ça fait beaucoup de choses à mettre en place !

    Harry Potter

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    Bonjour a tous,

    Voila comment je procede :

    D'abord creer une class DataAccess.vb contenant 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
     
    Imports System.data.SqlClient
     
    Public Class DataAccess
    'Ici vous mettez la methode de connexion, perso j'utilise une sql avec les authentifications windows, mais vous pouvez la modifier tres simplement pour que vous vous connectiez via un compte d'authentification sql, cest tres simple ya des exemples dans la faq et dans les tuto de ce site....
        Private Const _connStr As String = "Data Source=VotreServeur;Initial Catalog=Intime;Integrated Security=True"
        Private _conn As SqlConnection
     
        Public Sub New()
            _conn = New SqlConnection(_connStr)
        End Sub
     
        Public ReadOnly Property connection() As SqlConnection
            Get
                Return _conn
            End Get
        End Property
     
        Public Function sqlQueryDb(ByVal sqlCmd As SqlCommand, ByVal closeConnection As Boolean) As DataTable
            Try
                If sqlCmd.Connection.State = ConnectionState.Closed Then sqlCmd.Connection.Open()
     
                Dim sqlQuery As New SqlDataAdapter(sqlCmd)
                Dim dtData As New DataTable
                sqlQuery.Fill(dtData)
                Return dtData
     
            Catch ex As SqlException : Throw
            Catch ex As Exception : Throw
            Finally
                If closeConnection Then sqlCmd.Connection.Close()
                sqlCmd.Dispose() 'duno why am disposing, microsoft told me to do it :)
            End Try
        End Function
     
    End Class
    Cela va permettre de creer automatiquement votre datatable, et ainsi pouvoir reustiliser votre connexion un peu partout dans le code en appelant simplement la classe et non en reecrivant tout le code (chui un peu feignant et c est plus propre)

    Maintenant vous cree une class qui va vous permettre de stocker les fonctions que vous voulez utiliser dans votre form
    Vous creez la classe MyFormulaire.vb

    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
    52
    53
    54
    55
     
    Imports System.Data.SqlClient
     
    Public Class MyFormulaire
     
        Private _da As DataAccess
        Private _Nom, _Prenom As String
     
     
        ''' <summary>
        ''' Ma premiere classe d insertion 
        ''' </summary>
        ''' <param name="Nom"></param>
        ''' <param name="Prenom"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal Nom As String, ByVal Prenom As String)
     
            _da = New DataAccess
            _Nom = Nom
            _Prenom = Prenom
     
        End Sub
     
        Public Function Insertdata() As DataView
            'ici je fais une requete d insertion basic en passant en parametres nom et prenom de mon formulaire
            Dim sql As String = "insert into MaTableSQL VALUES (@Nom, @Prenom)"
            Dim cmd As New SqlCommand(sql, _da.connection)
            cmd.Parameters.AddWithValue("@Nom", _Nom)
            cmd.Parameters.AddWithValue("@Prenom", _Prenom)
     
            Return _da.sqlQueryDb(cmd, True).DefaultView
     
        End Function
     
    #Region "Properties"
        Public Property Nom() As Integer
            Get
                Return _Nom
            End Get
            Set(ByVal value As Integer)
                _Nom = value
            End Set
        End Property
     
        Public Property Prenom() As Integer
            Get
                Return _Prenom
            End Get
            Set(ByVal value As Integer)
                _Prenom = value
            End Set
        End Property
     
    #End Region
    End Class
    Maintenant que ces deux classes sont crees, on va pouvoir les utiliser dans la forme.

    Donc vous creez une windows form frm_Formulaire avec deux textbox
    txtNom et txtPrenom
    et un bouton btnOK

    Maintenant vous double clique sur ok, et vous arrivez sur l evet button click qui permet de mettre du code derriere le fait d appuyer sur le bouton ok.

    Vous collez ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class frm_Formulaire
     
    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
     
    Dim _InsertForm As New MyFormulaire(txtNom.text, txtPrenom.text)
    _InsertForm.InsertData()
     
        End Sub
     
     
    End Class
    Voila normalement ca devrait inserer une ligne avec nom , prenom dans votre table......

    J'espere que ca vous aide

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse Nico Pouchet !

    Pour ma part, il faudrait juste que je regarde d'un peu plus près, parce que y'a plein de trucs que je ne comprends pas là dedans. Je suis pommé dans les détails...

    Entre autres, j'ai pas compris pourquoi tu mets un underscore _ avant le nom d'une variable. Ca sert à quoi ?

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    En soit ca sert pas a grand chose, cela sert simplement a differencier les variables ke tu balades dans ta classe ( celles avec un _ ) et les variables fixes, sans _

    Cela permet de savoir ou tu en es dans ton code.

    Apres sur l utilisation de plusieurs classe c est pas oblige, mais ces codes permettent d'avoir une solution claire,

    Tu distingue l'acces, les fonctions et la forme en 3 classes differentes, ca te permet d avoir un code plus facile a lire pour quelqu'un qui serait amener a travailler dessus apres toi.

    Mais en meme temps avec la classe dataaccess, tu as l avantage de pouvoir tres facilement lier une requete sql a une datagridview sans changer le code... Bref ca permet de faire pas mal de choses en meme temps avec une seule classe, ce qui est vraiment utile

    Si tu as des doutes sur le code et si ca ne marche pas ( on ne sait jamais, j ai pas tester , j ai fait une extraction vite fait de mon code pour l adapter a ton cas) hesites pas

    @+

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nico_pouchet Voir le message
    tu as l avantage de pouvoir tres facilement lier une requete sql a une datagridview
    On est obligé de faire une datagridview pour insérer des données dans une table ?

    Sinon, sur ce lien http://www.developpez.net/forums/sho...d.php?t=457991, j'y ai mis quelques exemples de codes dont je dispose qui ne marchent pas.

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    On est obligé de faire une datagridview pour insérer des données dans une table ?
    Non on est pas oblige du tout, il te suffit de creer une sqlconnection, une sqlcommand et de lancer le tout, ca se fait en 5 lignes de codes, tu as pas mal d exemples dans la faq vb.net

    Cependant en utilisant cette classe, tu peux faire tes requetes, tu peux faire des requetes et recuperer un datable qui va te servir a remplir un datagridview enfin utiliser une classe te permet de reutiliser un peu partout la meme fonction sans avoir a reecrire tout le code, tu as jsute besoin de lappeler.

    Donc ca presente des avantages au niveau lisibilite de ton code surtout pour kelkun qui passe derriere.

    @+

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    Bon sinon si vous voulez quelque chose de plus simple et qui marche (ca vient du faq vb.net de ce site ....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim connectString As String = "database=test;server=SRV01;User ID=samfisher;pwd=echelon"
    Dim connection As SqlConnection = New SqlConnection(connectString)
    connection.Open()
    Dim command As SqlCommand = New SqlCommand("INSERT INTO MaTable VALUES (Nom, Prenom)", connection)
    Dim reader As SqlDataReader = command.ExecuteReader
     
    While reader.Read
     
    End While
    reader.Close()
    connection.Close()
    Voila une methode d'insertion de donnees...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Quand j'exécute cela sur clic d'un bouton, ça me met toujours ce message d'erreur moi :
    'Violation de la contrainte PRIMARY KEY 'PK_UTILISATEUR_1'. Impossible d'insérer une clé en double dans l'objet 'dbo.utilisateur'.
    L'instruction a été arrêtée.'
    Et il sélectionne en jaune cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim reader As SqlDataReader = command.ExecuteReader

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par Harry_Potter Voir le message
    Quand j'exécute cela sur clic d'un bouton, ça me met toujours ce message d'erreur moi :
    'Violation de la contrainte PRIMARY KEY 'PK_UTILISATEUR_1'. Impossible d'insérer une clé en double dans l'objet 'dbo.utilisateur'.
    L'instruction a été arrêtée.'
    Et il sélectionne en jaune cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim reader As SqlDataReader = command.ExecuteReader
    Ok alors la le probleme ne vient pas du code mais de la config de ta base sql. Je m'explique, une Primary key en sql est un element que tu ne peux avoir qu'une seule fois dans ta base sql.

    Je ne sais pas ce que tu mets comme valeur dans PK_UTILISATEUR_1 mais tu l as mets en double, c est pour ca qu il ne l'accepte pas. Dans le design de table, retire le fait que PK_UTILISATEUR_1 soit une cle primaire et retest

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ah oui tu as raison !!

    Je retire la clé primaire (en enlevant toutes les relations en même temps sur cette table), et ça passe... Ca marche pas comme je veux, forcément, mais ça passe. Par contre, j'ai pas compris ce qu'il a fait, mais j'ai compris pourquoi il ne voulait pas violé une clé, parce que la ligne (1,test) s'est inséré 3 fois !!!
    Voilà mon code que j'ai fait exécuter (pour tester l'insertion) :
    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
            Dim cmSQL As SqlCommand
            Dim DataAdapter As SqlDataAdapter
            Dim DataSet As New DataSet()
            Dim strSQL As String
            Dim DataTable As DataTable
            Dim cmBuilder As SqlCommandBuilder
     
            strSQL = "insert into utilisateur(numutilisateur, login) values(1, 'test')"
            cnSQL.open()
            cmSQL = New SqlCommand(strSQL)
            DataAdapter = New SqlDataAdapter(cmSQL)
            cmSQL.Connection() = cnSQL
            DataAdapter.Fill(DataSet, "utilisateur")
            DataTable = DataSet.Tables("utilisateur")
     
            cmBuilder = New SqlCommandBuilder(DataAdapter)
     
            cmSQL.ExecuteNonQuery()
     
            cnSQL.close()
     
            MsgBox("Opération effectuée", MsgBoxStyle.Information, "ok")
    Je teste en mettant la ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'cmSQL.ExecuteNonQuery()
    ... en commentaire, et là surprise ! Il ne me fait qu'une seule insertion !!

    J'ai donc remis la clé primaire, les relations. Re-test et hop ca passe.
    Merci beaucoup Nico

    Du coup, la config de ma base est correct. C'était bien le code qui posait problème.

    Harry Potter

    P.S. : Je savais pourtant ce que c'était les Primary Key.

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    Content que tu es trouve,

    Cependant, pourquoi utilises tu des dataset et consort pour faire une simple insertion ?

    Tu peux te contenter de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim connectString As String = "database=test;server=SRV01;User ID=samfisher;pwd=echelon" 'ConnectString est ta chaine de connexion donc tu mets ce que tu veux dedans...
    Dim connection As SqlConnection = New SqlConnection(connectString)
    connection.Open()
    Dim command As SqlCommand = New SqlCommand("insert into utilisateur(numutilisateur, login) values(1, 'test')", connection)
    Dim reader As SqlDataReader = command.ExecuteReader
     
    While reader.Read
     
    End While
    reader.Close()
    connection.Close() 
    MsgBox("Opération effectuée", MsgBoxStyle.Information, "ok")
    Ca te fera un insert aussi.... et c est un peu plus simple comme maniere de proceder.

    Si par contre tu tiens a recuperer une datatable pour pouvoir lier l ensemble a une datagridview, je te conseillerai d utiliser le code que j'ai inscrit plus haut qui fait appel a 3 classes differentes. Tu vas voir c est assez puissant ...

    Bref a toi de voir
    @+

  17. #17
    Invité
    Invité(e)
    Par défaut
    Coucou Nico,

    Heu, en fait j'ai repris un ancien code, donc pour ça que j'utilise un dataset, et... C'est quoi un consort ?

    Sinon, cette insertion n'était qu'un simple test pour mieux comprendre comment l'effectuer.

    Sinon, Olsimare m'a peut-être passé une solution encore plus simple, qui marche aussi : http://www.developpez.net/forums/sho...d.php?t=457991

    A +

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 83
    Points : 75
    Points
    75
    Par défaut
    Ok,

    Bon le principal c est que ca marche, maintenant c est a toi de faire ta tambouille pour essayer d avoir le code le plus simple et le plus clair possible.

    Dans ce sens, je te conseil donc de stocker tes futures fonctions de connexion dans des classes et de les appeler dans ton code. Tu conserveras un code simple et tu economiseras un bon nombre de lignes de codes.

    Bon courage pour la suite

    @+

  19. #19
    Invité
    Invité(e)
    Par défaut
    Merci mais... Comment fait t'on pour appeler des classes dans un autre module ?

  20. #20
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Pour Harry_Potter

    la ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmd.CommandType = CommandType.Text
    est une propriété de la classe pour définir le type en "Text" - tout simplement

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2015, 22h07
  2. [MySQL] Insérer des infos dans ma base de données via un formulaire
    Par mOscar007 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/12/2013, 18h32
  3. Remplir une base de données via un tableau dynamique
    Par tikigod dans le forum Langage
    Réponses: 6
    Dernier message: 13/05/2013, 13h45
  4. Accès aux bases de données via les objets de Borland (Bdpxx)
    Par agodinasandrien dans le forum Delphi .NET
    Réponses: 9
    Dernier message: 26/09/2005, 14h00

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