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 :

Requête ou fonction pour créer une liste de nombres de 1 à 28, 29, 30 ou 31 jours selon une date


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut Requête ou fonction pour créer une liste de nombres de 1 à 28, 29, 30 ou 31 jours selon une date
    Bonjour à tous,
    Je souhaiterais créer une liste de nombres de nombres de 1 à 28, 29, 30 ou 31 jours selon une date,
    par exemple pour 16/6/2018 je souhaiterais obtenir cette liste sous forme de reqûête ou table de 1 à 30
    soit par une requête ou par une fonction.
    Merci par avance pour votre réponse
    Pierre

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Et cette date provient de quel objet ? tbl, form ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,

    Comment ferais-tu ça à la main ?

    ... Voilà, tu as ton algorithme.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Et cette date provient de quel objet ? tbl, form ?
    Cette date se trouve dans un contrôle de formulaire

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Une solution basique
    Créer une tbl (T_NumJour) avec un seul champ (NumJour) et de saisir de 1 à 31
    Dans ton formulaire créer une zone de texte indépendante (NumJour) et insérer dans sa source contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Jour(SérieDate(Année([MonChampDate]);Mois([MonChampDate])+1;1)-1)
    Créer une req
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T_NumJour.NumJour FROM T_NumJour WHERE T_NumJour.NumJour Between 1 And [Forms]![MonForm]![NumJour]));
    EDIT : 20:58 Sinon j'ai un truc plus sympa
    Consiste via évènement sur click d'un btn de commande dans ton formulaire de créer une table temporaire (T_NumJour_tmp) avec un seul champ (idNum) et de l'alimenter de 1 à 28, 29, 30 ou 31, calculé avec Day(DateSerial(Year([dateTbl1]),Month([dateTbl1])+1,1)-1)

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub EXEC_SQL_Click()
    On Error GoTo Err_EXEC_SQL_Click
        DoCmd.SetWarnings False
        Dim dbs As Database
        Dim qdf As DAO.QueryDef
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
        Dim prp As DAO.Property
        Dim ind As DAO.Index
        Dim rst As DAO.Recordset, rst1 As DAO.Recordset
        Dim SqlStr As String
        Dim i As Long
     
        Set dbs = CurrentDb()
        Set tdf = dbs.CreateTableDef("T_NumJour_tmp")
        With tdf
            .Fields.Append .CreateField("idNum", dbLong)
        End With
        tdf.Fields("idNum").Attributes = dbAutoIncrField
        dbs.TableDefs.Append tdf
        Set ind = tdf.CreateIndex("idNum")
        Set fld = ind.CreateField("idNum", dbLong)
        ind.Fields.Append fld
        ind.Primary = True
        tdf.Indexes.Append ind
        tdf.Indexes.Refresh
        Set tdf = Nothing
        SqlStr = "SELECT Table1.idTbl1, Table1.dateTbl1, Day(DateSerial(Year([dateTbl1]),Month([dateTbl1])+1,1)-1) AS DernierJour FROM Table1 WHERE idTbl1 =" & Me!idTbl1
        Set rst = dbs.OpenRecordset(SqlStr, dbOpenDynaset)
        Set tdf = dbs.TableDefs("T_NumJour_tmp")
        Set rst1 = tdf.OpenRecordset(dbOpenDynaset)
        For i = 1 To rst!DernierJour
        rst1.AddNew
        rst1.Fields("idNum") = i
        rst1.Update
        Next i
        DoCmd.SetWarnings True
        RefreshDatabaseWindow
    Exit_EXEC_SQL_Click:
        Set rst1 = Nothing
        Set rst = Nothing
        Set dbs = Nothing
        Exit Sub
    Err_EXEC_SQL_Click:
        MsgBox Err.Description
        Resume Exit_EXEC_SQL_Click
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Close()
        DoCmd.SetWarnings False
        DoCmd.DeleteObject acTable, "T_NumJour_tmp"
        DoCmd.SetWarnings True
        RefreshDatabaseWindow
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Une solution basique
    Créer une tbl (T_NumJour) avec un seul champ (NumJour) et de saisir de 1 à 31
    Dans ton formulaire créer une zone de texte indépendante (NumJour) et insérer dans sa source contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Jour(SérieDate(Année([MonChampDate]);Mois([MonChampDate])+1;1)-1)
    Créer une req
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT T_NumJour.NumJour FROM T_NumJour WHERE T_NumJour.NumJour Between 1 And [Forms]![MonForm]![NumJour]));
    EDIT : 20:58 Sinon j'ai un truc plus sympa
    Consiste via évènement sur click d'un btn de commande dans ton formulaire de créer une table temporaire (T_NumJour_tmp) avec un seul champ (idNum) et de l'alimenter de 1 à 28, 29, 30 ou 31, calculé avec Day(DateSerial(Year([dateTbl1]),Month([dateTbl1])+1,1)-1)

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub EXEC_SQL_Click()
    On Error GoTo Err_EXEC_SQL_Click
        DoCmd.SetWarnings False
        Dim dbs As Database
        Dim qdf As DAO.QueryDef
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
        Dim prp As DAO.Property
        Dim ind As DAO.Index
        Dim rst As DAO.Recordset, rst1 As DAO.Recordset
        Dim SqlStr As String
        Dim i As Long
     
        Set dbs = CurrentDb()
        Set tdf = dbs.CreateTableDef("T_NumJour_tmp")
        With tdf
            .Fields.Append .CreateField("idNum", dbLong)
        End With
        tdf.Fields("idNum").Attributes = dbAutoIncrField
        dbs.TableDefs.Append tdf
        Set ind = tdf.CreateIndex("idNum")
        Set fld = ind.CreateField("idNum", dbLong)
        ind.Fields.Append fld
        ind.Primary = True
        tdf.Indexes.Append ind
        tdf.Indexes.Refresh
        Set tdf = Nothing
        SqlStr = "SELECT Table1.idTbl1, Table1.dateTbl1, Day(DateSerial(Year([dateTbl1]),Month([dateTbl1])+1,1)-1) AS DernierJour FROM Table1 WHERE idTbl1 =" & Me!idTbl1
        Set rst = dbs.OpenRecordset(SqlStr, dbOpenDynaset)
        Set tdf = dbs.TableDefs("T_NumJour_tmp")
        Set rst1 = tdf.OpenRecordset(dbOpenDynaset)
        For i = 1 To rst!DernierJour
        rst1.AddNew
        rst1.Fields("idNum") = i
        rst1.Update
        Next i
        DoCmd.SetWarnings True
        RefreshDatabaseWindow
    Exit_EXEC_SQL_Click:
        Set rst1 = Nothing
        Set rst = Nothing
        Set dbs = Nothing
        Exit Sub
    Err_EXEC_SQL_Click:
        MsgBox Err.Description
        Resume Exit_EXEC_SQL_Click
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Close()
        DoCmd.SetWarnings False
        DoCmd.DeleteObject acTable, "T_NumJour_tmp"
        DoCmd.SetWarnings True
        RefreshDatabaseWindow
    End Sub
    Merci pour la réponse très complète.
    J'ai fait la première solution qui marche bien
    Mais le truc "très sympa" me tente beaucoup, mais j'ai un souci,
    je reçois le message d'erreur ci joint :Nom : Capture.PNG
