Problème base de donnée "INSERT INTO" à l'exécution de la requête sql

Signaler
-
 edwinzap -
Bonjour, bonsoir

Débutant en programmation et essayant d'apprendre vb 2010 (express).
J'ai suivi quelques cours présent sur internet et ai regardé le module sur comment modifier, ajouter,... les bases de données sur ce site, mais j'ai un problème à chaque fois.

Voici le code:
(j'ai créé une base de donnée access "temps.mdb" ayant un champ "temps écoulé" ainsi que "date" que j'ai lié)

Imports System.Data
Imports System.Data.OleDb


Public Class Form1

    ' Notre objet connexion
    Public con As New OleDb.OleDbConnection
    ' Notre dataset
    Public ds As New DataSet

    Public Temps
    Public TempsDebut

    Public Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'connection à la base de donnée
        con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & My.Application.Info.DirectoryPath & "\Temps.mdb"

        TempsDebut = Now
        Timer1.Interval = 100
        Timer1.Start()
    End Sub
    Private Sub Connection()
        ' Déclaration de la variable cmd
        ' OleDbCommand représentera ici une instruction SQL à exécuter par rapport à une source de données
        Dim cmd As OleDb.OleDbCommand
        ' Déclaration de sql, qui contiendra la requête SQL permettant d'ajouter un enregistrement
        Dim reqsql As String
        reqsql = "SELECT * FROM Temps"

        ' Initialisation de la requête
        cmd = New OleDb.OleDbCommand(reqsql, con)

        ' Ouverture de la connexion
        cmd.Connection.Open()

        ' Récupération du résultat de la requête dans un dataset
        ' Déclaration de notre data adapter
        Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
        ' On sélectionne les enregistrements de la requête
        da.SelectCommand = cmd
        ' et on injecte les enregistrements dans le dataset
        da.Fill(ds, "Temps")

        ' Fermeture de la connexion
        cmd.Connection.Close()

    End Sub
    Private Sub Form1_Leave(sender As Object, e As System.EventArgs) Handles Me.Leave

    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Dim TempsFin = Now
        Dim Seconde = DateDiff(DateInterval.Second, TempsDebut, TempsFin)
        Dim Minute = DateDiff(DateInterval.Minute, TempsDebut, TempsFin)
        Dim Heure = DateDiff(DateInterval.Hour, TempsDebut, TempsFin)

        Temps = Format(Heure, "00") & " : " & Format(Minute, "00") & " : " & Format(Seconde, "00")
        Label1.Text = Temps
    End Sub

    Private Sub HistoriqueButton_Click(sender As System.Object, e As System.EventArgs) Handles HistoriqueButton.Click
        Dialog1.Show()
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        ' Déclaration de la variable cmd
        ' OleDbCommand représentera ici une instruction SQL à exécuter par rapport à une source de données
        Dim cmd As OleDb.OleDbCommand
        ' Déclaration de sql_ajouter, qui contiendra la requête SQL permettant d'ajouter un enregistrement
        Dim sql_ajouter As String

        ' On écrit notre requête et on l'assigne à la variable sql_ajouter
        sql_ajouter = "INSERT INTO Temps (Temps écoulé,Date) VALUES(Val_Temps_écoulé, Val_Date)"

        ' Initialisation de la requête
        cmd = New OleDb.OleDbCommand(sql_ajouter, con)

        ' On définit les paramètres utilisés pour le bon déroulement de la requête
        ' On assigne à Val_Prenom" le texte contenu dans le textbox txt_ajouter_prenom
        cmd.Parameters.AddWithValue("Val_Temps_écoulé", "temps")
        ' On assigne à Val_Nom" le texte contenu dans le textbox txt_ajouter_nom
        cmd.Parameters.AddWithValue("Val_Date", "date")

        ' Ouverture de la connexion
        cmd.Connection.Open()
        ' Exécution de la requête SQL
        cmd.ExecuteReader()
        ' Fermeture de la connexion
        cmd.Connection.Close()

    End Sub


End Class


J'ai simplement mis du texte dans les enregistrements pour tester en premier temps.

Mais le problème c que lorsque je compile, il me met une erreur à la ligne cmd.ExecuteReader()
avec ceci: Erreur de syntaxe dans l'instruction INSERT INTO.

Merci d'avance

5 réponses

avec ta ligne de commande

 sql_ajouter = "INSERT INTO Temps (Temps écoulé,Date) VALUES(Val_Temps_écoulé, Val_Date)"



il te faut au moins si c'est du texte box

sql_ajouter = "INSERT INTO Temps (Temps écoulé,Date) VALUES(?,?)"


essaie d'abord
Merci pour la réponse

En fait il n'y a pas de texte box.
Je voudrais simplement mettre le contenu de la variable "temps" dans la champs "temps écoulé" et la date d'aujourd'hui dans le champ "date" (désolé si je m'exprime mal, je ne connais pas encore le vocabulaire programmation)
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
5
Bonjour,

Les champs avec espace doivent être mis entre crochets : []
Un accent + un espace dans un nom de table n'est pas forcément judicieux..

Pour insérer du texte, il faut le mettre entre des '
Pour une date, il faut la mettre entre des #

L'expérience, c'est une connerie par jour, mais jamais la même..
Comment dois-je faire alors pour modifier le nom des champs (et le type de donnée)?
En passant par access ou directement en utilisant vb 2010?
J'ai essayé par access mais la base de données ne se met jamais à jour même si je clique sur actualiser.
Merci à tous.
J'ai finalement trouvé la cause (en plus j'avais déjà entendu parler de ce problème).
Il ne faut tout simplement pas utiliser Date comme champ dans access car c'est un nom réservé.

Par contre si quelqu'un a une idée et puisse m'expliquer comment changer une base de donnée que l'on a importer dans notre projet, ce serait le bienvenue (car je n'ai encore rien trouvé)

Merci