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 :

Type de données incompatible


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut Type de données incompatible
    Bonjour à tous,

    Je pédale un peu avec une requête selection simple a priori mais qui commence à me les c...

    Ma liste principale décrit des demandes avec pour chacune un tas d'information dont:
    - type de demande
    - date de saisie
    - date de réponse.

    Chaque type de demande a un délai théorique de réponse (date de réponse - date de saisie).
    Mon but est de faire resortir les demandes hors délais (en tenant compte des weekend, jours fériés ...).

    Jusque la j'utilisai 2 requêtes l'une derrière l'autre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT JourOuvres([DateEnregistrementMSX],Date())-[type_document]![délai]-JourOuvres((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin])),(IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut])))-JourOuvres((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin])),(IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut])))-JourOuvres((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin])),(IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))) AS depassement, table_unique.Ref_W, table_unique.TypeDocument, table_unique.DateEnregistrementMSX, IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut]) AS [DDC1-debut], IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin]) AS [DDC1-fin], IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut]) AS [DDC2-debut], IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin]) AS [DDC2-fin], IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]) AS [DDC3-debut], IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin]) AS [DDC3-fin], type_document.[suivi-delai]
    FROM table_unique INNER JOIN type_document ON table_unique.TypeDocument = type_document.[type_document-raccourci]
    WHERE (((table_unique.DateEnregistrementMSX)>Now()-60) AND ((IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin]))<>0) AND ((IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut]))=0) AND ((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin]))=0) AND ((IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))=0) AND ((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin]))=0) AND ((type_document.[suivi-delai])=Yes) AND ((table_unique.[FO-BO])="FO") AND ((table_unique.DateTraitement) Is Null)) OR (((table_unique.DateEnregistrementMSX)>Now()-60) AND ((IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut]))=0) AND ((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin]))=0) AND ((IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut]))=0) AND ((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin]))=0) AND ((IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))=0) AND ((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin]))=0) AND ((type_document.[suivi-delai])=Yes) AND ((table_unique.[FO-BO])="FO") AND ((table_unique.DateTraitement) Is Null)) OR (((table_unique.DateEnregistrementMSX)>Now()-60) AND ((IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin]))<>0) AND ((IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin]))<>0) AND ((IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))=0) AND ((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin]))=0) AND ((type_document.[suivi-delai])=Yes) AND ((table_unique.[FO-BO])="FO") AND ((table_unique.DateTraitement) Is Null)) OR (((table_unique.DateEnregistrementMSX)>Now()-60) AND ((IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin]))<>0) AND ((IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin]))<>0) AND ((IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))<>0) AND ((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin]))<>0) AND ((type_document.[suivi-delai])=Yes) AND ((table_unique.[FO-BO])="FO") AND ((table_unique.DateTraitement) Is Null))
    ORDER BY JourOuvres([DateEnregistrementMSX],Date())-[type_document]![délai]-JourOuvres((IIf([table_unique]![DDC-delai_1-fin] Is Null,0,[table_unique]![DDC-delai_1-fin])),(IIf([table_unique]![DDC-delai_1-debut] Is Null,0,[table_unique]![DDC-delai_1-debut])))-JourOuvres((IIf([table_unique]![DDC-delai_2-fin] Is Null,0,[table_unique]![DDC-delai_2-fin])),(IIf([table_unique]![DDC-delai_2-debut] Is Null,0,[table_unique]![DDC-delai_2-debut])))-JourOuvres((IIf([table_unique]![DDC-delai_3-fin] Is Null,0,[table_unique]![DDC-delai_3-fin])),(IIf([table_unique]![DDC-delai_3-debut] Is Null,0,[table_unique]![DDC-delai_3-debut]))) DESC;
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [docs hors delai-etape1].depassement, [docs hors delai-etape1].Ref_W, [docs hors delai-etape1].TypeDocument, [docs hors delai-etape1].DateEnregistrementMSX, [docs hors delai-etape1].[DDC1-debut], [docs hors delai-etape1].[DDC1-fin], [docs hors delai-etape1].[DDC2-debut], [docs hors delai-etape1].[DDC2-fin], [docs hors delai-etape1].[DDC3-debut], [docs hors delai-etape1].[DDC3-fin]
    FROM [docs hors delai-etape1]
    WHERE ((([docs hors delai-etape1].depassement)>0))
    ORDER BY [docs hors delai-etape1].depassement DESC;
    (je suis passé par 2 requêtes car le critère ">0" sur le champ "dépassement" n'a jamais fonctionné dans la première requête.

    Aujoud'hui j'ai fait des chamgements dans la table recensant les types de doc et notamment les délais associés.
    La première requête fonctionne bien,
    Le calcul de dépassement se fait bien, j'ai des valeurs positives et négatives.

    Mais la seconde requête n'aboutit pas:
    "type de données incompatible dans l'expression du critère"

    Quelqu'un a une idée ?

    Merci d'avance

    Vigg

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut
    il semble ne pas apprecié de comparer dépassement avec un entier... ta fonction jourOuvres te renvoie bien un integer ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2009
    Messages : 98
    Par défaut
    Essaye de faire une conversion explicite du style clng(depassement)
    Si tu as toujours la meme erreur, alors c'est que depassement est du type chaine de caratere avec un espace quelquepart

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut
    Bonjour à tous et merci de votre aide,

    J'ai intégré Clng:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CLng([depassement]) AS depassment, [docs hors delai].Ref_W, [docs hors delai].TypeDocument, [docs hors delai].DateEnregistrementMSX, [docs hors delai].[DDC1-debut], [docs hors delai].[DDC1-fin], [docs hors delai].[DDC2-debut], [docs hors delai].[DDC2-fin], [docs hors delai].[DDC3-debut], [docs hors delai].[DDC3-fin]
    FROM [docs hors delai]
    WHERE (((CLng([depassement]))>0))
    ORDER BY CLng([depassement]) DESC;
    Le résultat est le même: "Type de données incompatible dans l'expression du critére".

    Une idée, mois je sèche ...

    Viggen.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut


    il faut que tu t'assures qu'il n'y a pas d'enregistrement à Null, voir Nz()
    D'autre part, il faut effectivement voir si toutes les valeurs sont bien des numériques ou assimilés numériques.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Par défaut
    Ca doit être dans ces eaux là ...

    Si je fais tourner sans le critère ">0", ca fonctionne, sans champ vide (donc pas de null ?).

    La conversion du type de 'depassement' ne m'aide pas ...

    J'ai sauté le commentaire de Taoueret:
    "il semble ne pas apprecié de comparer dépassement avec un entier... ta fonction jourOuvres te renvoie bien un integer ? "

    Le truc est que je ne sais pas le voir,
    quelqu'un sait ?

    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
    Public Function JourOuvres(ByVal date1 As Date, ByVal Date2 As Date) As Long
        Dim DateDeb As Date, DateFin As Date
        If IsNull(date1) Or IsNull(Date2) Then GoTo JourOuvres_Erreur
        If Not IsDate(date1) Or Not IsDate(Date2) Then GoTo JourOuvres_Erreur
        date1 = DateSerial(Year(date1), Month(date1), Day(date1))
        Date2 = DateSerial(Year(Date2), Month(Date2), Day(Date2))
        If date1 = Date2 Then GoTo JourOuvres_Erreur
        DateDeb = date1
        DateFin = Date2
        If date1 > Date2 Then
            DateDeb = Date2
            DateFin = date1
        End If
        JourOuvres = CLng(DateFin) - CLng(DateDeb)
        If JourOuvres = 0 Then Exit Function
        DateDeb = DateDeb + 1
        Do
            If (Weekday(DateDeb, vbMonday) >= 6) Or (JourFérié(DateDeb) = True) Then JourOuvres = JourOuvres - 1
            DateDeb = DateDeb + 1
        Loop While DateDeb <= DateFin
        Exit Function
    JourOuvres_Erreur:
     JourOuvres = 0
    End Function
    Cette fonction renvoie-t-elle un integer ? (un numérique je suppose ...)


    Merci de votre réponse.

    Viggen

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/08/2006, 17h10
  2. Types de données incompatibles lors d'une requête sous access
    Par RodEpsi dans le forum Bases de données
    Réponses: 32
    Dernier message: 21/07/2006, 15h51
  3. Réponses: 2
    Dernier message: 13/06/2006, 08h47
  4. Réponses: 3
    Dernier message: 22/05/2006, 19h23
  5. (Access) Type de données incompatible...
    Par kissmytoe dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/02/2006, 20h37

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