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

MS SQL Server Discussion :

problème au niveau de ma requête?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 110
    Par défaut problème au niveau de ma requête?
    bonjour à tous, jai un problème qui m'enpêche d'avancer...En fait j'ai une base de données sous sql server2000 dont je vous donne un extrait de la structure(qui nous interesse).

    RESERVATION(NUMERORES,IDTYPERES,IDSTATUT,MATRICULEEMPLOYE,
    DATEDEMANDE,DATEDEB,DATEFIN,HEUREDEB,HEUREFIN)

    MATERIEL(CODEMAT,NUMEROSERIEMAT,LIBELLEMAT)

    PORTER(NUMERORES,CODEMAT)

    Les champs "DATEDEB" et "DATEFIN" sont de type string

    Mon objectif est d'arriver à faire une recherche pour afficher les matériels disponibles à une période donnée.Pour cela jai fait un formulaire avec 2 textbox (tb_datedeb1 et tb_datefin1). Lorsqu' on fait une reservation les tables "reservation" et "porter" sont renseignés... Mon problème est que lorsque j'exécute il affiche meme les matériels qui sont réservés à la période choisé dans le formulaire. Voici le 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
    Protected Sub bt_rechercher_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_rechercher.Click
     
            Dim oConnection As System.Data.SqlClient.SqlConnection
            Dim oCommand As System.Data.SqlClient.SqlCommand
            Dim oDataReader As System.Data.SqlClient.SqlDataReader
            Dim sSQL As String
     
            oConnection = New System.Data.SqlClient.SqlConnection
            oConnection.ConnectionString = "Server=(local); Initial Catalog='GESSALLE';" & " Trusted_Connection=True;"
     
            oConnection.Open()
     
            sSQL = "SELECT DISTINCT m.LIBELLEMAT FROM MATERIEL m, PORTER p, RESERVATION r WHERE p.NUMERORES=r.NUMERORES AND p.CODEMAT=m.CODEMAT OR m.CODEMAT NOT IN (SELECT CODEMAT FROM PORTER) AND (r.DATEDEB NOT BETWEEN '" & tb_datedeb1.Text & "' and '" & tb_datefin1.Text & "') AND (r.DATEFIN NOT BETWEEN '" & tb_datedeb1.Text & "' and '" & tb_datefin1.Text & "')"
     
            oCommand = New System.Data.SqlClient.SqlCommand(sSQL, oConnection)
     
            oDataReader = oCommand.ExecuteReader()
     
            DTG_RESULT1.DataSource = oDataReader
            DTG_RESULT1.DataBind()
     
            oDataReader.Close()
            oConnection.Close()
     
        End Sub
    svp aidez moi
    NB: je développe avec vs.net 2005 et jai crée un data grid DTG_RESULT1 pour l'affichage des données

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par lesultan2007 Voir le message
    svp aidez moi
    on veut bien, mais... tu as juste oublié d'expliquer ce qui te pose problème

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 110
    Par défaut
    ce qui me pose problème c'est que ma requête ne m'affiche pas les matériels disponibles à une période donnée. Or c'"est à ca que je veux aboutir.Je sais pas si vous avez des suggestion par rapport à la structure de ma base ou alors si la structure de la base est bonne, je veux pouvoir extraire les matériels disponibles à une période donnée

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK, donc la question n'a rien à voir avec VB.NET, c'est une question SQL Server.
    Je déplace

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Je sais pas où est le problème.

    Mais évite les requêtes directes, utilise les requêtes paramétrées ou des PS.
    cela renforcera la sécurité de ton application

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 994
    Billets dans le blog
    6
    Par défaut
    Quelque chose come :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT DISTINCT m.LIBELLEMAT 
    FROM   MATERIEL m
           INNER JOIN PORTER p
                 ON p.CODEMAT = m.CODEMAT
    WHERE  NOT EXISTS(SELECT * 
                      FROM   PORTER p1
                              INNER JOIN RESERVATION r1
                                   ON p1.NUMERORES = r1.NUMERORES
                      WHERE  m.CODEMAT = p1.CODEMAT
                        AND  (r1.DATEDEB > @DATEDEBUT AND (r1.DATEDEB < @DATEFIN OR r1.FIN < @DATEFIN)) OR
                             (@DATEDEBUT > r1.DATEDEB AND (@DATEDEBUT < r1.FIN OR @DATEFIN < r1.FIN)) OR
                             (r1.DATEDEB = @DATEDEBUT AND (r1.FIN IS NOT NULL AND @DATEFIN IS NOT NULL)))
    Cela utilise un NOT EXISTS et le principe du prédicat OVERLPAS.
    Voir : http://sqlpro.developpez.com/cours/gestiontemps/#L1.2.2

    @DATEDEBUT et @DATEFIN étant les paramètres de la période souahitée...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [1.x] Probléme au niveau d'une requête DQL
    Par simolewestside dans le forum Symfony
    Réponses: 1
    Dernier message: 27/12/2012, 12h31
  2. Problème au niveau de la requête..
    Par Abdellah2010 dans le forum VB.NET
    Réponses: 0
    Dernier message: 05/07/2011, 16h07
  3. Problème au niveau de la requête Update
    Par info.pascal dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2011, 16h53
  4. [SQL-Server] Problème de code au niveau de ma requête
    Par meryem85 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/09/2007, 15h05
  5. [Oracle] Problème au niveau d'une requête et de l'utilisation de son résultat
    Par LethaL86 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/09/2007, 14h31

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