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 :

Fonction utilisateur dans DataSet


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Fonction utilisateur dans DataSet
    Bonjour,

    Comment intégrer une fonction que j'ai déclarée dans un de mes modules par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Toto(Param1 as integer, Param2 as integer) as string
    (renvoie une chaine en fonction de la combinaison des 2 paramètres)
    End Function
    dans le SQL d'un DataTable par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim sSQL="SELECT Champ1,Champ2,Toto(Champ3,Champ4) AS Champ5 FROM Table1...."
    Dim ds As New DataSet
    Dim MyDataTable as DataTable
    Dim cmd As New OleDbCommand(sSQL, myconnection)
    Dim da As New OleDbDataAdapter(cmd)
    da.Fill(ds, "temp")
     
    MyDataTable= ds.Tables("temp")
    Quand je lance ce code, je reçois une exception ligne 6: "Undefined Function 'Toto' in expression"

    Pour info, myconnection est du OleDbConnection basé sur du Access mdb (provider=Microsoft.jet.oledb.4.0)

    Merci pour les idées

    Olivier

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut faire une concatenation :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim sSQL="SELECT Champ1,Champ2, " & Toto(Champ3,Champ4) & " FROM Table1...."

    Attention cependant car en faisant une concatenation tu exposes ton application a des risques d'injection SQL. Il faut bien valider le contenu des parametres d'entree...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    J'ai omis de préciser que Champ3 & Champ4 sont des champs de Table1 et non des variables VB!
    La requête SQL doit, pour chaque enregistrement, appeler cette fonction. Pour info, ça marche très bien sous VBA Access.

    Merci en tous cas

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Dans ce cas, ca devrait faire l'affaire :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim sSQL="SELECT Champ1,Champ2, " & Toto("Champ3", "Champ4") & " FROM Table1...."
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Je teste ça demain mais j'ai des doutes que cela puisse marcher.

    Ce que je cherche, c'est à "externaliser" une fonction qui n'existe pas nativement dans le SQL

    Par exemple, si Table1 est définie ainsi avec les 4 champs:

    [Champ1] [Champ2] [Champ3] [Champ3]
    1 2 3 4
    1 1 4 5
    2 1 6 7

    Et que ma fonction MyMultiplication est par exemple une bête multiplication du Champ3 avec le Champ4, je veux retrouver les résultats suivant:

    1 2 12
    1 1 20
    2 1 42

    C'est à dire le résultat d'une requête SELECT Champ1,Champ2,MyMultiplication(Champ3,Champ4) FROM Table1MyMultiplication est une fonction définie dans un module (cela ne peut être une procédure stockée)

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok, je crois que j'ai compris ce que tu veux faire. Tu cherches a appeler un traitement qui va s'executer PENDANT l'execution de la requete SQL dans Access.

    Si tel est bien le cas, alors tu es dans le mauvais forum (ici c'est VB.NET). Je deplace ton post dans le forum qui va bien.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Déjà pour pouvoir integer un fonction dans un script sql il faut que la fonction soit implémentée dans la base de donnée Access en l'occurrence.

    Mais cette façon de faire fonctionne parfaitement dans Access mais pas en dehors !

    Désolé !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Aaargh

    Pourquoi m'avoir déplacé ? Je n'ai pas ce problème dans VBA Access, mais après "migration" sous VB.NET!!

  9. #9
    Invité
    Invité(e)
    Par défaut
    bonjour,

    oui je comprend que ça ne t'arrange pas d’être déplacé mais de toutes les façons ça ne marchera pas en .net non plus!

    tu ne peux pas intégrer de fonction personnaliser dans une requête sql Accsess si elle n'est pas exécuté coté Access , ce n'est pas comme Sql Serveur ou Oracle!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Damned...

    Je vais creuser coté LINQ qui lui peut inclure une fonction. C'est lourdingue mais bon...j'ai pas le choix

    Merci quand même

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

Discussions similaires

  1. Intégration d'une fonction utilisateur dans un script
    Par Rony Rauzduel dans le forum Langage
    Réponses: 0
    Dernier message: 18/10/2012, 15h11
  2. Réponses: 0
    Dernier message: 20/09/2010, 15h25
  3. Réponses: 1
    Dernier message: 21/07/2009, 11h51
  4. Utiliser fonction utilisateur dans une requête
    Par schoubz dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2008, 20h30
  5. Réponses: 3
    Dernier message: 16/06/2007, 09h07

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