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 :

fonction VBA dans du SQL access


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut fonction VBA dans du SQL access
    Bonjour j'ai une fonction en VBA
    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
    Public Function majcdap(cdap As String, cd As Integer, an As Double) As String
           an = an Mod 100
        Select Case cd
        Case 0
            majcdap = cdap
        Case 1
            If cdap = 0 Then
                majcdap = cdap
            Else: majcdap = "0" & an & "," & cdap
            End If
        Case Else
            If cdap = 0 Then
                 majcdap = cd & "." & "0" & an
             Else: majcdap = cd & "." & "0" & an & "," & cdap
             End If
        End Select
    End Function
    et un requête SQL qui l'execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE essemaj SET essemaj.[Cols Durs années précéd] = majcdap([«cdap»],[«cd»],[«an»]), essemaj.[A déclarer] = No, essemaj.CD = 0;
    ça me met la fonction majcdap non définie dans l'expression
    Vous voyez où est l'erreur?????

  2. #2
    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 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    bonjour,
    pourquoi as-tu mis des guillemets dans ta requete sql déjà ?
    les types des champs sont-ils bon par rapport à la fonction ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    quand j'ai été cherchez ma fonction dans la bibliothéque ça me la notée comme ça avec des guillemets.ils ont quels incidences???
    "les types des champs sont-ils bon par rapport à la fonction ?" j'ai pas tout compris...dsl tu peut ré-expliquer
    merçi

  4. #4
    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 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    si ton code SQL est tel quel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE essemaj SET essemaj.[Cols Durs années précéd] = majcdap([«cdap»],[«cd»],[«an»]), essemaj.[A déclarer] = No, essemaj.CD = 0;
    tu dois avoir soit des champs de nom [«cdap»],[«cd»] et [«an»] soit des inputbox qui te demanderont de quoi il s'agit,
    de plus, la fonction majcdap retourne pour le moment une chaine de caractère, est-ce bien le type de [Cols Durs années précéd] ?
    enfin, le code VBA est-il dans un module VBA du projet ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    le type de [Cols Durs années précéd] est bien du texte.
    et le code vba est dans un module du projet

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    Est-ce que à votre avis je pourrais passer par un variable du genre strSql qui executerez la requete.......
    le soucis c'est que je sais pas trop comment ecrire ce bout de code

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    j'ai fait un petit bout de code mais ça me met toujours que majcdap est non définie dans l'expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function strSql()
    strSql = "UPDATE essemaj SET essemaj.[Cols Durs années précéd] = majcdap(cdap,cd,an), essemaj.[A déclarer] = No, essemaj.CD = 0"
    DoCmd.RunSQL (strSql)
    End Function
    la requete devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE essemaj SET essemaj.[Cols Durs années précéd] = strSql( ), essemaj.[A déclarer] = No, essemaj.CD = 0;

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    comme je n'arrivait pas à trouver de solution je suis passer par un bouton dans un formulaire executant le code suivant:
    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
    Option Compare Database
     
    Private Sub Commande0_Click()
    On Error GoTo Err_Commande0_Click
     an = an Mod 100
    Dim dbs As Database, rs As DAO.Recordset
    Set dbs = CurrentDb()
    Set rs = dbs.OpenRecordset("essemaj", dbOpenTable)
        Select Case cd
        Case 0
            majcdap = cdap
        Case 1
            If cdap = 0 Then
                majcdap = cdap
            Else: majcdap = "0" & an & "," & cdap
            End If
        Case Else
            If cdap = 0 Then
                 majcdap = cd & "." & "0" & an
             Else: majcdap = cd & "." & "0" & an & "," & cdap
             End If
        End Select
     
    For j = 0 To 99
            rs.MoveFirst
            rs.Edit
            rs![Cols Durs années précéd] = majcdap
            rs![cd] = 0
            rs![A déclarer] = No
            rs.Update
     
     Next
            rs.Edit
            rs.Update
            rs.Close
     
        DoCmd.Close
     
    Exit_Commande0_Click:
        Exit Sub
     
    Err_Commande0_Click:
        MsgBox Err.Description
        Resume Exit_Commande0_Click
       End Sub
    mais ça ne met pas ma table "essemaj" à jour
    quelqu'un peut m'aider???
    merçi d'avance

  9. #9
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,
    Bonjour j'ai une fonction en VBA

    Code :
    Public Function majcdap(cdap As String, cd As Integer, an As Double) As String
    an = an Mod 100
    Select Case cd
    Case 0
    majcdap = cdap
    Case 1
    If cdap = 0 Then
    majcdap = cdap
    Else: majcdap = "0" & an & "," & cdap
    End If
    Case Else
    If cdap = 0 Then
    majcdap = cd & "." & "0" & an
    Else: majcdap = cd & "." & "0" & an & "," & cdap
    End If
    End Select
    End Functionet un requête SQL qui l'execute

    Code :
    UPDATE essemaj SET essemaj.[Cols Durs années précéd] = majcdap([«cdap»],[«cd»],[«an»]), essemaj.[A déclarer] = No, essemaj.CD = 0;
    ça me met la fonction majcdap non définie dans l'expression
    Vous voyez où est l'erreur?????
    pour l'appel de la fonction, les crochets doivent etre enlevé
    donc à écrire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE essemaj SET essemaj.[Cols Durs années précéd] = majcdap(«cdap»,«cd»,«an»), essemaj.[A déclarer] = No, essemaj.CD = 0;
    du moins je pense!

    mayekeul

  10. #10
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Citation Envoyé par kapotocho Voir le message
    comme je n'arrivait pas à trouver de solution je suis passer par un bouton dans un formulaire executant le code suivant:
    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
    Option Compare Database
     
    Private Sub Commande0_Click()
    On Error GoTo Err_Commande0_Click
     an = an Mod 100
    Dim dbs As Database, rs As DAO.Recordset
    Set dbs = CurrentDb()
    Set rs = dbs.OpenRecordset("essemaj", dbOpenTable)
        Select Case cd
        Case 0
            majcdap = cdap
        Case 1
            If cdap = 0 Then
                majcdap = cdap
            Else: majcdap = "0" & an & "," & cdap
            End If
        Case Else
            If cdap = 0 Then
                 majcdap = cd & "." & "0" & an
             Else: majcdap = cd & "." & "0" & an & "," & cdap
             End If
        End Select
     
    For j = 0 To 99
            rs.MoveFirst
            rs.Edit
            rs![Cols Durs années précéd] = majcdap
            rs![cd] = 0
            rs![A déclarer] = No
            rs.Update
     
     Next
            rs.Edit
            rs.Update
            rs.Close
     
        DoCmd.Close
     
    Exit_Commande0_Click:
        Exit Sub
     
    Err_Commande0_Click:
        MsgBox Err.Description
        Resume Exit_Commande0_Click
       End Sub
    mais ça ne met pas ma table "essemaj" à jour
    quelqu'un peut m'aider???
    merçi d'avance
    Apparemment, cette fonction n'update que le premier record ... 99 fois!

    non?

    mayekeul

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    j'ai déjà essayer et ça me met toujours "fonction majcdap non définie dans l'expression"

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    ouais pour la boucle je me suis trompé en programmant, je l'ai supprimée mais ça ne met toujours pas ma table à jour

    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
    Private Sub Commande0_Click()
    On Error GoTo Err_Commande0_Click
     an = an Mod 100
    Dim dbs As Database, rs As DAO.Recordset
    Set dbs = CurrentDb()
    Set rs = dbs.OpenRecordset("essemaj", dbOpenTable)
        Select Case cd
        Case 0
            majcdap = cdap
        Case 1
            If cdap = 0 Then
                majcdap = cdap
            Else: majcdap = "0" & an & "," & cdap
            End If
        Case Else
            If cdap = 0 Then
                 majcdap = cd & "." & "0" & an
             Else: majcdap = cd & "." & "0" & an & "," & cdap
             End If
        End Select
     
            rs.MoveFirst
            rs.Edit
            rs![Cols Durs années précéd] = majcdap
            rs![cd] = 0
            rs![A déclarer] = No
            rs.Update
            rs.Close
     
        DoCmd.Close
     
    Exit_Commande0_Click:
        Exit Sub
     
    Err_Commande0_Click:
        MsgBox Err.Description
        Resume Exit_Commande0_Click
       End Sub

  13. #13
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    même pas en rafraichissant le formulaire?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    c'est à dire??

  15. #15
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    a la fin de ton code
    rajoute
    ou

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    j'ai enfin trouvé
    merçi a tous pour votre aide

    Private Sub Commande0_Click()
    On Error GoTo Err_Commande0_Click
    an = an Mod 100
    sql = "update essemaj set essemaj.[Cols Durs années précéd] = majcdap(essemaj![Cols Durs années précéd], essemaj![cd], essemaj![Année]),essemaj.[A déclarer] = No,essemaj.[cd] = 0;"

    DoCmd.RunSQL sql
    DoCmd.Close
    Dim stDocName As String


    Exit_Commande0_Click:
    Exit Sub

    Err_Commande0_Click:
    MsgBox Err.Description
    Resume Exit_Commande0_Click
    End Sub

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2010, 22h00
  2. Fonction VBA dans requêtes vers Access
    Par Laaris dans le forum R
    Réponses: 5
    Dernier message: 03/07/2008, 11h16
  3. comment exécuter ma fonction VBA dans Access
    Par kapotocho dans le forum VBA Access
    Réponses: 23
    Dernier message: 18/01/2008, 16h43
  4. Fonction NVL2() dans PL/SQL
    Par madina dans le forum PL/SQL
    Réponses: 1
    Dernier message: 29/05/2006, 10h25
  5. [VB6]Fonction dans requête SQL Access
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/04/2006, 19h44

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