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

VBA Access Discussion :

(A-03) Comment faire accepter par Access les dates inférieures à 01/01/0100?


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut (A-03) Comment faire accepter par Access les dates inférieures à 01/01/0100?
    Bonjour,

    J'utilise une connection ODBC pour extraire des données sur une base Oracle vers une base Access (ou éventuellement quelques données vers Excel).
    Dans la base source, il y a des dates qui peuvent être à 01/01/0001 (ne me demandez pas ce que cela signifie ).
    Et bien entendu, Access/VBA/Excel ne les acceptent pas.
    J'ai pu contourner le problème en mettant toutes les dates sources d'erreur à 01/01/1900 dans Access.
    Mais je demande quand même au cas où: Est-il possible (je ne sais pas, peut-être que c'est juste une option à modifier) de faire accepter ces dates par Access et/ou VBA (sans erreur) et/ou Excel?

    Ou du moins, que ces dates soient automatiquement arrondis à 01/01/1900 sans mettre des gestions d'erreur partout dans le code?

    Merci d'avance!

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    sur access, les dates sont valides entre le 1/1/100 et le 31/12/9999
    cf : http://mhubiche.developpez.com/vba/f...ions/datetime/

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Merci,
    Donc, déjà je peux mettre 01/01/0100 à la place de 01/01/1900 sur mes gestions d'erreurs. Merci

    Mais comme je le dis dans mon exemple, il y a des dates qui sont à 01/01/0001 dans la bdd source. => elles sont sources d'erreurs (c'est sûr) donc j'ai toujours pas résolu mon problème!!

    En gros, y a t-il un moyen de changer ces valeurs => "1/1/100 à 31/12/9999" en "1/1/1 à 31/12/9999"?

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Si ce ne sont pas des dates, mais du texte, tu mettras ce que tu veux ...

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Malheureusement, ce sont des champs de type date... et pour une autre utilisation, je ne peux changer le type du champ de ma table copie.

    Voici un extrait du code avec la petite gestion d'erreur:
    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
                If Existe(Nom_Table) Then 'And Existe("ALMR_" & Nom_Table) Then
                    If bool Then DoCmd.RunSQL "delete * from [" & Nom_Table & "];"
                    Set rs = cn.Execute("SELECT * FROM " & Nom_Table & " WHERE partition_key = '" & DAR & "0000' and (import_source like '%_888%' or import_source like '%_PTF01')")
                    Set Rst1 = Application.CurrentDb.OpenRecordset(Nom_Table, dbOpenTable, dbConsistent, dbOptimistic)
                    If Not rs.EOF Then
                        While Not rs.EOF
                            Rst1.AddNew
     
                            For i = 0 To rs.Fields.count - 1
                                TempC = rs(i).Name
                                If (Not IsNull(rs(TempC))) Then
                                    If Rst1(i).Type = dbDate Then
                                        On Error Resume Next
                                        Rst1(TempC) = rs(TempC)
                                        If Err.Number <> 0 Then
                                            Rst1(TempC) = CDate("01/01/0100")
                                            Err.Clear
                                        End If
                                        On Error GoTo erreur
                                    Else
                                        Rst1(TempC) = rs(TempC)
                                    End If
                                End If
                            Next i
                            Rst1.Update
                            rs.MoveNext
                        Wend
                    End If
                    rs.Close
                    Rst1.Close
                Else
                    MsgBox "La table " & Nom_Table & " n'a pu être mise à jour car elle est introuvable dans la base Access!", vbExclamation, "Erreur"
                End If
    Une autre fonction m'envoie des résultats de requêtes vers Excel avec la fonction "CopyFromRecordset", même problème... en plus sur Excel les dates sont elles limitées à 1/1/1900


    Le problème de ma solution de contournement, c'est que ce ne seront pas les bonnes valeurs qu'on retrouve dans la table copie (il y a des dates à 1/1/1 ou 1/12/3 ou autres...)

  6. #6
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Forcément.



    Tu n'as pas d'autres alternatives que celles-ci :
    - Dans Access, une Date est comprise entre le 01/01/100 et le 31/12/9999
    - Dans Excel, une date est comprise entre le 01/01/1900 et le 31/12/9999
    - Pour passer outre, il faut transformer le champ Date en champ Texte


    A choisir.

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Merci pour tes réponses.
    Mais vu que je ne peux changer la structure de mes tables à cause d'autres contraintes, je suis donc obligé de laisser comme tel.
    J'ai pas de solution .

Discussions similaires

  1. Comment faire accepter les accents é è ?
    Par éric1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/08/2009, 17h24
  2. Comment faire un critère avec les dates en JDBC
    Par demcoul dans le forum JDBC
    Réponses: 2
    Dernier message: 01/01/2009, 19h46
  3. Excel: Comment faire accepter les heures négatives?
    Par franck.bienvenot dans le forum Excel
    Réponses: 3
    Dernier message: 08/08/2008, 16h10
  4. Comment faire un Select avec les formulaires sous Access?
    Par kesamba dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/11/2007, 10h57
  5. comment faire insertion par une transaction sous access
    Par iam dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/04/2006, 14h34

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