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 :

requete sql et valeurs zappées (erreur d'execution '3464')


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut requete sql et valeurs zappées (erreur d'execution '3464')
    bonjour a tous,

    alors voila mon probleme je vais essayer de vous expliquer cela clairement:

    j'ai une table chaine dans laquelle j'ai 2 champs : jours_travaillés et mois_travaillés
    dans ces champs je stock les jour et mois d'execution de ma chaine.
    les données peuvent etres de 2 type : sois la valeur ALL qui signifie que la chaine tourne tout les jours ou tou les mois, soit le numéro du jours ou bien du mois quand elle tourne separés par une virgule s'il y en a plusiaeurs, exemple ma chaine tourne tout les jours des mois de octobre, novembre et decembre j'orais dans jours_travaillés "ALL" et dans mois travaillés "10,11,12"

    sur mon formulaire j'ai 2 champs : me.jour et me.mois dans lesquel je tape le jour et le mois que je veut visualiser et j'affiche le resultat dans une liste (merci au forum access^^), c'est a dire toutes les chaines qui tournent a cette date.

    seulement voila je vient de m'appersevoir d'une erreur ou plutot de 2:


    les mois ou jours qui contiennent "ALL" ne sont plus recuperer ni affichés (alors qu'avant oui)
    et si je tape par exemple "1" pour le jour cela me sortira aussi les jours qui contienent "12" par exemple.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT [nom_chaine],[libelle_periodicité]as Expr1, [heure_lancement],[heure_limite_execution],[jours_ouvrés (O/N)],[jours_feriés_travaillés] FROM periodicité INNER JOIN chaine ON [periodicité].[id_periodicité]=[chaine].[périodicité] WHERE (jours_travaillés LIKE '*" & Me.jour & "*' OR jours_travaillés='all') AND (mois_travaillés LIKE '*" & Me.mois & "*' OR mois_travaillés='all') ORDER BY heure_lancement;"
    je bloque sur cette requete depuis pas mal de temps

    je ne suis pas très doué en sql je suis debutant j'ai du modifier quelque chose mais je ne voit pas quoi, ou peut etre tout simplement une erreur de conception ou de debutant ^^

    j'espere que quelqu'un aura compris mon probleme et pourra m'apporter des elements de reponse.

    merci d'avance

    ps: je ne sais pas trop si j'ai mis le bon titre? doit je mettre [debutant] ou un signet dans ce genre ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Citation Envoyé par ben5985
    je tape par exemple "1" pour le jour cela me sortira aussi les jours qui contienent "12" par exemple.
    C'est normal que si tu utilise l'opérateur LIKE, tu retrouve aussi les jours 12.

    Je pense que tu dois créer ta propre fonction qui utilisera "Splite" (un petit coup de F1 te donnera toutes les infos dont tu as besoin sur cette fonction)

    Par exemple quelque chose de ce 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
    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
     
     
    Public Function fDate(Arg_travaille As String, Arg_recherche As Integer) As Boolean
    Dim Liste() As String
    Dim I As Integer
     
    'recherche dans Arg_travaille si on trouve Arg_recherche ou si Arg_travaille est = "all"
       On Error GoTo fDate_Error
     
    If Arg_travaille = "All" Then
        fDate = True
    Else
        Liste() = Split(Arg_travaille, ",")
        I = 0
        Do
            If CInt(Liste(I)) = Arg_recherche Then
                fDate = True
                Exit Do
            Else
                I = I + 1
            End If
        Loop
     
    End If
     
     
     
       On Error GoTo 0
     
    fDate_Exit:
     
         Exit Function
     
    fDate_Error:
        If Err.Number = 9 Then
            fDate = False
        Else
     
     
            MsgBox "Erreur inatendue N°" & Err.Number & " (" & Err.Description & ") dans la fonction/procedure fDate du module Module5"
            fDate = False
        End If
        GoTo fDate_Exit:
     
     
    End Function
    (A mettre dans un module)

    Ensuite tu changes ton Sql comme ça :

    Code Sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT [nom_chaine],[libelle_periodicité]as Expr1, [heure_lancement],[heure_limite_execution],[jours_ouvrés (O/N)],[jours_feriés_travaillés] FROM periodicité INNER JOIN chaine ON [periodicité].[id_periodicité]=[chaine].[périodicité] WHERE (fDate(jours_travaillés," & Me.jour & ")= True) AND (fDate(mois_travaillés," & Me.mois & ")=True) ORDER BY heure_lancement;"

    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    bonjour muhad'hib,
    j'ai fait comme tu me l'a indiqué, j'ai repris ton code mais quand j'execute j'ai me message d'erreur:

    erreur d'execution '3464'
    type de données incompatible dans l'expression du critère

    j'ai essayer de mettre des ' autours des guillemet pour les valeurs des champs me.jour et me.mois mais toujurs pareil et quand je lance le debugage il me situe l'erreur sur le recordset

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,


    Sur quelle ligne l'erreur ?
    Quel est le type de donnée de ton formulaire ? Texte ou numérique ?

    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    quand je lance le debuggeur il m'indique que c'est sur cette ligne la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset(sql)


    je recupere les valeur resultat de la requete dans un recordser que j'affiche par la suite dans une liste. le type de données du formulaire est du texte.
    pourtant il me recuepre bien les valeurs dans les champs du formulaire donc sa doit etre soit dans l'execution de la fonction soit dans le test de valeur ou alors au niveau du recordset ???

    a+ merci

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ajoute la référence Microsoft DAO à ton projet

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    microsoft dao 3.6 object library ? si c'est de celui la, je l'ai deja ajouter il y a quelque temps donc sa ne doit pas venir de la.

    merci quand meme

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,


    Si l'erreur est sur cette ligne ça ne doit pas venir de la fonction.

    2 choses à faire :

    - vérifier que rst est bien déclaré "Dim Rst as Dao.Recordset"
    - vérifier la syntaxe de la variable SQL :

    1. mettre un point d'arret sur la ligne d'erreur et avant l'execution de cette ligne, aller dans la fenètre d'execution (ctrl + G)
    2. faire :

      Code dans la fenètre d'execution : Sélectionner tout - Visualiser dans une fenêtre à part
      ? sql
    3. faire un copier du contenu de la variable sql
    4. coller dans l'interface sql d'une nouvelle requete

      => Tu aurras plus de détail sur le problème en ouvrant cette nouvelle requète




    Pour plus de détail sur cette vérif, consulte le tuto de débugage de Cafeine.

    A+

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    bonjour,
    rst est bien declaré comme dao.recordset
    j'ai suivi les etapes du debugage mais cela bloque toujours il me ressort la requete avec a l'interieur les valeurs entres au lieu des expressions mais tjrs pas de resultat et toujours la meme erreur '3464'

    est ce que cela pourrai venir de mon module ou de la fonction ??
    je suis completement perdu la

    je vous met le code au cas ou:

    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
    Sub btn_valider_Click()
     
    Me.Requery
    Dim sql As String, jour As String, mois As String
    Dim nbchaine As Long
    Dim rst As DAO.Recordset
     
    sql = "SELECT [nom_chaine],[libelle_periodicité], [heure_lancement],[heure_limite_execution],[jours_ouvrés (O/N)],[jours_feriés_travaillés] FROM periodicité INNER JOIN chaine ON [periodicité].[id_periodicité]=[chaine].[périodicité] WHERE (testplanning(jours_travaillés," & Me.jour & ")= True)AND (testplanning(mois_travaillés," & Me.mois & ")=True)ORDER BY heure_lancement;"
     
        If IsNull(Me.jour) Then
            MsgBox "Vous devez saisir un numero de jour"
            Exit Sub
        End If
     
        If IsNull(Me.mois) Then
            MsgBox "Vous devez saisir un numero de mois"
            Exit Sub
        End If
     
    Set rst = CurrentDb.OpenRecordset(sql)
    nbchaine = rst.RecordCount
     
        If nbchaine > 0 Then
            MsgBox "il y a " & nbchaine & " chaine pour cette date"
        Else
            MsgBox "il n'y a aucune chaine à cette date"
        End If
     
    ma_liste.RowSource = sql
     
    End Sub
    le souci est que c'est la fonctionnalité principale de mon projet et donc sans elle le projet est foutu

    merci de votre aide.
    a+

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Donnes nous le contenu de la variable sql au moment de l'ouverture du recordset, et ce que donne la création d'une requete à partir de ce sql.


    A+

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    au moment de l'ouverture du recordset sql vaut cette valeur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [nom_chaine],[libelle_periodicité], [heure_lancement],[heure_limite_execution],[jours_ouvrés (O/N)],[jours_feriés_travaillés] 
    FROM periodicité INNER JOIN chaine ON [periodicité].[id_periodicité]=[chaine].[périodicité] 
    WHERE (testplanning(jours_travaillés,6)= True)AND (testplanning(mois_travaillés,12)=True)ORDER BY heure_lancement;


    j'ai suivi le tuto de cafeine et j'ai utiliser debug.print sql

    quand je creer une requete avec sa j'obtient le message d'erreur type de données incompatibles dans l'expression du critere.

    sinon je t'ai repondu par mp muhad'hib et je t'ai envoyer les fichier

    merci

  12. #12
    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,

    Il manque un espace avant ORDER BY et on ne sait de quelle table sont issus les champs : jours_travaillés et mois_travaillés
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    salut cafeine, j'ai modifier la requete en rajoutant l'espace devant order by et la table des champs jour_travaillés et mois_travaillés comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT [nom_chaine],[libelle_periodicité], [heure_lancement],[heure_limite_execution],[jours_ouvrés (O/N)],[jours_feriés_travaillés] FROM periodicité INNER JOIN chaine ON [periodicité].[id_periodicité]=[chaine].[périodicité] WHERE (testplanning([chaine].[jours_travaillés]," & Me.jour & ")= True)AND (testplanning([chaine].[mois_travaillés]," & Me.mois & ")=True) ORDER BY heure_lancement;"
    mais toujours la meme erreur

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    J'ai bien récupéré ta base.

    Citation Envoyé par ben5985
    les données peuvent etres de 2 type : sois la valeur ALL qui signifie que la chaine tourne tout les jours ou tou les mois, soit le numéro du jours ou bien du mois quand elle tourne separés par une virgule s'il y en a plusiaeurs
    Mais si tu as des données de test qui ne respectent pas ce format, ça provoquera une erreur. Modifie donc les enregistrements de test qui ont, par exemple, "g" ou même rien , dans les champs "jours_travaillés" et "mois_travaillés", et ça marche beaucoup mieux

    Ou alors, modifie ton besoin pour ces 2 champs et inclus ces cas de figure dans la fonction.

    A+

  15. #15
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    salut,

    j'ai modifier les données qui ne respecter pas le type, en effet tu a raison l'erreur venait de la, je n'avait pas remarquer la ligne du "g" et c"est ça qui fichait tout en l'air c'est vraiment une erreur bete
    sa fonctionne nikel maintenand.

    un grand merci en tout cas pour le coup de main. c'est vraiment super sympa d'avoir pris du temps surtout pour un truc aussi bete.

    merci beaucoup A+

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

Discussions similaires

  1. requete SQL sur valeurs manquantes
    Par Souri84 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2011, 20h41
  2. Requete sql vers ORACLE qui renvoi une erreur
    Par lilou77 dans le forum Oracle
    Réponses: 7
    Dernier message: 29/01/2007, 09h52
  3. [WinDev 10] Requête SQL - Récupérer valeur de la liste
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 22
    Dernier message: 23/10/2006, 23h55
  4. requete SQL avec valeur max
    Par oeil de nuit dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 08h58
  5. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

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