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 :

Problème avec SQL dans un tableadapter (select count())


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Problème avec SQL dans un tableadapter (select count())
    Bonjour

    J'ai un bizzare de problème.
    Mon appli, était d'abord liée à une base de donnée SQL Express (MDF). Dans mon appli, j'ai un DataGridView, qui était "binder" à un tableadapter, dans un dataset. Très simple comme adapteur, voici la requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
        (SELECT COUNT(*) FROM Inventory as I WHERE c.ProductID = I.ProductID) as ProductCount, 
        c.ProductID, 
        c.ProductName, 
        c.ProductCUP 
    FROM ProductCatalog as c
    Ça fonctionnait #1, j'avais un beau datagrid qui me montrait pour chaque Product ID de ma table ProductCatalog, combien j'en avait dans ma table Inventory.

    Voilà que j'ai changé la BD pour une SQL Compact (SDF). Même structure de BD (Très simple vous en conviendrez, 2 tables.).

    Lorsque je refais mon datatable, et que j'écris la même requête, j'ai une erreur que je n'arrive pas à fixé.

    D'abord, VS2008 aime changer le code, en ré-écrivant ma requete comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
        (SELECT COUNT(*) as Expr1 FROM Inventory as I WHERE c.ProductID = I.ProductID) as ProductCount, 
        c.ProductID, 
        c.ProductName, 
        c.ProductCUP 
    FROM ProductCatalog as c
    Il ajoute automatiquement "as Expr1" après la parenthèse du Count(*).
    Ensuite, il me retourne un message (Je n'ai pas le message exacte désolé) qui dit qu'il y a un problème de token. À mon avis, le fait qu'il ajoute Expr1 après fait que la structure du select n'est plus valide.

    Mais je ne sais pas comment faire pour que VS2008 ne change pas mon code, mais surtout, ce que je trouve étrange, c'est que ça se produit seulement lorsque j'ai changé ma BD de MDF à SDF.

    Ce peut-il que les BD SQL compact ne support pas les Count()? Je trouverais ça vraiment bizzare, mais je ne trouve aucune doc la dessus sur le web. Peut-être que je cherche mal.

    Votre aide serait grandement apprécié!

    Merci beaucoup.


    Sébastien Gignac.

  2. #2
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    il te met un as Expr1 car tu n'a pas nommé le champ que tu créé, en l'occurance le COUNT(*), donc il se dit si il nomme pas le champ je vai le nommer a sa place, et il le nomme Expr1, pour nomme ton champ il suffit de mettre select count(*) AS nbInventory par exemple
    pour ton message d'erreur il me faudrai le message exacte si tu veux que je t'aide

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Bonjour Bobby,

    Merci pour la réponse. Mais j'ai trouvé mon problème.
    J'utilise une BD SQL Compact Edition (SDF) et ce format ne supporte pas les sous-requête dans la clause SELECT. Du moins, sur le forum MSDN, c'est ce qu'ils disent. Par contre, Microsoft annonce que pour la version 3.5 de SQLCE, la sous-requête en clause SELECT seront supporté. Ma BD est a la version 3.5 et ça ne fonctionne pas. Étrange...


  4. #4
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    bizarre ton idée d'utiliser ce genre de base
    je te conseille plutot d'utilise un sgbd tel que sql server express, il est très bien, tres facile a manier et prevu pour tourner specialement avec visual studio

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Oui mais l'application est conçu pour le grand public. Si j'utilise SQL Express, j'imagine que les clients devront installé SQL Express sur le ordi pour acceder à la BD et je ne veux pas ça.

  6. #6
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    ah ca c'est bien possible
    dans ce cas si les utilisateurs ne sont pas connectés a un meme réseau je ne voit pas comment tu peut faire, peut-etre y a-t-il d'autre format de base de données un peu mieux qui ne necessitent eux non plus pas d'installation sur le poste

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    J'ai fini par trouvé un workaround.
    Je ne peux toujours pas inclure de sub-query count() dans le SELECT.
    Je le fait avec 2 requêtes. C'est moins clean, mais ça fait la job.
    Par contre j'aimerais bien que quelqu'un m'explique pourquoi Microsoft fait la promo de la version 3.5 de SQL Compact Edition en disant que les sous-requêtes en SELECT seront permis... et ce n'est évidement pas le cas...

    A suivre...

Discussions similaires

  1. Problème avec SQL dans code VBA
    Par glemoin dans le forum IHM
    Réponses: 7
    Dernier message: 01/06/2014, 10h50
  2. [Access] Problème avec REPLACE dans SQL
    Par nikolla dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/01/2011, 13h47
  3. [Transact-SQL] Problème avec "execute" dans un "if"
    Par dj_lil dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/12/2007, 15h56
  4. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  5. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50

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