Base de données SQL et VB Net [Résolu]

Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- - Dernière réponse : cs_Megafan
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
- 13 avril 2011 à 08:36
bonjour à tous

Je travaille sous VB Net 2010 version Express sous Windows Seven
Dans un de mes projets j'ai besoin d'une base de données
J'ai choisi SQL Server
Dans mon projet j'ai ajouté ma base en local ainsi qu'un DataSet
Le Dataset ne contient qu'une table appelée PRATICIENS avec une seule Row appelée NOM
Au Form_Load je veux charger la combobox txtDocteur par le contenu de ma base
Si je tape dans ma combobox un nouveau nom La sub TxtDocteur_Validating doit ouvrir ma base de données et enregistrer ce nouveau nom
Même avec l'excellent cours sur VB net PLASSERE/Developpez.com je n'y arrive pas

Ci-joint le code d'une Form de test pour en cas de succes l'intéger dans un plus gros projet

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private MyConnexion As SqlConnection
    Private Mycommand As SqlCommand
    Private ObjetDataSet As New DataSet() 'Attention au New
    Private ObjetDataAdapter As SqlDataAdapter
    Private ObjetCommandBuilder As SqlCommandBuilder
    Private ObjetDataRow As DataRow
    Private ObjetDataTable As DataTable


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' Ouvrir la base de données
        Connecter()
        Mycommand.CommandText = "SELECT PRATICIEN FROM PRATICIENS"
        Dim myReader As SqlDataReader = Mycommand.ExecuteReader()
        Do While myReader.Read()
            txtdocteur.Items.Add(myReader.GetString(0))
        Loop
        myReader.Close()
        MyConnexion.Close()

    End Sub

    Private Sub txtdocteur_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtdocteur.Validating

        txtdocteur.Text = txtdocteur.Text.ToUpper
        Txtprenom.Focus()

        ' Mise à jour base de données
        Connecter()
        ObjetDataRow = ObjetDataSet.Tables("PRATICIENS").NewRow()
        ObjetDataRow("Nom") = txtdocteur.Text
        ObjetDataSet.Tables("PRATICIENS").Rows.Add(ObjetDataRow)

        'Pour modifier les valeurs changées dans le DataAdapter
        ObjetCommandBuilder = New SqlCommandBuilder(ObjetDataAdapter)

        'Mise à jour
        ObjetDataAdapter.Update(ObjetDataSet, "PRATICIENS")

        'On vide le DataSet et on le 'recharge' de nouveau.
        ObjetDataSet.Clear()
        ObjetDataAdapter.Fill(ObjetDataSet, "PRATICIENS")
        ObjetDataTable = ObjetDataSet.Tables("PRATICIENS")

        ' ferme la connexion
        MyConnexion.Close()

    End Sub

    Private Sub Connecter()
        ' Ouverture de la base de données

        Dim MyConnexion = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
        MyConnexion.Open()
        Mycommand = MyConnexion.CreateCommand()


    End Sub

End Class


Merci à tous ceux qui liront ce message et encore plus à ceux qui m'orienteront vers une solution valable
Au plaisir de vous lire


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
3
Merci
Salut!!

Bon voici une solution parmi tant d'autre:
Private con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\foro.accdb")
    Private cmd As New OleDbCommand(""SELECT PRATICIEN FROM PRATICIENS"", con)
    Private rd As OleDbDataReader

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            con.Open()
            rd = cmd.ExecuteReader
            While rd.Read
                ComboBox1.Items.Add(rd(0))
            End While
            con.Close()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub txtdocteur_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtdocteur.Validating
        Dim sqltxt As String = "Insert into Essai values('" + ComboBox1.Text.ToUpper + "')"
        Dim cmd As New OleDbCommand(sqltxt , con)
        Try
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
        Catch ex As Exception

        End Try

    End Sub


Ce petit bout de code testé devrait te dépanner...
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0

Merci NSUADI 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de NSUADI
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
Désolé il faut lire : Le Dataset ne contient qu'une table appelée PRATICIENS avec une seul champ appelée NOM

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
Bonjour,
Pourquoi passer par un dataset pour ajouter un enregistrement à la table ?
faites un simple INSERT sur la table puis au pire rechargez votre dataset.
Commenter la réponse de cs_Megafan
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
Salut Megafan

Merci pour ta réponse
Je vais essayer

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
Salut à tous

Je n'arrive à rien
Même si ma base est vide (la table Praticiens) la SUB TxtDocteur_Validating devrait m'inscrire dans la table le nom tapé dans TxtDocteur ( c'est une combobox).
ensuite après un nouveau lancement du projet je devrais retrouver le nom du docteur dans les items de la Combobox car chargé depuis la base de données par le Form_Load

