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

Runtime Discussion :

Filtre sous-formulaire Exécuté par SQL Server => Erreur format Datetime [AC-2007]


Sujet :

Runtime

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut Filtre sous-formulaire Exécuté par SQL Server => Erreur format Datetime
    Bonjour,

    Dans ma base de donnée Access 2007 Frontale MaBase.accdb ou version Runtime Mabase.accdr, J'ai le même formulaire principal frmHumain contenant un sous-formulaire sfrmEvents.
    Tous les deux ont pour des .RecordSource des tables liées au SQL Server Express 2008 via OCDB sans DSN: DSNless.

    Pour filtrer les évènements de quelqu'un de cette année j'ai utilisé un filtre suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    frmHumain.Form!sfrmEvents.Form.Filter = "(DateEvent >= #2010-01-01 00:00:00#) AND (DateEvent <= #2010-12-31 23:59:59#)"
    frmHumain.Form!sfrmEvents.Form.FilterOn = True
    Cela fonctionne très bien le couple Access 2007 - SQL Server 2008 Express dans MaBase.accdb, Mais dans la version Runtime MaBase.accdr,
    Le format de date cause erreur.
    Ma question, le filtre d'un sous-formulaire dans le projet Access 2007 Runtime est exécuté par SQL Server ?

    Faut-il convertir les datetime en format Transact-SQL comme suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    frmHumain.Form!sfrmEvents.Form.Filter = "(DateEvent >= '2010-01-01T00:00:00') AND (DateEvent <= '2010-12-31T23:59:59')"
    frmHumain.Form!sfrmEvents.Form.FilterOn = True
    Avez-vous eu des problèmes similaires ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    Bonjour,
    avec sql server
    utiliser filter à la place de filter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    frmHumain.Form!sfrmEvents.Form.Filter = "(DateEvent >= '2010-01-01T00:00:00') AND (DateEvent <= '2010-12-31T23:59:59')"
    frmHumain.Form!sfrmEvents.Form.FilterOn = True
    remplacer '2010-12-31T23:59:59' par '31/12/2010 23:59:59' si le server est en français
    Bon WE

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Merci de ta réponse.
    Tu confirmes donc que le filtre formulaire est bien exécuté par SQL server ?
    Mais j'ai constaté que dans la version .accdb, base d'Access normale, ce même filtre est exécuté par Access en tant qu'engin frontal.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    C'est bizarre mais c'est comme çà,

    Je demande particulièrement l'attention d'ARGY s'il passe par là et s'il peut nous expliquer, s'il y a un BUG dans Access Runtime 2007 ?

    Il y a différence dans le format de datetime Access 2007 Version Complète et Runtime quand lié à SQL Server.

    Je précise tout d'abord que mon pronostic initial est erroné: les filtres des formulaires ne sont pas exécuté par SQL Server, mais par Access lui-même.

    Les expressions suivantes sont bonnes pour la période entre 01/03/2010 au 31/03/2010:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (DateEvent>=CDate('2010-03-01 00:00:00')) AND (DateEvent<=CDate('2010-03-31 23:59:59'))
    ' ou 
    (DateEvent>=40238) AND (DateEvent<=40268.9999884259)
    Nous constatons que la valeur numérique SERIAL DateTime Access est bien acceptée.


    Tous les tests suivants échouaient

    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
    
    ' Access yyyy-mm-dd hh:mm:ss.mmm:
    (DateEvent>='2010-03-01 00:00:00') AND (DateEvent<='2010-03-31 23:59:59')
    (DateEvent>=#2010-03-01 00:00:00#) AND (DateEvent<=#2010-03-31 23:59:59#)
    (DateEvent>=#01-03-2010 00:00:00#) AND (DateEvent<=#31-03-2010 23:59:59#)
    (DateEvent>=#03-01-2010 00:00:00#) AND (DateEvent<=#03-31-2010 23:59:59#)
    
    ' Access dd/mm/yyyy:
    (DateEvent>=#01/03/2010#) AND (DateEvent<=#31/03/2010#)
    
    ' Access dd/mm/yyyy hh:mm:ss.mmm, version Française:
    (DateEvent>=#01/03/2010 00:00:00#) AND (DateEvent<=#31/03/2010 23:59:59#)
    
    ' ISO yyyy-mm-ddThh:mm:ss.mmm SQL Server:
    (DateEvent>='2010-03-01T00:00:00') AND (DateEvent<='2010-03-31T23:59:59')
    (DateEvent>='2010-03-01T00:00:00.000') AND (DateEvent<='2010-03-31T23:59:59.000')
    
    ' Acces ISO yyyymmdd hh:mm:ss.mmm:
    (DateEvent>=#20100301#) AND (DateEvent<=#20100331#)
    
    ? Conclusion: en conjonction des conditions suivantes, un formulaire n'accepte pas l'expression littérale de datetime dans son filtre, il accepte seulement les valeurs numérique (SERIAL):
    1. Access 2007 Runtime.
    2. Tables liées au SQL Server.

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Là, je n'ai jamais été dans ce contexte et de plus, je n'utilise jamais les filtres dans mes dev mais que du dynamique via SQL et VBA...
    Je n'ai pas non plus de remontée de bug concernant le RT 2007.

    Toutefois, pour le fun, je te suggère la manip suivante :
    Créé une requête avec des critères identiques et lie-là à ton SF...
    Qu'est que ça donne ?
    Maintenant, tente la même expérience avec la même requête mais paramétrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BETWEEN [Quelle date Début ?] AND [Quelle date Fin ?]
    Qu'est que ça donne ?

    A toi...

    Argy

    P.S. Mais tu dis user d'un ACCDR ; dois-je comprendre que tu simules le mode Runtime ou bien tes investigations tournent sur le RT déployé sur un autre poste que le tiens ?
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Bonjour,

    Je suis de passage au forum. Je ferais le test et te tiendrai au courant.


    Citation Envoyé par argyronet Voir le message
    Mais tu dis user d'un ACCDR ; dois-je comprendre que tu simules le mode Runtime ou bien tes investigations tournent sur le RT déployé sur un autre poste que le tiens ?
    Oui, c'est bien Runtime 2007 installé sur un poste non développeur.
    Par ailleurs j'ai testé cette fonction qui retourne Vrai, ce qui certifie que j'étais sur Runtime:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function appIsRuntime() As Boolean
    '
      appIsRuntime = SysCmd(acSysCmdRuntime)
    '
    End Function
    Elle retourne faux avec le flag /Runtime d'Access Complet.

    à plus tard....

  7. #7
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut BON Filtre:
    Bonjour à toutes et tous,

    Enfin j'ai fini les tests comme Argy a suggéré.

    Je résume tout d'abord les filtrages testés pour le sous formulaire sfrmInputEvents:

    BON Filtre: format chaîne date convertie par fonction Aceess CDate():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ([DateBegin]>=CDate('2010-03-01 00:00:00')) AND ([DateBegin]<=CDate('2010-03-31 23:59:59'))
    Images attachées Images attachées  

  8. #8
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 2. Maivais Filtre:
    2. Maivais Filtre: date littérale standard Access qui ne passe pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([DateBegin]>=#2010-03-01 00:00:00#) AND ([DateBegin]<=#2010-03-31 23:59:59#))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    3146: ODBC -- l'appel a échoué.
    MauvaisFilter.jpg
    [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/or time from character string. (#241) [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/or time from character string. (#241)
    Images attachées Images attachées  

  9. #9
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 3. Maivais Filtre:
    3. Maivais Filtre: format standard SQL Server qui ne passe pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([DateBegin]>='2010-03-01T00:00:00') AND ([DateBegin]<='2010-03-31T23:59:59'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    3071: Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée. Par exemple, une expression numérique peut contenir des éléments trop compliqués. Essayez de la simplifier en en affectant des parties à des variables.
    
    Images attachées Images attachées  

  10. #10
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut Requêtes:
    Requêtes: La source de données du sous-formulaire sfrmInputEvents, d'origine la table tblEvents, est remplacée par une requête intégrant la clause WHERE pour limiter la période de dates. Le filtre maintenant est null .Filter="", et .FilterOn = False.

    1. BONNE requête: avec la clause WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM tblEvents
    WHERE (([DateBegin]>=CDate('2010-03-01 00:00:00')) 
       AND ([DateBegin]<=CDate('2010-03-31 23:59:59')))
    dans la requête: qrySelTstFrmsrcEventsDateFormatAccessCDate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ...sfrmInputEvents.RecordSource = "qrySelTstFrmsrcEventsDateFormatAccessCDate"
    Ca marche.

    2. Mauvaise requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([DateBegin]>=#2010-03-01 00:00:00#) AND ([DateBegin]<=#2010-03-31 23:59:59#))
    dans la requête: qrySelTstFrmsrcEventsDateFormatAccessDiese.

    Message d'erreur peut varier, je cite un d'entre eux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3238: ODBC -- Dépassement de capacité des données.

  11. #11
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 3. BONNE requête
    3. BONNE requête: date littérale Format SQL Server Standard passe ici dans la clause WHERE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([DateBegin]>='2010-03-01T00:00:00') AND ([DateBegin]<='2010-03-31T23:59:59'))
    dans la requête: qrySelTstFrmsrcEventsDateFormatSqlServer,

    J'ai testé deux modes: requête locale Access 2007, et requête Pass-Through.

    La requête locale ne marche pas, mais la requête Pass-Through marche.
    C'est rien surprenant, puisqu'elle est forcément exécutée directement par SQL Server.

    La même expression ne passe pas en tant que filtre...

  12. #12
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 4. BONNE requête avec BETWEEN:
    4. BONNE requête avec BETWEEN paramétrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BETWEEN [Quelle date Début ?] AND [Quelle date Fin ?]
    dans la requête: qrySelTstFrmsrcEventsDateFormatBetween.

    Assignation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...sfrmInputEvents.RecordSource = "qrySelTstFrmsrcEventsDateFormatBetween"
    J'ai essayé d'entrer les dates aussi bien en Français: 01/03/2010 puis 31/03/2010
    qu'en format ISO: 2010-03-01 puis 2010-03-31 dans la boîte popup d'Access 2007,
    ça marche dans tous les cas.

  13. #13
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut Interrogation
    Mon interrogation grandit, vus ces éléments, il me semble qu'Access Runtime 2007 passe une partie des filtres ou de requêtes en tant que source de données (.RecordSource) au SQL Server pour traiter, les expressions littérales de dates sont assez confuses: Format Access #2010-03-01# ou format SQL Server '2010-03-01T00:00:00' ? à tester...

    Tant dis que dans Access 2007 ACCDB - format développeur/code VBA, les dates littérales ne sont acceptées qu'en format Access.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2009, 10h00
  2. Démarrage d'une macro par SQL Server
    Par PiercingDegree dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/09/2005, 09h13
  3. Pb filtre sous-formulaire
    Par fabrice518 dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2005, 17h11
  4. fonction utilisateur non reconue par sql server 2000
    Par ouedmouss dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/09/2005, 07h46
  5. Table ASCII utilisée par SQL Server
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2005, 14h31

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