Pour éviter de taper la requête SQL directement dans le code VB .Net 2008
Express, j'ai créé 1 base de données Access avec les mêmes tables et champs.
Ensuite, j'ai créé la requête en mode QBE qui me l'a traduite en SQL (la
requête fonctionne sous Access).
J'ai donc tenté de recopier ce code SQL pour l'utiliser dans SQL Server CE.
Mais j'ai 1 exception levée avec apparemment Sum.
Merci d'avance pour votre aide.
Stéphane
PS :
Voici le message d'erreur exact :
L'exception System.Data.SqlServerCe.SqlCeException n'a pas été gérée
Message="La valeur d'argument spécifiée pour la fonction n'est pas valide.
[ Argument # = 1,Name of function(if known) = Sum ]"
Et voici la requête :
Dim req As String
Dim sdr As SqlCeDataReader
Dim sc As SqlCeCommand
req = "SELECT A.NuméroAuto AS Applications_NuméroAuto, A.Nom AS
Applications_Nom, A.Version, A.Clef, A.Vecteur, A.Commentaires AS
Applications_Commentaires, C.NuméroAuto AS Clients_NuméroAuto, C.Société,
C.Nom AS Clients_Nom, D.NuméroAuto AS Dossiers_NuméroAuto,
D.NuméroApplication, D.NuméroClient, D.CodeOffre, D.CodeCommande,
D.CodeFacture, D.CodeDossier, D.NombreLicences, D.Commentaires AS
Dossiers_Commentaires, Sum(L.LicenceActive) AS SommeDeLicenceActive"
req &= " FROM (Clients AS C INNER JOIN (Applications AS A INNER JOIN
Dossiers AS D ON A.NuméroAuto = D.NuméroApplication) ON C.NuméroAuto =
D.NuméroClient) LEFT JOIN Licences AS L ON D.NuméroAuto = L.NuméroDossier"
req &= " GROUP BY A.NuméroAuto, A.Nom, A.Version, A.Clef, A.Vecteur,
A.Commentaires, C.NuméroAuto, C.Société, C.Nom, D.NuméroAuto,
D.NuméroApplication, D.NuméroClient, D.CodeOffre, D.CodeCommande,
D.CodeFacture, D.CodeDossier, D.NombreLicences, D.Commentaires;"
évitez absolument tout ce qui est nom ne respectant pas la norme SQL, à savoir, accent, cédille, espace; etc. Cela ne peut vous apporter que des ennuis !
La norme en la matière : http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1
A +
Stéphane a écrit :
Desfois, je suis bête...
Dans : SELECT A.NuméroAuto AS Applications_NuméroAuto
Il y a :
Applications_NuméroAuto
Tout simplement !
@+ Stéphane
<Stéphane> a écrit dans le message de news:
Bonjour Fred,
En effet, c'est bien 1 bit, je pensais bêtement que ça retournait 0 ou 1.
Ta solution fonctionne parfaitement, merci beaucoup.
Par contre, j'ai 1 autre soucis, peut-être peux-tu m'aider ?
Quand un champs ne se trouve que dans 1 seule table (ex : Version) sdr.item("Version") me retourne bien la bonne valeur mais quand ce champs se trouve dans plusieurs tables (ex : NuméroAuto ou Commentaires), je n'arrive pas à y accéder sans provoquer d'erreur sdr.item("A.NuméroAuto") sdr.item("Applications.NuméroAuto") aucun des 2 ne fonctionnent, et lève 1 exception (la même que si je mets sdr.item("UnChampsQuiNExistePas") )
J'avais déjà eu ce problème avec des champs contenant 1 espace, et comme je n'avais pas trouvé la solution, je les avais tout simplement renommé en supprimant tous les espaces (ce qui n'est pas la meilleure des solutions pour résoudre 1 problème)
Merci d'avance, Stéphane
"Fred" a écrit dans le message de news: OMQAG%
in news:, Stéphane wrote :
Bonjour,
Bonjour,
Voici le message d'erreur exact :
L'exception System.Data.SqlServerCe.SqlCeException n'a pas été gérée Message="La valeur d'argument spécifiée pour la fonction n'est pas valide. [ Argument # = 1,Name of function(if known) = Sum ]"
Vu le nom de la colonne, on dirait qu'elle est de type bit ? Essaie ceci SUM(CASE WHEN L.LicenceActive = 1 THEN 1 ELSE 0 END)
-- Fred
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
évitez absolument tout ce qui est nom ne respectant pas la norme SQL, à
savoir, accent, cédille, espace; etc. Cela ne peut vous apporter que des
ennuis !
La norme en la matière :
http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1
A +
Stéphane a écrit :
Desfois, je suis bête...
Dans :
SELECT A.NuméroAuto AS Applications_NuméroAuto
Il y a :
Applications_NuméroAuto
Tout simplement !
@+
Stéphane
<Stéphane> a écrit dans le message de news:
Os3c0FbnJHA.5048@TK2MSFTNGP04.phx.gbl...
Bonjour Fred,
En effet, c'est bien 1 bit, je pensais bêtement que ça retournait 0 ou 1.
Ta solution fonctionne parfaitement, merci beaucoup.
Par contre, j'ai 1 autre soucis, peut-être peux-tu m'aider ?
Quand un champs ne se trouve que dans 1 seule table (ex : Version)
sdr.item("Version") me retourne bien la bonne valeur
mais quand ce champs se trouve dans plusieurs tables (ex : NuméroAuto ou
Commentaires), je n'arrive pas à y accéder sans provoquer d'erreur
sdr.item("A.NuméroAuto")
sdr.item("Applications.NuméroAuto")
aucun des 2 ne fonctionnent, et lève 1 exception (la même que si je mets
sdr.item("UnChampsQuiNExistePas") )
J'avais déjà eu ce problème avec des champs contenant 1 espace, et comme
je n'avais pas trouvé la solution, je les avais tout simplement renommé en
supprimant tous les espaces (ce qui n'est pas la meilleure des solutions
pour résoudre 1 problème)
Merci d'avance,
Stéphane
"Fred" <foleide@free.fr.invalid> a écrit dans le message de news:
OMQAG%23YnJHA.5420@TK2MSFTNGP04.phx.gbl...
in news:uZt088RnJHA.5980@TK2MSFTNGP06.phx.gbl, Stéphane wrote :
Bonjour,
Bonjour,
Voici le message d'erreur exact :
L'exception System.Data.SqlServerCe.SqlCeException n'a pas été gérée
Message="La valeur d'argument spécifiée pour la fonction n'est pas
valide. [ Argument # = 1,Name of function(if known) = Sum ]"
Vu le nom de la colonne, on dirait qu'elle est de type bit ?
Essaie ceci
SUM(CASE WHEN L.LicenceActive = 1 THEN 1 ELSE 0 END)
--
Fred
foleide@free.fr
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
évitez absolument tout ce qui est nom ne respectant pas la norme SQL, à savoir, accent, cédille, espace; etc. Cela ne peut vous apporter que des ennuis !
La norme en la matière : http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1
A +
Stéphane a écrit :
Desfois, je suis bête...
Dans : SELECT A.NuméroAuto AS Applications_NuméroAuto
Il y a :
Applications_NuméroAuto
Tout simplement !
@+ Stéphane
<Stéphane> a écrit dans le message de news:
Bonjour Fred,
En effet, c'est bien 1 bit, je pensais bêtement que ça retournait 0 ou 1.
Ta solution fonctionne parfaitement, merci beaucoup.
Par contre, j'ai 1 autre soucis, peut-être peux-tu m'aider ?
Quand un champs ne se trouve que dans 1 seule table (ex : Version) sdr.item("Version") me retourne bien la bonne valeur mais quand ce champs se trouve dans plusieurs tables (ex : NuméroAuto ou Commentaires), je n'arrive pas à y accéder sans provoquer d'erreur sdr.item("A.NuméroAuto") sdr.item("Applications.NuméroAuto") aucun des 2 ne fonctionnent, et lève 1 exception (la même que si je mets sdr.item("UnChampsQuiNExistePas") )
J'avais déjà eu ce problème avec des champs contenant 1 espace, et comme je n'avais pas trouvé la solution, je les avais tout simplement renommé en supprimant tous les espaces (ce qui n'est pas la meilleure des solutions pour résoudre 1 problème)
Merci d'avance, Stéphane
"Fred" a écrit dans le message de news: OMQAG%
in news:, Stéphane wrote :
Bonjour,
Bonjour,
Voici le message d'erreur exact :
L'exception System.Data.SqlServerCe.SqlCeException n'a pas été gérée Message="La valeur d'argument spécifiée pour la fonction n'est pas valide. [ Argument # = 1,Name of function(if known) = Sum ]"
Vu le nom de la colonne, on dirait qu'elle est de type bit ? Essaie ceci SUM(CASE WHEN L.LicenceActive = 1 THEN 1 ELSE 0 END)
-- Fred
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************