Cela m'affiche bien la Form mais avec une Combobox vide
Est-ce l'enregistrement ou le chargement qui "merde" ? J'en sais rien

Un débutant en base de données qui appelle au secours

Merci bien pour vos réponses

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
Vérifie tout simplement dans la table si l'enregistrement se fait bien...

Ce bout de code doit ajouter un enregistrement

Dim MyConnexion = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
MyConnexion.Open()
Dim Mycommand as SqlCommand=New SqlCommand("INSERT INTO Praticiens (Praticien) VALUES ('test'),MyConnexion)
Mycommand ExecuteNonQuery()
MyConnexion.Close()
Commenter la réponse de cs_Megafan
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
txtdocteur.Items.Add(myReader.GetString(0))

utilise plutôt

txtdocteur.Items.Add(myReader("Praticien").tostring)

et si tu as besoin de récupérer l'id (en cas de doublon sur le nom)

txtdocteur.Items.Add(new ListItem(myReader("Praticien").tostring,myReader("IdPraticien").tostring)
Commenter la réponse de cs_Megafan
Messages postés
6
Date d'inscription
vendredi 1 avril 2011
Dernière intervention
11 juillet 2011
0
Merci
je veux s'il veux plait le code de location de voiture en language vb 2008 en relation avec sql 2008 et merci
Commenter la réponse de cs_Soukainaaa
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
0
Merci
 Private cmd As New OleDbCommand("SELECT PRATICIEN FROM PRATICIENS", con)


@Soukainaaa:
t'es mal barré,je pense que tu devrais faire un tour ici,ça t'aidera énormément!!
Commenter la réponse de NSUADI
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
Il est clair que ce code n'est pas vraiment adapté à une connexion de base SQL Server


Megafan
Développeur de http://www.o10c.eu
Commenter la réponse de cs_Megafan
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
0
Merci
Merci à tous

Je me suis servi du code de NSUADI avec une BDD Access 2007
Reste à dire à mon projet que la BDD access se trouve dans l'Application.StartPath du projet

Encore merci


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
0
Merci
Salut,
en effet,ce n'est pas approprié pour une base SqlServer mais bon il n'y a pas grand chose qui change,le cpde est le même on utilise juste les classes adaptées pour SqlServer et c'est tout,ce qui donnerai un truc du genre:
Imports System.Data.SqlClient
Public Class Form1
    Private con As New SqlConnection("Data Source=ICONIC_D-PC\SQLEXPRESS;Initial Catalog=Essai;Integrated Security=True")
    Private cmd As New SqlCommand("select Name from Essai", con)
    Private rd As SqlDataReader

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            con.Open()
            rd = cmd.ExecuteReader
            While rd.Read
                ComboBox1.Items.Add(rd(0))
            End While
            con.Close()
        Catch ex As Exception
            Debug.Print(ex.ToString)
        End Try
       
    End Sub


    Private Sub ComboBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboBox1.Validating
        Dim h As String = "Insert into Essai values('" + ComboBox1.Text.ToUpper + "')"
        Dim cmd2 As New SqlCommand(h, con)
        Try
            con.Open()
            cmd2.ExecuteNonQuery()
            con.Close()
        Catch ex As Exception
        End Try
        
    End Sub

End Class

Voilà,c'est réglé!!
Merci @Megafan pour la remarque,il était tard et j'ai pas été assez pointilleux sur le coup
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0
Commenter la réponse de NSUADI
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
Pas grave, mais juste une question :
pourquoi utiliser
ComboBox1.Items.Add(rd(0))


alors que

ComboBox1.Items.Add(rd("Name").ToString)


est plus sympa non ?


Megafan

Développeur de http://www.o10c.eu


La nouvelle référence en matière de jeu de stratégie spatiale.
Commenter la réponse de cs_Megafan
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
0
Merci
Salut,

je préfère l'index puisque avec le nom,il y a un risque de se tromper mais bon chacun fait comme il le sent et puis bon comme il renvoie qu'une seule colonne,c'est bien plus simple à mes yeux le 0 plutôt que le nom de la colonne...

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...

Visual Basic .Net is the best
and vb6.0
Commenter la réponse de NSUADI
Messages postés
390
Date d'inscription
dimanche 7 avril 2002
Dernière intervention
23 septembre 2016
0
Merci
Si il y'a moins de risque de se tromper avec l'index plutôt qu'avec le nom de champ, je veux bien te croire.

Megafan

Développeur de http://www.o10c.eu http://www.o10c.eu


La nouvelle référence en matière de jeu de stratégie spatiale.
Commenter la réponse de cs_Megafan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.