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 :

Erreur Syntaxe commande SQL pour maj un fichier Excel


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Erreur Syntaxe commande SQL pour maj un fichier Excel
    Bonjour à tous,

    Je m'excuse d'avance si ma demande est vraiment novice. Je débute tout juste dans la manipulation de données par commande SQL.

    Contexte :
    J'ai un fichier EXCEL qui me sert de base de données. J'ai plusieurs feuilles représentants mes tables.

    J'aimerai mettre à jour ma table "Base Identification" et les champs qui lui sont associés : [Prénom_Sources], [Nom_Sources], [N°_Compte], [Banque_Profil].
    => Je sais extraire l'information et la mettre dans un DataGridView notamment mais pas de mettre à jour la base source.

    J'ai écrit le bout de code ci-dessous :
    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
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim sqll As String
     
            FichierSource = Application.StartupPath & "\Base Utilisateur\Base de données.xlsx"
            ConnectionFichierSource = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + FichierSource + ";Extended Properties='Excel 12.0;HDR=NO'")
            ConnectionFichierSource.Open()
     
            sqll = "INSERT INTO [Base Identification$]([Prénom_Sources], [Nom_Sources], [N°_Compte], [Banque_Profil])" &
                        "values(?,?,?,?)"
     
            Dim cmdd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sqll, ConnectionFichierSource)
            cmdd.Parameters.Add(New OleDb.OleDbParameter("Prénom_Sources", CType(Me.TextBox2.Text, String)))
            cmdd.Parameters.Add(New OleDb.OleDbParameter("Nom_Sources", CType(Me.TextBox1.Text, String)))
            cmdd.Parameters.Add(New OleDb.OleDbParameter("N°_Compte", CType(Me.TextBox4.Text, String)))
            cmdd.Parameters.Add(New OleDb.OleDbParameter("Banque_Profil", CType(Me.TextBox3.Text, String)))
     
            'Mise à jour des données
            cmdd.ExecuteNonQuery()
            cmdd.Dispose()
     
            'Fermeture de la source
            ConnectionFichierSource.Close()
    J'ai une erreur de syntaxe au niveau de l'écriture de ma requête : sqll => Auriez-vous une idée?

    Merci beaucoup pour votre aide.

    Bien à vous.

  2. #2
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par Phirexian Voir le message
    (...)
    Contexte :
    J'ai un fichier EXCEL qui me sert de base de données. J'ai plusieurs feuilles représentants mes tables.
    (...)
    Salut,
    Pourquoi ne pas utiliser un vrai SGBD au lieu d'Excel qui n'est pas fait pour cela ?
    Ton application trouvera très vite des limites et alors tu devras tout recoder. Je te conseil d'utiliser Access ou SQL Server par exemple.
    Merci de ainsi que d'utiliser les boutons et

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour Merci pour le retour rapide.

    Pour le moment j'ai démarré cette application via Excel. Je progresse petit à petit.

    Vous avez parfaitement raison pour l'utilisation d'Access mais pour le moment je ne suis pas du tout formé à cet outil.

    Je ne sais pas aujourd'hui comment remplir une base excel n'i l'exploité.

    Pour l'instant est ce jouable de m'aider pour travailler dans EXCEL dans un premier temps?

    Donc comment je devrais ré écrire ma requête en ce sens?

    Merci d'avance.

  4. #4
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par Phirexian Voir le message
    Vous avez parfaitement raison pour l'utilisation d'Access mais pour le moment je ne suis pas du tout formé à cet outil.

    Je ne sais pas aujourd'hui comment remplir une base excel n'i l'exploité.

    Voici les cours Access. Tu trouveras comment utiliser Access. Tu peux débuter par celui ci.

    Ensuite, pour créer tes tables.
    Merci de ainsi que d'utiliser les boutons et

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqll = "INSERT INTO [Base Identification$]([Prénom_Sources], [Nom_Sources], [N°_Compte], [Banque_Profil]) values(?,?,?,?)"

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    r.morel :
    Voici les cours Access. Tu trouveras comment utiliser Access. Tu peux débuter par celui ci.

    Ensuite, pour créer tes tables.
    => Merci beaucoup pour les liens je vais m'y pencher sérieusement

    Dysorthographie :
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqll = "INSERT INTO [Base Identification$]([Prénom_Sources], [Nom_Sources], [N°_Compte], [Banque_Profil]) values(?,?,?,?)"
    => Je vais regarder cela avec attention !

    --------------------------------------------

    En fait pour mettre à jour ma base de données, il semble y avoir plusieurs solutions, soit utiliser la requête de Dysorthographie (en cours de test) soit en utilisant un DataSet et des DataTable.

    C'est ce que j'ai utilisé pour exploiter mes donner sans ouvrir le fichier Excel qui me sert de base de données (évoluera un jour vers une base Access)

    J'ai quand même tester la mise à jour des enregistrement via Data Set, 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
    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
     
     
            Dim Commande_AddTitle_BaseID As OleDb.OleDbDataAdapter
            Dim Commande_GetData_BaseID As OleDb.OleDbDataAdapter
            Dim TableTitre_BaseID As New DataTable
            Dim TableDonnées_BaseID As New DataTable
            Dim TableUpdate_BaseID As New DataTable
            Dim SourceDonnée As New DataSet        
     
            FichierSource = Application.StartupPath & "\Base Utilisateur\Base de données.xlsx"
            ConnectionFichierSource = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + FichierSource + ";Extended Properties='Excel 12.0;HDR=NO'")
            ConnectionFichierSource.Open()
     
            SourceDonnée.Tables.Add(TableTitre_BaseID)
            SourceDonnée.Tables.Add(TableDonnées_BaseID)
     
            '1- Récupération des en-tête
            Commande_AddTitle_BaseID = New OleDb.OleDbDataAdapter("SELECT * FROM [Base Identification$1:1]", ConnectionFichierSource)
            TableTitre_BaseID.Clear()
            Commande_AddTitle_BaseID.Fill(TableTitre_BaseID)
     
            '2- Récupération des données
            Commande_GetData_BaseID = New OleDb.OleDbDataAdapter("SELECT * FROM [Base Identification$]", ConnectionFichierSource)
            TableDonnées_BaseID.Columns.Clear()
            TableDonnées_BaseID.Rows.Clear()
            Commande_GetData_BaseID.Fill(TableDonnées_BaseID)
     
            With TableDonnées_BaseID
                '2-1- Suppression de la première ligne d'en-tête
                .Rows(0).Delete()
     
                '2.2- Renomer les en-têtes
                For Colonne As Integer = 0 To .Columns.Count - 1
                    .Columns(Colonne).ColumnName = TableTitre_BaseID.Rows(0).ItemArray(Colonne)
                    If Colonne = .Columns.Count - 1 Then Exit For
                Next Colonne
     
            '3- Création de la nouvelle ligne de données dans la DataTable "TableDonnées_BaseBDD"
            Dim NouvelEventBID As DataRow = TableDonnées_BaseID.NewRow()
            '-----
            With NouvelEventBID
                .Item("Prénom_Sources") = Me.TextBox2.Text
                .Item("Nom_Sources") = Me.TextBox1.Text
                .Item("N°_Compte") = Me.TextBox4.Text
                .Item("Banque_Profil") = Me.TextBox3.Text
            End With
     
            '4- Ajout de la nouvelle DataRow dans le DataTable : "TableDonnées_BaseBDD"
            TableDonnées_BaseID.Rows.Add(NouvelEventBID)
     
            '5- Mise à jour des données
            Commande_GetData_BaseID.Update(SourceDonnée, "Table2")
     
            '6- Fermeture de la source
            ConnectionFichierSource.Close()
    Cela ne semble pas fonctionner non plus, j'obtiens l'erreur :
    "Update requiert un DeleteCommand valide lors du passage de la collection DataRow avec des lignes supprimées."
    . Je ne sais pas comment m'en sortir ^^!

    Avez-vous déjà été dans le cas de ce message d'erreur?

    Merci pour votre retour.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Changement de stratégie
    Bonjour à tous de nouveau,

    Suite aux conseils de R.morel j'ai opté pour travailler avec une base de données : Database1.accdb en lieu et place de travailler avec un fichier Excel en tant que base de données.

    Mais pour partir sur de bonnes bases, j'ai besoin de remplir mon fichier Database1.accdb et notamment la table "Tbl_Catégorisation".

    Donc :
    Dans mon fichier Excel j'ai une feuille appelée"Base Commerçants" avec 7 colonnes communes avec la table "Tbl_Catégorisation"
    Je voudrai transférer les informations de ces 7 colonnes de ma base EXCEL vers ma base ACCESS

    Donc j'ai essayé de faire cela avec le code ci-dessous :

    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
    Module Gestion_Référence_Connection
     
        Public FichierSourceEXL As String
        Public ConnectionFichierSourceEXC As OleDb.OleDbConnection
        Public Commande_AddTitle As OleDb.OleDbDataAdapter
        Public Commande_GetData As OleDb.OleDbDataAdapter
        Public TableTitre_BaseCOM As New DataTable
        Public TableDonnées_BaseCOM As New DataTable
        '-----
        Public FichierSourceACCESS As String
        Public ConnectionFichierSourceACCESS As OleDb.OleDbConnection
        Public sql As String
        Public cmd As OleDb.OleDbCommand
        Public dta As OleDb.OleDbDataAdapter
        Public dts As New DataSet
        Public dtt As DataTable
     
    End 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
    Sub ConnectionSourceEXCEL(TableEXCEL As String)
     
            FichierSourceEXL = Application.StartupPath & "\Base Utilisateur\Base de données.xlsx"
            ConnectionFichierSourceEXC = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + FichierSourceEXL + ";Extended Properties='Excel 12.0;HDR=NO'")
            ConnectionFichierSourceEXC.Open()
            'Récupération des en-tête
            Commande_AddTitle = New OleDb.OleDbDataAdapter("SELECT * FROM [" & TableEXCEL & "$1:1]", ConnectionFichierSourceEXC)
            TableTitre_BaseCOM.Clear()
            Commande_AddTitle.Fill(TableTitre_BaseCOM)
            'Récupération des données
            Commande_GetData = New OleDb.OleDbDataAdapter("SELECT * FROM [" & TableEXCEL & "$]", ConnectionFichierSourceEXC)
            TableDonnées_BaseCOM.Columns.Clear()
            TableDonnées_BaseCOM.Rows.Clear()
            Commande_GetData.Fill(TableDonnées_BaseCOM)
            With TableDonnées_BaseCOM
                'Suppression de la première ligne d'en-tête
                .Rows(0).Delete()
                'Renomer les en-têtes
                For Colonne As Integer = 0 To .Columns.Count - 1
                    .Columns(Colonne).ColumnName = TableTitre_BaseCOM.Rows(0).ItemArray(Colonne)
                    If Colonne = .Columns.Count - 1 Then Exit For
                Next Colonne
            End With
    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
    Sub ConnectionSourceACCESS(TableACCESS As String)
     
            FichierSourceACCESS = Application.StartupPath & "\Base Utilisateur\Database1.accdb"
            ConnectionFichierSourceACCESS = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & FichierSourceACCESS)
            ConnectionFichierSourceACCESS.Open()
            'Création de la requête sql      
            sql = "select " & TableACCESS & ".* from " & TableACCESS
            'Création de la commande et on l'instancie (sql)       
            cmd = New OleDb.OleDbCommand(sql)
            'Création du dataadapter (dta) et on l'instancie (cmd)      
            dta = New OleDb.OleDbDataAdapter(cmd)
            'On instancie la commande (cmd) à la connection (cnx)       
            cmd.Connection() = ConnectionFichierSourceACCESS
            'On charge le dataset (dts) grâce à la propriété fill du dataadapter (dta)      
            dta.Fill(dts, "Tbl_Catégorisation")
            'On charge la datatable (dtt) grâce à la propriété tables du dataset (dts)
            dtt = dts.Tables("Tbl_Catégorisation")
     
        End Sub
    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
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            '1- Connection à la base EXCEL
            Call ConnectionSourceEXCEL("Base Commerçants")
     
            '2- Connection à la base ACCESS
            Call ConnectionSourceACCESS("Tbl_Catégorisation")
     
            '3- Ajout des nouveaux enregistrements
            For i As Integer = 1 To TableDonnées_BaseCOM.Rows.Count - 1
                'Création de la nouvelle ligne de données dans la DataTable "TableDonnées_BaseBDD"
                Dim NouvelEnregistrement As DataRow = dtt.NewRow()
                With NouvelEnregistrement
                    .Item("Catégorie_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Catégories")
                    .Item("SousCatégorie_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Sous-catégories")
                    .Item("Commerçant_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Libellés_Commerçants")
                    .Item("LinkName_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Libellés_Importation_Commerçants")
                    .Item("Matricule_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Matricules Commerçant")
                    .Item("Statut_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Statut_Commerçant")
                    .Item("DateModif_Catégorisation") = TableDonnées_BaseCOM.Rows(i).Item("Date")
                    'Ajout du nouvel évènement dans le DataTable : "TableDonnées_BaseBDD"
                    dtt.Rows.Add(NouvelEnregistrement)
                End With
            Next
     
            'Mise à jour des données dans la base de données Access
            dta.InsertCommand = New OleDb.OleDbCommand("INSERT INTO Tbl_Catégorisation(Catégorie_Catégorisation, SousCatégorie_Catégorisation, Commerçant_Catégorisation, _
                                                                                                LinkName_Catégorisation, Matricule_Catégorisation, Statut_Catégorisation, DateModif_Catégorisation) values(?,?,?,?,?,?,?)", ConnectionFichierSourceACCESS)
     
            dta.Update(dts, "Tbl_Catégorisation")
     
            'Fermeture de la source
            ConnectionFichierSource.Close()
     
        End Sub
    Mais je rencontre un problème de syntaxe sur la ligne suivante :
    dta.InsertCommand = New OleDb.OleDbCommand("INSERT INTO Tbl_Catégorisation(Catégorie_Catégorisation, SousCatégorie_Catégorisation, Commerçant_Catégorisation, _
    LinkName_Catégorisation, Matricule_Catégorisation, Statut_Catégorisation, DateModif_Catégorisation) values(?,?,?,?,?,?,?)", ConnectionFichierSourceACCESS)
    => "Erreur de syntaxe dans l'instruction INSERT INTO."

    Pourriez vous m'aider?

    Merci encore

  8. #8
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Salut,
    Si ton tableur Excel contient déjà des données tu peux les importer depuis Access. A moins de vouloir intégrer cette fonctionnalité, il est inutile de devoir coder cela puisque ton logiciel utilisera la BDD.
    Regarde ce lien : https://support.office.com/fr-fr/art...C-35392A68ED53
    Merci de ainsi que d'utiliser les boutons et

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ConnectionFichierSourceACCESS = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & FichierSourceACCESS
     Sql = "INSERT INTO [OngletExcel$] in '" & Application.StartupPath & "\Base Utilisateur\Base de données.xlsx' 'Excel 12.0;HDR=YES;' select * from [Table1Access]"
     
     Sql = "INSERT INTO [Table1Access]  select * from [OngletExcel$] in '" & Application.StartupPath & "\Base Utilisateur\Base de données.xlsx' 'Excel 12.0;HDR=YES;IMEX=1;'"
    https://mon-partage.fr/f/LoCWKVjq/

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Au top, je regarde ca et je vous tiens au courant de l'avancée de mon projet !

  11. #11
    Invité
    Invité(e)

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci les gars pour votre aide,

    J'ai réussi à transférer ma table de mon fichier EXCEL vers ma base ACCESS => Pas le plus compliqué vous me direz mais cela est un progrès selon moi ;-)!

    Je vais tenter de rajouter un enregistrement dans ma base ACCESS avec une requête SQL

    Je vous tiens au courant !

  13. #13
    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
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    Imports System.Data.OleDbPublic
     Class Test
        Private Main()
            Dim a As SqlMetier = New SqlMetier(Application.StartupPath & "\Base Utilisateur\Database1.accdb")
            a.OpenConnexion()
            a.Ajouter()
            a.CloseConnexion()
        End Sub
    End Class
    Class SqlMetier
        Inherits Connexion
        Public Sub New(ByVal Fichier As String)
            MyBase.New (Fichier)
        End Sub
        Public Sub Ajouter()
            Dim sql As String = "INSERT INTO Tbl_Catégorisation ( Catégories ) Values(?) ;"
            Dim prm() As ParmCmd = {New ParmCmd)
            prm(0).Name = "@Catégories": prm(0).Type = VarAdodb.adVarChar: prm(0).Direction = VarAdodb.adParamInput: prm(0).Size = 50: prm(0).Value = "TOTO"
            dim obj  as Object= Execute(sql, prm)
        End Sub
    End Class
    Class Connexion
        Public Structure ParmCmd
            Public Name As String
            Public Type As VarAdodb
            Public Direction As VarAdodb
            Public Size As Long
            Public Value As String
        End Structure
        Public Enum VarAdodb
            adAddNew = 16778240
            adAffectAllChapters = 4
            adAffectCurrent = 1
            adAffectGroup = 2
            adApproxPosition = 16384
            adArray = 8192
            adAsyncConnect = 16
            adAsyncExecute = 16
            adAsyncFetch = 32
            adAsyncFetchNonBlocking = 64
            adBigInt = 20
            adBinary = 128
            adBookmark = 8192
            adBookmarkCurrent = 0
            adBookmarkFirst = 1
            adBookmarkLast = 2
            adBoolean = 11
            adBSTR = 8
            adChapter = 136
            adChar = 129
            adClipString = 2
            adCmdFile = 256
            adCmdStoredProc = 4
            adCmdTable = 2
            adCmdTableDirect = 256
            adCmdText = 1
            adCmdUnknown = 8
            adCollectionRecord = 1
            adCompareEqual = 1
            adCompareGreaterThan = 2
            adCompareLessThan = 0
            adCompareNotComparable = 4
            adCompareNotEqual = 3
            adCopyAllowEmulation = 4
            adCopyNonRecursive = 2
            adCopyOverWrite = 1
            adCopyUnspecified = -1
            adCreateCollection = 8192
            adCreateNonCollection = 0
            adCreateOverwrite = 67108864
            adCreateStructDoc = -2147483648#
            adCriteriaAllCols = 1
            adCriteriaKey = 0
            adCriteriaTimeStamp = 3
            adCriteriaUpdCols = 2
            adCRLF = -1
            adCurrency = 6
            adDate = 7
            adDBDate = 133
            adDBTime = 134
            adDBTimeStamp = 135
            adDecimal = 14
            adDefaultStream = -1
            adDelayFetchFields = 32768
            adDelete = 16779264
            adDouble = 5
            adEditAdd = 2
            adEditDelete = 4
            adEditInProgress = 1
            adEditNone = 0
            adEmpty = 0
            adErrBoundToCommand = 3707
            adErrCannotComplete = 3732
            adErrCantChangeConnection = 3748
            adVarChar = 200
            adParamInput = 1
        End Enum
        Public Enum CommAdo
            adCmdFile = 256
            adCmdStoredProc = 4
            adCmdTable = 2
            adCmdTableDirect = 521
            adCmdText = 1
            adCmdU
            nknown = 8
        End Enum
        Private cnx As OleDbConnection = Nothing
        Private _Fichier As String
        Public Sub New(ByVal Fichier As String)
            _Fichier = Fichier
        End Sub
        Public Sub OpenConnexion()
            Dim GenereCSTRING As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _Fichier & ";"
            cnx = New OleDbConnection(GenereCSTRING)
            Try
                cnx.Open()
            Catch ex As Exception
                MessageBox.Show (ex.Message)
            End Try
        End Sub
        Public Function Execute(ByVal sql As String) As Object
            Dim myObject As New Object
            Using cmd As New OleDb.OleDbCommand(Sql, cnx)
                Try
                    Return cmd.ExecuteReader()
                Catch ex As Exception
                    Return Nothing
                End Try
            End Using
        End Function
        Public Function Execute(ByVal sql As String, ByVal Param As Object) As Object
            Dim myObject As New Object
            Using cmd As New OleDb.OleDbCommand(Sql, cnx)
                For Each c As Object In Param
     
                    If c.Size <> 0 Then cmd.Parameters.Add(c.Name, c.Type, c.Size).Value = c.Value
                Next
                Try
                    Return cmd.ExecuteReader()
                Catch ex As Exception
                    Return Nothing
                End Try
            End Using
        End Function
        Public Sub CloseConnexion()
            cnx.Close()
            cnx.Dispose()
            cnx = Nothing
        End Sub
     
    End Class

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    Merci Dysorthographie mais ton code ne me paraît pas simple.

    J'ai quand même essayé quelques petites choses, mais j'ai toujours le même problème de synthaxe.

    Mon but : Sauvegarder un enregistrement dans ma base ACCESS :

    Ci -dessous mon 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
    39
    40
    41
    42
    43
    44
     
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
     
            '1- Connection à la base ACCESS
            Call ACCESSConnectionLoading()
            Call ConnectionSourceACCESS("Tbl_Catégorisation")
     
            '2- Ajout des nouveaux enregistrements
            'Création de la nouvelle ligne de données dans la DataTable "TableDonnées_BaseBDD"
            Dim NouvelEnregistrement As DataRow = dtt.NewRow()
            With NouvelEnregistrement
                .Item("Catégorie_Catégorisation") = "Le groupe de génie"
                .Item("SousCatégorie_Catégorisation") = "Génial"
                .Item("Commerçant_Catégorisation") = "Le Top"
                .Item("LinkName_Catégorisation") = "Ca va le faire"
                .Item("Matricule_Catégorisation") = "COM-09999"
                .Item("Statut_Catégorisation") = "Actif"
     
                'Ajout du nouvel évènement dans le DataTable : "TableDonnées_BaseBDD"
                dtt.Rows.Add(NouvelEnregistrement)
            End With
     
            '3- Mise à jour des données dans la base de données Access
            Dim Cmd As New OleDb.OleDbCommand
            With Cmd
                .CommandType = CommandType.Text
                .Connection = ConnectionFichierSourceACCESS
                .CommandType = CommandType.Text
                .CommandText = "INSERT INTO Tbl_Catégorisation(Catégorie_Catégorisation = ? , SousCatégorie_Catégorisation = ?, Commerçant_Catégorisation = ?, LinkName_Catégorisation = ?, Matricule_Catégorisation = ?, Statut_Catégorisation = ?"
                With .Parameters
                    .Add("@Catégorie_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Le groupe de génie"
                    .Add("@SousCatégorie_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Génial"
                    .Add("@Commerçant_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Le Top"
                    .Add("@LinkName_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Ca va le faire"
                    .Add("@Matricule_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "COM-09999"
                    .Add("@Statut_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Actif"
                End With
                .ExecuteNonQuery()
            End With
     
            '4- Fermeture de la source
            ConnectionFichierSourceACCESS.Close()
     
        End Sub
    J'ai toujours un problème avec la syntaxe de ma requête d'enregistrement.
    Je bloque sur cette ligne :
    .ExecuteNonQuery()
    La syntaxe de la requête suivante n'est pas la bonne :S!
    .CommandText = "INSERT INTO Tbl_Catégorisation(Catégorie_Catégorisation = ? , SousCatégorie_Catégorisation = ?, Commerçant_Catégorisation = ?, LinkName_Catégorisation = ?, Matricule_Catégorisation = ?, Statut_Catégorisation = ?"
    Je crois que je ne comprends pas bien comment cela fonctionne malgré vos généreuse précédentes aides.

    Pourriez vous partager un peu de votre savoir à un noob comme moi ^^!

    Merci infiniment

  15. #15
    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
    13
    14
    15
    16
    17
    18
    19
    20
    Dim Sql = "INSERT INTO Tbl_Catégorisation(Catégorie_Catégorisation = ? , SousCatégorie_Catégorisation = ?, Commerçant_Catégorisation = ?, LinkName_Catégorisation = ?, Matricule_Catégorisation = ?, Statut_Catégorisation = ?"
            Using Cmd As New OleDb.OleDbCommand(Sql, ConnectionFichierSourceACCESS)
                With Cmd
                    With .Parameters
                        .Add("@Catégorie_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Le groupe de génie"
                        .Add("@SousCatégorie_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Génial"
                        .Add("@Commerçant_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Le Top"
                        .Add("@LinkName_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Ca va le faire"
                        .Add("@Matricule_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "COM-09999"
                        .Add("@Statut_Catégorisation", OleDb.OleDbType.VarWChar, 255).Value = "Actif"
                    End With
                     Try 
                       .ExecuteReader()
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                        Return
                    End Try
                    MessageBox.Show("Ok")
                End With
            End Using

Discussions similaires

  1. Commande SQL pour afficher les résultats d'une lettre
    Par floctc dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/04/2009, 11h37
  2. Réponses: 9
    Dernier message: 12/11/2008, 11h28
  3. Commande SQL pour compacter le stockage
    Par timtima dans le forum SQL
    Réponses: 4
    Dernier message: 26/09/2008, 01h20
  4. Réponses: 5
    Dernier message: 18/09/2007, 16h18
  5. [A97] VBA : Commande sql pour insertion de champs dans une table
    Par JeremieT dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2006, 13h12

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