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

Access Discussion :

Recordset et Date : Types incompatibles !


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 114
    Points : 46
    Points
    46
    Par défaut Recordset et Date : Types incompatibles !
    Bonjour,

    Je dispose d'une requête faisant appel à un type date ... malheureusement, le problème de compatibilité se pose !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Set Bds = CurrentDb
    Rq = "SELECT Persacces.per_code_acc AS code FROM Persacces "
    Set RstPersonne = Bds.OpenRecordset(Rq)
    If RstPersonne.RecordCount > 0 Then 'valide
            RstPersonne.MoveLast
            RstPersonne.MoveFirst
     
       While Not RstPersonne.EOF
          'Rq = "SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & code & " AND  Pointage.Poin_date =  " & JourX & " "
          'req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date =  " & jourX & " "
          req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date = #21/07/2005# "
          Set RstPointage = Bds.OpenRecordset(req)
    Merci

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,
    il faut mettre des # autour de tes variable.
    donc on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set Bds = CurrentDb 
    Rq = "SELECT Persacces.per_code_acc AS code FROM Persacces " 
    Set RstPersonne = Bds.OpenRecordset(Rq) 
    If RstPersonne.RecordCount > 0 Then 'valide 
            RstPersonne.MoveLast 
            RstPersonne.MoveFirst 
     
       While Not RstPersonne.EOF 
          'Rq = "SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & code & " AND  Pointage.Poin_date = # " & JourX & "# " 
          'req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date =  #" & jourX & "# " 
          req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date = #21/07/2005# " 
          Set RstPointage = Bds.OpenRecordset(req)

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: Recordset et Date : Types incompatibles !
    Bonjour,

    Attention au format de date US qui doit respecter l'ordre:
    MOIS / JOUR / ANNEE.

    Donc dans ton cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date = #07/21/2005# "
    Eh les amis, connaissez vous BuildCriteria ? Vous verrez que ça peut-être utile !

    =JBO=

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 114
    Points : 46
    Points
    46
    Par défaut
    Okay merci pour l'info

    Mon objectif est de calculer une durée entre une Heure de début (comprise en 12H et 14H) et une Heure de fin (comprise également entre 12 H et 14 H).

    Malheureusement, mon code ne fonctionne pas correctement :

    jourX = #12/5/2005#


    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
    48
    49
    50
    51
    52
    53
    54
    Set Bds = CurrentDb
    Rq = "SELECT Persacces.per_code_acc AS code FROM Persacces"
    Set RstPersonne = Bds.OpenRecordset(Rq)
     
    If RstPersonne.RecordCount > 0 Then 'valide
            RstPersonne.MoveLast
            RstPersonne.MoveFirst
     
     
       While Not RstPersonne.EOF
          'Rq = "SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & code & " AND  Pointage.Poin_date =  " & JourX & " "
           Rq = "SELECT Pointage.Poin_date, Pointage.Poin_no_carte, * FROM pointage WHERE (((Pointage.Poin_date)= #" & jourX & "# )) AND ((pointage.poin_no_carte) = '" & RstPersonne!code & "')"
               'Rq = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  Pointage.Poin_date = # 7/21/2005 # "
           'Rq = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  (((Pointage.Poin_date)=# 7/21/2005 #) "
     
          Set RstPointage = Bds.OpenRecordset(Rq)
     
    nbpointage = RstPointage.RecordCount
     
          If nbpointage > 0 Then
             RstPointage.MoveLast
             RstPointage.MoveFirst
     
             If RstPointage.RecordCount Mod 2 = 1 Then
                ' Nombre d'enregistrement impair : Message d'erreur de pointage
                MsgBox ("Erreur de pointage")
                Exit Sub
             End If
     
     
     
             Select Case RstPointage.RecordCount
                Case 2
                   Absence = 0
                   Pausedej = 0
                   MsgBox ("Pointage OK")
     
                Case 4
                   For i = 1 To 4
                      HeureDeb = RstPointage!Poin_heure
                      MsgBox (HeureDeb)
                      RstPointage.MoveNext
     
                      HeureFin = RstPointage!Poin_heure
                      RstPointage.MoveNext
                      MsgBox (HeureFin)
     
                      If HeureDeb >= TimeSerial(12, 0, 0) And HeureDeb <= TimeSerial(14, 0, 0) And HeureFin >= TimeSerial(12, 0, 0) And HeureFin <= TimeSerial(14, 0, 0) Then
                         Absence = 0
                         Pausedej = HeureFin - HeureDeb
                         'MsgBox (Pausedej)
                      End If
     
                    Next i
    Il m'affiche les Recordset mais ne calcul pas la durée

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: Recordset et Date : Types incompatibles !
    Pour répondre sur le Pb de syntaxe SQL pour JourX, tu dois construire correctement le critère sur la date.

    Access propose la fonction BuildCriteria qui se charge de construire le critère en respectant la syntaxe du SQL et le type de données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = " SELECT * FROM Pointage WHERE Pointage.Poin_no_carte = " & RstPersonne!code & " AND  "  & BuildCriteria("Pointage.Poin_date", dbDate, jourX)
    Merci Access !


    P.S. Je vois que tu as posé le Pb du calcul de la durée dans un autre post. Alors je vais essayer de t'aider ICI.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 114
    Points : 46
    Points
    46
    Par défaut
    Okay, j'ai trouvé mais merci tout de même pour m'avoir fait connaître le BuildCriteria...

    Pourquoi lorsque j'affecte à ma variable JourX une référence à un champ, ca bug ?

    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
    jourX = Me.TxtDate
     
    Set Bds = CurrentDb
    Rq = "SELECT Persacces.per_code_acc AS code FROM Persacces"
    Set RstPersonne = Bds.OpenRecordset(Rq)
     
    If RstPersonne.RecordCount > 0 Then 'Le salarié existe-t-il ?
            RstPersonne.MoveLast
            RstPersonne.MoveFirst
     
     
       While Not RstPersonne.EOF 'Fin du Recordset
           Rq = "SELECT Pointage.Poin_date, Pointage.Poin_no_carte, * FROM pointage WHERE (((Pointage.Poin_date)= #" & jourX & "# )) AND ((pointage.poin_no_carte) = '" & RstPersonne!code & "')"
     
          Set RstPointage = Bds.OpenRecordset(Rq)
    JourX recoit bien la valeur, mais apparement, il n'arrive pas à la traiter par la suite ?!

Discussions similaires

  1. [VB.NET] Type Incompatible
    Par Cyrilange dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/11/2009, 20h08
  2. date argument type incompatible
    Par samtheh dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/06/2007, 09h45
  3. ODBC Access => Type Incompatible avec un champ DATE ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 23/04/2005, 02h02
  4. [Recordset] Incompatibilté de type avec une requête
    Par lbourlet dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 15h52
  5. [LG]Problême "types incompatibles"
    Par pierrOPSG dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2004, 21h34

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