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 :

soustraire deux lignes (désolée de la fausse manip)


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut soustraire deux lignes (désolée de la fausse manip)
    Je souhaiterais effectuer le calcul suivant sous access:
    j'ai une table contenant les champs suivants:
    - vitesse
    - accélération
    - décéleration

    le but est de savoir d'apres la vitesse, si je suis en accélération ou non. Pour cela, il faut que je fasse le delta entre chaque ligne de la vitesse que je divise par le 100ms (temps) et que je regarde si le résultat est supérieure à un seuil. si c'est le cas, alors je mets 1 dans le champs de l'accélération
    ex:
    temps | vitesse | acceleration | deceleration
    0 0 0 0
    100 ms 10 1 0
    200 ms 15 1 0
    300 ms 12 0 1
    tout d'abord est-ce possible de faire une soustraction entre deux lignes?
    et comment faire?

    merci beaucoup de votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu crées une table nommé matable
    avec deux champs au moins
    temps et vitesse

    tu saisis quelques données et tu testes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT matable.temps, matable.vitesse, DMax("temps","matable","temps <  #" & [matable].[temps] & "#") AS passésimple, DLookUp("vitesse","matable","temps =# " & DMax("temps","matable","temps <  #" & [matable].[temps] & "#") & "#") AS vitesse_antérieure
    FROM matable
    WHERE (((matable.temps)<>DMin("temps","matable")));

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    je viens d'essayer ce que vous m'avez envoyé, mais ca m'écrit dans matable pour les champs passésimple et vitesse-antérieure ceci: #Erreur

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    temps est bien déclaré en date heure ? il existe au moins deux lignes ?
    quelle vesion d'access ??

    j'ai testé avant le post sans problème chez moi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    en fait, temps est déclaré en numérique car je relève les valeurs tous les 100 ms sur une durée de qqs minute, donc le delta temps est tjrs égale à 100ms
    (N.B.: version access 2003)

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [matable].[temps], [matable].[vitesse], DMax("temps","matable","temps <  " & [matable].[temps] ) AS passésimple, DLookUp("vitesse","matable","temps = " & DMax("temps","matable","temps <  " & [matable].[temps]  )  ) AS vitesse_antérieure
    FROM matable
    WHERE ((([matable].[temps])<>DMin("temps","matable")));

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    c'est bon ca marche
    merci d'avoir consacrer du temps sur mon problème.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Juste pour info, pourriez vous m'expliquez la synthaxe de cette requête, car je ne comprends pas tout.

    merci pour votre réponse.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    DMax("temps","matable","temps < " & [matable].[temps] ) AS passésimple


    utilise la fonction de domaine dmax qui renvoie la valeur maximale
    d'un ensenble défini par

    temps colonne où la fonction va chercher le max
    matable table (ou reqête) dans laquelle chercher la colonne

    temp < critère

    matable.temps va renvoyer la valeur précédent

    en langage clair je vais pour une valeur de temps chercher parmi toutes les valeurs qui lui sont inférieures la plus grande

    le reste n'est qu'une extrapolation pour dire
    que je ne prends pas la première valeur qui n'a pas de précédente
    et que je veux la vitesse pour cette valeur de temps

    en effet
    DMin("temps","matable") renvoie al première valeur de temps (minima)
    et
    DLookUp("vitesse","matable","temps = " & DMax("temps","matable","temps < " & [matable].[temps] )

    cherche la vitesse au temps passé simple

    l'aide explique les fonctions de domaine


    nb on peut faire la même chose avec une sous requête , avec une multiplication cartésienne, ou par du code, si les données sont saisies
    sur un formulaire on se contera d'une reqête sur max(temps) pour nourrir
    deux contrôles (temps antérieur, et vitesse antérieure)
    et on ajoutera l'accélèration à la volée

    ps l'accélération se calculant il n'est pas nécessaire de la conserver sauf
    si on interroge fréquemment la base sur cette valeur

    la décélération n'est qu'une accélèration négative pourquoi deux champs ?

    d'autre part à vue de nez je flaire une accélèration calculée par simple
    interpolation linéaire.. ce qui n'est pas toujours le cas...

    ps j'aimerais avoir la certitude que vous n'allez pas piloter un radar
    automatique

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Ne vous inquiétez pas ce n'est pas du tout son utilité et encore merci pour votre aide.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/01/2005, 19h54
  2. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44
  3. fausse manip
    Par guegré dans le forum Installation
    Réponses: 3
    Dernier message: 19/07/2004, 16h13
  4. Deux lignes sur un TButton
    Par bml dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2003, 11h17
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

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