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 :

[SQL] Supprimer une ligne en fonction d'un type de champs


Sujet :

Requêtes et SQL.

  1. #1
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut [SQL] Supprimer une ligne en fonction d'un type de champs
    Bonjour,

    Je dois supprimer une ligne de ma table Access mais la syntaxe n'est pas la meme en fonction du type de champs :

    Par exemple, avec un champs VarChar la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequeteSQL = "DELETE FROM " & "[" & NomTable & "]" & " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " ='" & Valeur_Du_Champs & "'"
    Avec un type INT, il faut enlever les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequeteSQL = "DELETE FROM " & "[" & NomTable & "]" & " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " =" & Valeur_Du_Champs
    Quelle est la syntaxe pour le champs de type DECIMAL, CHAR, DATE et DATETIME ?

    Merci de votre aide.
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,
    Si je ne me trompe pas, il me semble que:
    DECIMAL idem que INT
    CHAR idem que VARCHAR
    DATE et DATETIME, il faut utiliser le délimiteur dièse (#) comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RequeteSQL = "DELETE FROM " & "[" & NomTable & "]" & " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " =#" & Valeur_Du_Champs & "#"
    Bon courage et @+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  3. #3
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Salut donc ca marche pour tous excepté DATE ! La syntaxe a l'air bonne car je n'ai pas de message d'erreur mais l'enregistrement n'est pas effacé
    (date sous cette forme : 14/11/1958)

    De plus pour le decimal ca marche si on met un point à la place de la virgule alors lors de l'insertion de l'element decimal il faut mettre une virgule sinon Access rejete la requete

    Une idée ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    essaie de formater ta date en format US

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " =#" & Format(Valeur_Du_Champs, "mm/dd/yyyy") & "#"
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  5. #5
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Merci mais sans succés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     RequeteSQL = "DELETE FROM " & "[" & NomTable & "]" & " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " =#" & Format(Valeur_Du_Champs, "mm/dd/yyyy") & "#"
    J'ai le message d'erreur suivant : Erreur de syntaxe dans la date dans l'expression '[champ 3] = #18/07/1988#'

    PS : Dans Access ma date est bien ajouté avec le format Francais...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    lol, impossible d'avoir un mois = 18

    fais nous un debug.print de ta chaine SQL ?

    Sinon au pire, tu passes par des double

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDbl([Champ3]) = CDbl([TaValeurDate])
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Ah bah ok, la fonction Format retourne "mm/dd/yyyy" dans tous les cas quelque soit la valeur de Valeur_Du_Champs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(Valeur_Du_Champs, "mm/dd/yyyy")
    SInon j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      RequeteSQL = "DELETE FROM " & "[" & NomTable & "]" & " WHERE " & "[" & Champs_Pour_La_Condition & "]" & " =#" & Format(Valeur_Du_Champs, "mm/dd/yyyy") & "#"
                        Debug.Print(RequeteSQL)
    Mais c'est cencé faire quoi ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  8. #8
    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 : 54
    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
    Déjà, tu pourrais éviter pas mal d'opérations inutiles qui rendent ton code encore plus difficile à lire qu'il ne l'est :
    Ceci devrait, normalement, fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RequeteSQL = "DELETE FROM [" & NomTable & "] WHERE [" & Champs_Pour_La_Condition & "] =#" & Format(Valeur_Du_Champs, "mm/dd/yyyy") & "#"
    Ensuite, une solution autre est celle proposée par cafeine (coucou cafeine ! ca faisait longtemps ! content de te revoir parmi nous )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RequeteSQL = "DELETE FROM [" & NomTable & "] WHERE CDbl([" & Champs_Pour_La_Condition & "]) =Cdbl(" & Valeur_Du_Champs & ")"

    Enfin, si ca te pose un problème dans l'usage de Format, je serai curieux que tu m'indiques (après être allé vérifier dans la table) le type de données du champs que tu passes dans Valeur_Du_Champs. Ou au moins le type de données de la variable Valeur_Du_Champ.

    En effet, si tu passes dans Valeur_Du_Champ une chaîne telle que
    "14/16/2005", tu obtiendras forcément la chaîne que tu as passé dedans !
    C'est une chaîne, et pas une date !
    Par contre, tu peux tenter de convertir ta chaine en date, à la volée, avec CDate()

    Ce qui donnera donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RequeteSQL = "DELETE FROM [" & NomTable & "] WHERE [" & Champs_Pour_La_Condition & "] =#" & Format(CDate(Valeur_Du_Champs), "mm/dd/yyyy") & "#"

  9. #9
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Oui exact il faut convertir en DATE la chaine et en plus ca doit etre une date US pour que ca marche.

    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(CDate(Valeur_Du_Champs), "mm/dd/yyyy")
    retourne 00/14/4785 pour une date francaise de 14/02/4785"

    Je devrais avoir normalement 02/14/4785
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  10. #10
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Finalement j'ai trouvé une solution pour convertir la date en format US :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Function DateUs(ByVal X As Date) As String
            DateUs = CStr(X.Month & "/" & X.Day & "/" & X.Year)
        End Function
    C'est simple et ca tien en 3 lignes !

    Merci à tous
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. [XL-2003] supprimer une ligne en fonction d'une date
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 20h55
  3. [XL-2003] Supprimer une ligne en fonction d'une valeur de cellule
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/09/2009, 17h20
  4. Réponses: 2
    Dernier message: 15/09/2008, 11h42
  5. [Sql] supprimer une ligne d'une vue
    Par ciol2.6.12 dans le forum Oracle
    Réponses: 1
    Dernier message: 08/03/2006, 15h48

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