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

VBA Access Discussion :

Problème d'intégration de fonction dans expression SQL [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Problème d'intégration de fonction dans expression SQL
    Bonjour,

    J'ai lu dans un bouquin que l'on pouvait intégrer des fonctions dans une expression SQL pour éviter les empilages de Iff.

    J'essaye de le faire mais cela ne marche pas. J'ai un message d'erreur qui me dit que "Type de donnée incompatible dans l'expression du critère.

    Le code de construction de l'expression SQL :
    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
    47
        'Sélection et conditions principales
        SQl = "INSERT INTO " & Table_REP & " ( REP_Num_Bis, REP_Select_2 )" & _
        " SELECT REPertoire.REP_Num, True AS Expr1" & _
        " FROM (" & Table_MET & " INNER JOIN REPertoire ON " & Table_MET & ".MET_Num_Bis = REPertoire.REP_Actprinc) INNER JOIN " & Table_COD & " ON REPertoire.REP_Codepostal = " & Table_COD & ".COD_Code" & _
        " WHERE (((" & Table_MET & ".MET_Select)=True) AND ((" & Table_COD & ".COD_Select)=True) AND ((REPertoire.REP_Effectif)>=" & Me.Ef_mini & ") AND ((REPertoire.REP_Effectif)<=" & Me.Ef_Maxi & ")" & _
        " AND ((REPertoire.REP_Actif)=True) AND ((REPertoire.REP_Client)=True)" & _
        " AND ((IIf(IsNull(REPertoire.REP_Datecrea)=True,'" & Me.Date_mini & "',REPertoire.REP_Datecrea))>=#" & Me.Date_mini & "# And (IIf(IsNull(REPertoire.REP_Datecrea)=True,'" & Me.Date_mini & "',REPertoire.REP_Datecrea))<=#" & Me.Date_maxi & "#)"
     
        'Conditions "type de relance"
        Select Case Me.S_Relance
     
            Case 1
                SQl = SQl & " AND ((REPertoire.REP_Relance_Fax)=False) AND ((Verif_Numero(REPertoire.REP_Fax))=True)"
     
            Case 2
                SQl = SQl & " AND ((REPertoire.REP_Relance_Mail)=False) AND ((Verif_Numero(REPertoire.REP_Mail))=True)"
     
            Case 3
                SQl = SQl & " AND ((REPertoire.REP_Relance_Tel)=False) AND ((Verif_Numero(REPertoire.REP_Tel1))=True)"
     
            Case 4
                SQl = SQl & " AND ((REPertoire.REP_Relance_Courrier)=False) AND ((Verif_Numero(REPertoire.REP_Adres))=True)"
     
     
        End Select
     
     
     
        'Txt_Var = Choose(Me.S_Relance, "REP_Relance_Fax", "REP_Relance_Mail", "REP_Relance_Tel", "REP_Relance_Courrier")
        'SQl = SQl & " AND ((REPertoire." & Txt_Var & ")=False)"
        'Txt_Var = Choose(Me.S_Relance, "REP_Fax", "REP_Mail", "REP_Tel1", "REP_Adres")
        'SQl = SQl & " AND ((REPertoire." & Txt_Var & ") Is Not Null)"
     
        '((Verif_Numero([REP_Fax]))=True)
     
        'Conditions "Options"
        If Me.CAPEB = -1 Then SQl = SQl & " AND ((REPertoire.REP_Capeb)=True)"
        If Me.Email = -1 Then SQl = SQl & " AND ((REPertoire.REP_Mail) Is Null)"
        If Me.Fax = -1 Then SQl = SQl & " AND ((REPertoire.REP_Fax) IS null)"
     
        'Fin SQL de sélection
        SQl = SQl & ");"
     
     
        DoCmd.SetWarnings False 'désactive les messages d'info auto
        DoCmd.RunSQL SQl
        DoCmd.SetWarnings True 'active les messages d'info auto
    Le code de la fonction que souhaite intégrer :
    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
    Function Verif_Numero(Numero As String)
     
        Dim Retour As Boolean
     
        Select Case Numero
            Case Null
                Retour = False
            Case ""
                Retour = False
            Case "0000000000"
                Retour = False
            Case "0000" & "*"
                Retour = False
            Case Else
                Retour = True
        End Select
     
        Verif_Numero = Retour
     
    End Function
    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Ce n'est pas faux. On peut intégrer une fonction utilisateur dans une requête SQL.

    Encore faut-il mettre le bon type dans le paramètre. String ne peut contenir Null, seul Variant le peut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Verif_Numero(Numero As Variant)
     
    ...
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Merci pour l'info Loufab
    Merci
    Les solutions les plus simples sont les plus efficaces

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2015, 12h42
  2. [PHP 4] Problème fonction dans requête SQL
    Par fayssal_db2 dans le forum Langage
    Réponses: 5
    Dernier message: 25/08/2011, 12h23
  3. Problème d'utilisation de fonction dans une popup
    Par Pymm dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/09/2005, 15h00
  4. Réponses: 2
    Dernier message: 17/08/2005, 11h20
  5. [XSL/JavaScript]problème d'intégration code JS dans le XSL
    Par Devil666 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/04/2005, 16h36

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