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 :

Remplacer une valeur par une autre à partir d'une requête [AC-2000]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 100
    Points : 56
    Points
    56
    Par défaut Remplacer une valeur par une autre à partir d'une requête
    Bonjour à tous

    Je poste cette discussion car à un moment à avoir essayer de faire dans le forum et la FAQ je ne trouve pas mon bonheur.
    Dans une table ODBC qui se trouve sur notre serveur entreprise, les dates sont sous la forme de texte comme par exemple la date d'aujourd'hui est inscrite de la façon suivante : 20090810. Quand la date n'est pas renseignée il y ait inscrit 00000000. Dans mon formulaire et dans ma table access il faut que je le transforme en champs date et remettre dans l'ordre. Ca j'ai réussi. Le soucis c'est que quand c'est inscrit "00000000" access mon le transforme en 30/11/1999. Ce qui n'ait pas correct car cette date peut porter à confusion.
    Je me suis dis, il suffit tout simplement, dans ma requète de remplacer le texte 00000000 par 19010101 par exemple.
    Ma table s'appele [PARC MACHINE] mon champs contenant les valeurs à modifier s'appele DATEI. A savoir que je ne peux pas modifier la table existant.
    Dans la requète correspondant au contenu du champs de mon formulaire voici où j'en suis arrivé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT [TYPE MACHINE].TYPMA, [PARC MACHINE].NUMSER, DateSerial(Mid([DATEI],1,4),Mid([DATEI],5,2),Mid([DATEI],7,2)) AS DATEINSTALL, DateSerial(Mid([DATEG],1,4),Mid([DATEG],5,2),Mid([DATEG],7,2)) AS DATEGARANTIE
    FROM ([TYPE MACHINE] LEFT JOIN [PARC MACHINE] ON [TYPE MACHINE].IDENT = [PARC MACHINE].TYPMAC) LEFT JOIN CLIENTS ON [PARC MACHINE].PMCLID = CLIENTS.IDENT
    WHERE (([PARC MACHINE].PMCLID)=[IDENTCLIENT]))
    ORDER BY [TYPE MACHINE].TYPMA, [PARC MACHINE].NUMSER;
    J'ai essayer de mettre dans la case critère de ma requète pour le champs DATEI le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([PARC MACHINE].DATEI)="UPDATE [PARC MACHINE] SET 19010101 WHERE 00000000 "
    Est-ce que quelqu'un peut me dire si je fais fausse route ou pas.
    Merci d'avance.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 179
    Points
    179
    Par défaut
    Bonjour,

    Alors, ton UPDATE n'es pas bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([PARC MACHINE].DATEI)="UPDATE [PARC MACHINE] SET 19010101 WHERE 00000000 "
    il faudrait écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([PARC MACHINE].DATEI)="UPDATE [PARC MACHINE] SET DATEI = '19010101' WHERE DATEI = '00000000' "
    Mais cela ne servira à rien car :
    A savoir que je ne peux pas modifier la table existante.
    ce que tu peux faire, c'est un traitement après ta requête. Tu fais une boucle while qui vérifie pour chaque enregistrement si tu as '00000000', et si oui, cela met '01011900' par exemple

    Cela te donnerai quelque chose du genre :

    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
     
     
      Dim RSQL As String
      Set db = CurrentDb
     
    ' Affichage des Organismes et Contacts
      RSQL = "TA REQUETE SELECT"
      Set rs = db.OpenRecordset(RSQL)
     
    ' S'il n'est pas vide on va au premier enregistrement
      If Not rs.EOF Then
          rs.MoveFirst
        ' Tant qu'on est pas arrivé à la fin du recordset
          While Not rs.EOF
           if rs!DATEI = "00000000" Then
            rs!DATEI = "01011900"   ' je ne suis pas sur que l'on puisse faire sa, le mieux serais de mettre ton champs ici
          End If
           'On passe à l'enregistrement suivant
              rs.MoveNext
          Wend
      End If

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 690
    Points : 57 225
    Points
    57 225
    Billets dans le blog
    40
    Par défaut
    bonjour,

    une autre solution peut être,

    remplacer:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...DateSerial(Mid([DATEI],1,4),Mid([DATEI],5,2),Mid([DATEI],7,2)) AS DATEINSTALL

    par:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...iif([DATEI]="00000000",NULL,DateSerial(Mid([DATEI],1,4),Mid([DATEI],5,2),Mid([DATEI],7,2))) AS DATEINSTALL

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Petite variante de la proposition de f-leb,
    si tu ne veux pas de valeur nulle, tu peux mettre ton 01/01/1901:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...iif([DATEI]="00000000",#01011901#,DateSerial(Mid([DATEI],1,4),Mid([DATEI],5,2),Mid([DATEI],7,2))) AS DATEINSTALL
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 100
    Points : 56
    Points
    56
    Par défaut
    Bonjour à tous et merci pour vos réponse.

    Silverfly merci pour ta réponse mais je ne l'ai pas essayer. Elle me semblait trop compliquer.
    Pour f-leb et mout1234 cette solution fonctionne comme je le veux. Le champs vide me convient parfaitement au lieu d'une date bidon.
    Merci encore pour votre aide.

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

Discussions similaires

  1. XL 2007: Remplacer des valeurs par d'autres sur une autre feuille
    Par redhotchilipeppers dans le forum Excel
    Réponses: 2
    Dernier message: 26/11/2014, 11h23
  2. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  3. Remplacer une valeur par un autre
    Par zorro13 dans le forum ANT
    Réponses: 7
    Dernier message: 26/09/2007, 15h55
  4. Valeur par defaut a partir d'une variable vba ?
    Par Alpha31 dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2006, 16h00
  5. Affecter une valeur à un DBGRID a partir d'une requette !!
    Par nil dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/11/2005, 12h02

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