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

ADO.NET Discussion :

ADO.NET Requete SQL sur fichier Access


Sujet :

ADO.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 2
    Points
    2
    Par défaut ADO.NET Requete SQL sur fichier Access
    Bonjour,
    Je suis actuellement entrain de programmer sous C# et je suis bloquer quand à la récupération des donnes dans la base Access, j'obtiens une erreur lors de ma requete. J'ai deja fait une requete parametre sur LaClasse et j'ai réussi mais quand je m'attaque aux dates c'est plus corsé!

    Voici le code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string LaClasse = "3LITI";
     
    DateTime date = DateTime.Now;
     
    string connection = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\database\\horaire.mdb";
     
    string TEST = String.Concat("SELECT * FROM Req_Access WHERE codeClasse='", LaClasse, "' AND ", date, "BETWEEN dateHeuredebut AND dateHeureFin");
     
    System.Data.OleDb.OleDbDataAdapter dAdapter = new System.Data.OleDb.OleDbDataAdapter(TEST, connection);

    Exemple de la base :
    codeClasse codeSalle codeMatiere dateHeureDebu dateHeureFin
    3LITI B107A AT-INF 19.05.2010 11:30:00 19.05.2010 12:15:00

    Il me retourne une erreur de syntaxe en mettant (opérateur absent)

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Utilise le constructeur par défaut de OleDbDataAdapter et utilise une OleDbCommand. Avec cette OleDbCommand tu pourras te servir des paramètres de requête.

  3. #3
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Effectivement ta requête n'est pas bonne.

    Au niveau ou tu a mit la variable date c'est plutot le nom de la colonne qui contient les dates et les chaines dateHeuredebut et dateHeureFin doivent etre des valeurs de date.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Pourquoi se compliquer la vie
    Premièrement ta requête devrait plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM Req_Access WHERE codeClasse='" + LaClasse + "' AND ,  dateHeuredebut < " + date + " AND dateHeureFin > " + date"
    Car between ne devrait pas être utiliser de cette maniere.

    De plus tu devrais évité de nommer des variable de type date date car c'est un nom réservé et parfois ça peut causer des surprises.


    Deuxièmement:
    Personellement j'ai eu à dealer avec les dates dans le passé c'etais de la merde surtout l'orsque la base de données est située sur une machine ayant des paramêtres de langues differents. Ma solution les objet OleDbParameter dans ton cas (Access) ... Si tu ne veux pas te cassé la tête avec le format de ta date (et là je ne parle même pas des decimals , vs .) passe tes valeur dans des objets paramêtres. Voilà comment faire:


    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
     
    Dim Connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=\\srvtm1\data\Data\Access\Datarive.mdb;")
            Dim Query As String = "SELECT Client.NoClient, Client.NomClient, Client.NomClientIndex, Client.DateCreation, Client.Adresse, Client.Remarque, Client.Compte" & _
                                  " FROM(Client)" & _
                                  " WHERE (Client.DateCreation > @DateDebut) And (Client.DateCreation < @DateFin)"
     
            Dim Command As OleDbCommand
            Dim Parameter As OleDbParameter
            Dim DateDebut As DateTime = Now
            Dim DataAdapter As OleDbDataAdapter
            Dim aDataset As New DataSet
            DateDebut.AddYears(-10)
     
            Connection.Open()
            Using Connection
                Command = New OleDbCommand(Query, Connection)
     
                Parameter = New OleDbParameter
                Parameter.OleDbType = OleDbType.Date
                Parameter.ParameterName = "@DateDebut"
                Parameter.Value = DateDebut
                Command.Parameters.Add(Parameter)
     
                Parameter = New OleDbParameter
                Parameter.OleDbType = OleDbType.Date
                Parameter.ParameterName = "@DateFin"
                Parameter.Value = Now
                Command.Parameters.Add(Parameter)
     
                DataAdapter = New OleDbDataAdapter(Command)
     
                DataAdapter.Fill(aDataset)
     
                Me.DataGridView1.DataSource = aDataset
     
            End Using
    Très important que les Paramêtre soient introduit dans l'objet commande dans l'ordre de la requête car access fonctionne en mode ordinal.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Le date est à proscrire pour un nom de colonne.

    Ou alors tu prends l'habitude d'utiliser la syntaxe suivante pour tes colonnes.

    [latable].[lacolonne]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Problème de requete SQL sur fichiers xls/csv
    Par Cyborg dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/10/2011, 17h35
  2. [E-02] Requetes SQL sur fichier .txt delimité par ";"
    Par -={-_-}=- dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/11/2008, 15h42
  3. Requete sql sur un fichier excel
    Par lepiou dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/12/2007, 10h34
  4. requet sql sur une BD access
    Par k_boy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 25/09/2007, 16h27
  5. Réponses: 23
    Dernier message: 19/09/2006, 11h33

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