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 une base de données ACCESS à partir des textBox


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Remplir une base de données ACCESS à partir des textBox
    Bonjour,

    J'utilise Visual Studio 2010 (VB.Net) et une base ACCESS .
    J'ai essayé pas mal de fois d'insérer des données à partir des champs textBox et le problème revient à comment se reférer aux valeurs textuelles qui existent dans les textBox.
    J'ai utilisé 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
    Dim cmd As OleDb.OleDbCommand 
    Dim chaine As String 
    Dim conection As New OleDb.OleDbConnection 
     
    conection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\ROLAND KOFFI\Documents\Visual Studio 2010\Projects\WindowsApplication3_LOYERS\WindowsApplication3_LOYERS\GestionLoyers1.accdb" 
     
    conection.Open() 
     
    chaine = "INSERT INTO LOCATAIRES(Nom, Adresse,Ville,Pays) VALUES(' " & TextBox1.Text & " ',' " & TextBox2.Text & " ', ' " & TextBox3.Text & " ', ' " & TextBox4.Text & " ')" 
     
    cmd = New OleDb.OleDbCommand(chaine, conection) 
    cmd.ExecuteNonQuery() 
     
    conection.Close()
    Je reçois le message d'érreur suivant lorsque j'exécute les procédures:
    Eerreur de syntaxe( opérateurs absents) dans l'expression.

    Si quelqu'un peut m'aider ça m'aiderait à avancer.
    Merci d'avance à vous!

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Il faut utiliser les requêtes paramétrées. Voir Tuto ou Faq.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    salam
    faire passer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim cmd As New OleDb.OleDbCommand
                Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; DatSource=" & Application.StartupPath & "\GestionLoyers1.mdb"
                Dim conection As New OleDbConnection(ConStr)
                cmd.Connection = conection
                cmd.CommandType = CommandType.Text
                cmd.CommandText = "INSERT INTO LOCATAIRES(Nom, Adresse,Ville,Pays)values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "') "
                conection.Open()
                cmd.ExecuteNonQuery()
                conection.Close()


    avant tu doit déclarer au debut du code de la forme et tu places ta base du donnée au dossier Bin/debug mais avant tu doit convertir la base en .mdb(2003)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1

  4. #4
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    salam
    faire voir ce exemple ci joint
    l'exemple est bien testé ,il est fonctionnel
    Fichiers attachés Fichiers attachés

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par bijbaj Voir le message
    salam
    faire passer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim cmd As New OleDb.OleDbCommand
                Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; DatSource=" & Application.StartupPath & "\GestionLoyers1.mdb"
                Dim conection As New OleDbConnection(ConStr)
                cmd.Connection = conection
                cmd.CommandType = CommandType.Text
                cmd.CommandText = "INSERT INTO LOCATAIRES(Nom, Adresse,Ville,Pays)values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "') "
                conection.Open()
                cmd.ExecuteNonQuery()
                conection.Close()
    C'est une mauvaise solution, même si elle est fonctionnelle.
    Par exemple, s'il y a une cote ( ' ) dans le nom (ex: O'Hara) la requête sera fausse et générera une erreur.
    Il est donc fortement conseillé d'utiliser les requêtes paramétrées.

    Citation Envoyé par bijbaj Voir le message
    ... mais avant tu doit convertir la base en .mdb(2003)
    Mauvais conseil que de convertir vers une version antèrieure.
    J'utilise access2007 et cela fonctionne parfaitement avec PROVIDER=Microsoft.ACE.OLEDB.12.0.

    Je n'avais pas donné directement de solution afin que strafor cherche un peu (on apprend mieux et on retient mieux ainsi)
    Voici un exemple d'utilisation.
    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
        Sub InsertLocataire()
            Dim MaRequete As String = "INSERT INTO LOCATAIRES (Nom, Adresse,Ville,Pays) VALUES (?,?,?,?)"
            Dim DataSource = "C:\Users\ROLAND KOFFI\Documents\Visual Studio 2010\Projects\WindowsApplication3_LOYERS\WindowsApplication3_LOYERS\GestionLoyers1.accdb"
            Using cn As New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source =" & DataSource), cmd As New OleDbCommand(MaRequete, cn)
                With cmd.Parameters
                    .AddWithValue("?", Me.txtNom.Text)
                    .AddWithValue("?", Me.txtAdresse.Text)
                    .AddWithValue("?", Me.txtVille.Text)
                    .AddWithValue("?", Me.txtPays.Text)
                End With
                Try
                    cn.Open()
                    cmd.ExecuteNonQuery()
                Catch ex As Exception
                    MsgBox(ex.ToString)
                End Try
            End Using
        End Sub
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par rv26t Voir le message
    C'est une mauvaise solution, même si elle est fonctionnelle.
    Par exemple, s'il y a une cote ( ' ) dans le nom (ex: O'Hara) la requête sera fausse et générera une erreur.
    Il est donc fortement conseillé d'utiliser les requêtes paramétrées.


    Mauvais conseil que de convertir vers une version antèrieure.
    J'utilise access2007 et cela fonctionne parfaitement avec PROVIDER=Microsoft.ACE.OLEDB.12.0.

    Je n'avais pas donné directement de solution afin que strafor cherche un peu (on apprend mieux et on retient mieux ainsi)
    Voici un exemple d'utilisation.
    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
        Sub InsertLocataire()
            Dim MaRequete As String = "INSERT INTO LOCATAIRES (Nom, Adresse,Ville,Pays) VALUES (?,?,?,?)"
            Dim DataSource = "C:\Users\ROLAND KOFFI\Documents\Visual Studio 2010\Projects\WindowsApplication3_LOYERS\WindowsApplication3_LOYERS\GestionLoyers1.accdb"
            Using cn As New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source =" & DataSource), cmd As New OleDbCommand(MaRequete, cn)
                With cmd.Parameters
                    .AddWithValue("?", Me.txtNom.Text)
                    .AddWithValue("?", Me.txtAdresse.Text)
                    .AddWithValue("?", Me.txtVille.Text)
                    .AddWithValue("?", Me.txtPays.Text)
                End With
                Try
                    cn.Open()
                    cmd.ExecuteNonQuery()
                Catch ex As Exception
                    MsgBox(ex.ToString)
                End Try
            End Using
        End Sub
    oui tt ce qui tu'a dis est parfait , je lui donné une simple solution c'est tt.
    alors tu a oublie de fermer la connection cn.close
    apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    cn.Open()
                    cmd.ExecuteNonQuery()
                    cn.close ' <====
                Catch ex As Exception
                    MsgBox(ex.ToString)

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par bijbaj Voir le message
    tu a oublie de fermer la connection cn.close
    apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    cn.Open()
                    cmd.ExecuteNonQuery()
                    cn.close
                Catch ex As Exception
                    MsgBox(ex.ToString)
    Non je ne l'ai pas oublié.
    L'utilisation du Using avec la connexion fera que lorsque l'on passera par le End Using la connexion sera fermée. Donc inutile de rajouter la méthode close.
    De plus, (tel que tu l'as écrit) si tu as une erreur sur ta commande cmd.ExecuteNonQuery (ce qui peut arriver) tu passeras directement dans le Catch, et donc tu n'exécuteras pas la méthode close.
    Avec le Using End Using tu assures ainsi la fermeture de ta connexion (quoi qu'il arrive — erreur ou pas).
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2008, 20h38
  2. Réponses: 1
    Dernier message: 17/04/2008, 09h36
  3. Comment remplir une base de donnée Access ?
    Par k_boy dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/12/2007, 22h56
  4. Réponses: 1
    Dernier message: 04/09/2007, 12h04
  5. Réponses: 3
    Dernier message: 13/08/2006, 10h50

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