Affichages : 152
Taille : 12,7 Ko
    Mes compétences en VBA ne sont pas assez élevées pour réparer le problème.

    Peut être as tu la solution
    Merci par avance
    Pierre

  7. #7
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    C'est normal. Ton form accueil devrait avoir pour source la Table1 composée de idTbl1, dateTbl1 et numjour. Après tu adaptes fonction de tes besoins.

    EDIT : 14:02 si tu renommes ta tbl et tes champs, n'oublies pas d'adapter la L28 (SqlStr) du troisième code et éventuellement L32 (For i = 1 ...).
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  8. #8
    Membre habitué Avatar de possible924
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2010
    Messages : 302
    Points : 159
    Points
    159
    Par défaut
    Merci pour ta réponse,
    j'ai fait les modifs suggérées et ça marche très bien.
    Je vais l'adapter à mon application.
    Merci pour ton aide
    Pierre

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/11/2013, 14h37
  2. [MySQL] Est-ce que cette requête est exacte pour créer une nouvelle table?
    Par guillaume7684 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/02/2011, 14h17
  3. Fonction pour créer des variables
    Par Spitfire 95 dans le forum Général Python
    Réponses: 21
    Dernier message: 10/12/2010, 20h21
  4. Créer une liste de nombre
    Par lpnj1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/12/2007, 10h39
  5. Réponses: 10
    Dernier message: 21/09/2006, 19h18

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