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

Requêtes et SQL. Discussion :

traitement dynamique d'un champ de requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut traitement dynamique d'un champ de requête
    Bonjour

    J'ai une table avec un format de date en decimal, et j'aimerais le transformer en date, pour en extraire un numéro de semaine, afin de faire un regroupement sur ce champ.
    D'après des posts que j'ai pu lire, on peut combiner du VBA et du SQL, mais en codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strconn = "SELECt Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2)))) as date from gehactc3 where dathis>'20090315'"
    çà ne fonctionne pas.

    Est-ce possible de traiter un champ de cette façon dynamiquement, ou faut-il passer par une requête intermédiaire ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    Hello,
    ton champ dathis, il est de quel type déjà stp ?

    et quand tu dis
    çà ne fonctionne pas.
    si tu ne nous dis pas ce qui ne fonctionne pas, on ne sera pas en mesure de savoir le comment du pourquoi

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut
    Salut

    Mon champ DATHIS est de format numérique.

    Voici mon code plus détaillé :
    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
    Sub dathis()
        Dim CnMySQL As ADODB.Connection, rs As ADODB.Recordset
        Dim strconn As String
        Set rs = New ADODB.Recordset
        Set rs1 = New ADODB.Recordset
        Dim cpt As Double
    ' Connexion à base MySQL
    ' Crée objet Connection
    Set CnMySQL = New ADODB.Connection
    ' Définit chaîne de connexion
    ' * Le provider MSDASQL (ODBC) étant celui par défaut, on peut l'omettre
    With CnMySQL
        .Provider = "Microsoft.Jet.OLEDB.4.0;"
        .ConnectionTimeout = 30
        .Mode = adModeReadWrite
        .Open "Data source=C:\Fichiers\bd1.mdb;"
    End With
     
    If CnMySQL Is Nothing Then
        MsgBox "connexion non établie !"
        Else
        MsgBox "connexion établie !"
    End If
     
    rs.Open "SELECt Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2)))) as date from gehactc3 where dathis>20090315", CnMySQL, adOpenStatic, adLockOptimistic
     
    MsgBox rs!dathis
     
    CnMySQL.Close
    Set rs = Nothing
    Set CnMySQL = Nothing
    End Sub
    çà m'affiche un message d'erreur à l'ouverture du recordset : "dans l'instruction SELECT, un mot réservé ou un argument est mal orthographié, ou la ponctuation est incorrecte"

    alors que la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Open "SELECt dathis from gehactc3 where dathis>20090315", CnMySQL, adOpenStatic, adLockOptimistic
    marche parfaitement

    Je ne vois donc pas comment passer du VBA dans les requêtes. J'ai consulté des tutos et posts à ce sujet. Par exemple ,cette requête analyse croisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TRANSFORM Sum(CCur([Détails commandes].[Prix unitaire]*[Quantité]*(1-[Remise (%)])/100)*100) AS Montant
    SELECT Catégories.[Nom de catégorie], Year([Date commande]) AS Année
    FROM (Catégories 
        INNER JOIN Produits 
            ON Catégories.[Code catégorie] = Produits.[Code catégorie]) 
        INNER JOIN (Commandes 
        INNER JOIN [Détails commandes] 
            ON Commandes.[N° commande] = [Détails commandes].[N° commande]) 
            ON Produits.[Réf produit] = [Détails commandes].[Réf produit]
    GROUP BY Catégories.[Nom de catégorie], Year([Date commande])
    PIVOT "Trim " & DatePart("q",[Date commande],1) 
    IN ("Trim 1","Trim 2","Trim 3","Trim 4");
    dans ce :tuto , comment la fait-on fonctionner ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    Perso je reste sceptique sur le

    à remplacer par

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut
    Bravo et merci !!

    C'était aussi "bête" que celà !!
    Cependant, je n'arrive pas à faire un regroupement sur ce champ, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2)))) as [date], sum(stkuvc) from gehactc3 where dathis >20090315 group by date
    m'affiche : "vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée 'Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2))))' comme faisant partie de la fonction d'agrégat"

    Regroupement impossible ? ou j'ai encore un truc qui cloche ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    tu dios te retaper toute la syntaxe :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2)))) as [date], sum(stkuvc) 
    from gehactc3 
    where dathis >20090315 
    group by Datepart('ww',DateSerial(CInt(Left(Str(gehactc3.dathis), 5)), CInt(Mid(Str(gehactc3.dathis), 6, 2)), CInt(Right(Str(gehactc3.dathis), 2))));


  7. #7
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut
    Merci jpcheck

    J'ai résolu le problème, voici la requête finale :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Datepart('ww',DateSerial(CInt(Left(Str(dathis), 5)), CInt(Mid(Str(dathis), 6, 2)), CInt(Right(Str(dathis), 2)))) as semaine, Sum(GEHPROC3.UVCREC) as recep, VraiFaux([fampro].[produit]=Vrai;"produits";"autres")
    FROM GEHPROC3 INNER JOIN fampro ON GEHPROC3.codpro=fampro.codpro
    WHERE dathis>=20090223 and dathis<=20090328
    GROUP BY Datepart('ww',DateSerial(CInt(Left(Str(dathis), 5)), CInt(Mid(Str(dathis), 6, 2)), CInt(Right(Str(dathis), 2)))), fampro.produit
    et qui fonctionne, grâce à toi.
    J'ai en plus rajouté un regroupement supplémentaire, ainsi qu'une petite jointure (allez, c'est la fête !! )

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

Discussions similaires

  1. sql nouveau champ pour requéte
    Par tabulaire dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/08/2006, 16h16
  2. Réponses: 1
    Dernier message: 08/02/2006, 17h17
  3. transmettre valeur d'un champ à une requête
    Par zut94 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 16h23
  4. Réponses: 4
    Dernier message: 13/09/2005, 11h50
  5. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55

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