Utilisation de fonctions dans une requête SQL

revoxa77 Messages postés 3 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 13 février 2007 - 7 juin 2006 à 10:35
revoxa77 Messages postés 3 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 13 février 2007 - 8 juin 2006 à 11:53
Bonjour  à tous,


Je vais essayer d'être clair .


Quand, dans l'environnement Access, on établit une requête, on peut au sein de cette requête, faire appel à des fonctions utilisateur stockées dans l'onglet "Modules" et cela fonctionne très bien.

Je voudrais savoir comment faire de même dans un programme en VB6. C'est à dire au sein d'un code VB6 lancer une requête SQL qui utilise une fonction utilisateur écrite dans un module de ce programme ?

J'ai essayé à de nombreuses reprises et j'ai cherché sur le web mais je n'ai jamais réussi. Peut-être n'est-ce pas possible ?

D'avance merci aux spécialistes de la question.( ce que je ne suis pas !)


 


 

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 juin 2006 à 20:19
Salut
Tout dépend de ta méthode de questionnement à ta DB.
Si tu utilises des requètes SQL avec une connexion ADODB, tu fais ce que tu veux pour construire ta requète.
Si ta requète est intégrée à un objet, ça parait plus difficile.
Tout dépend aussi du type de fonction externe que tu veux utiliser.

Repose ta question avec plus de détails / exemple de ce que tu veux faire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
revoxa77 Messages postés 3 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 13 février 2007
8 juin 2006 à 11:53
Merci bien de t'interesser à mon cas :-)


Voila un exemple type de ce que je voudrais faire :


- Une base de données "MaBase.mdb" contient une table "Table1".
La Table1 contient un champ texte "Nom" qui contient des noms de famille.
- Un programme en VB 6 qui contient une feuille "Form1" avec un bouton de commande "Command1" et une fonction "Soundex" (qui convertit un nom en un code phonétique) :


Option Explicit


Private Sub Command1_Click()
    Dim MyWorkspace As Workspace
    Dim MyBase As Database
    Dim Myset As Recordset
    Dim Sql As String


    Set MyWorkspace = DBEngine.Workspaces(0)
    Set MyBase = MyWorkspace.OpenDatabase("MaBase.mdb", False, False)
    Sql = "SELECT Table1.Nom, Soundex([Table1]![Nom]) AS CodeSoundex FROM Table1 ORDER BY Table1.Nom;"
    Set Myset = MyBase.OpenRecordset(Sql)
    Do While Not Myset.EOF
        Debug.Print Myset!Nom, Myset!CodeSoundex
        Myset.MoveNext
    Loop
    Myset.Close
    MyBase.Close
    MyWorkspace.Close
End


Function Soundex(strNom As String) As String
    Dim i As Integer, strTemp As String
    strNom = UCase(Trim(strNom))
    strTemp = Left(strNom, 1)
    Select Case True
    Case strTemp Like "[ÀÂÄ]"
        strTemp = "A"
    Case strTemp Like "[ÉÈÊË]"
        strTemp = "E"
    Case strTemp Like "[ÎÏ]"
        strTemp = "I"
    Case strTemp Like "[ÔÖ]"
        strTemp = "O"
    Case strTemp Like "[ÙÛÜ]"
        strTemp = "U"
    Case strTemp = "Ç"
        strTemp = "S"
    End Select
    strNom = strTemp & Mid(strNom, 2)
    Soundex = Left(strNom, 1)
    For i = 2 To Len(strNom)
        If Len(Soundex) = 4 Then
            Exit Function
        Else
            strTemp = Mid(strNom, i, 1)
            Select Case True
            Case strTemp Like "[BP]"
                strTemp = "1"
            Case strTemp Like "[CKQ]"
                strTemp = "2"
            Case strTemp Like "[DT]"
                strTemp = "3"
            Case strTemp = "L"
                strTemp = "4"
            Case strTemp Like "[MN]"
                strTemp = "5"
            Case strTemp = "R"
                strTemp = "6"
            Case strTemp Like "[GJ]"
                strTemp = "7"
            Case strTemp Like "[XZS]"
                strTemp = "8"
            Case strTemp Like "[FV]"
                strTemp = "9"
            Case Else
            strTemp = ""
            End Select
            ' Elimination des répétitions
            If strTemp <> "" Then
                If strTemp <> Right(Soundex, 1) Then
                    Soundex = Soundex & strTemp
                End If
            End If
        End If
    Next i
End Function


Quand je lance la requête, avec le bouton Command1, j'obtiens l'erreur d'execution 3085 :
'Fonction 'Soundex' non définie dans l'expression' sur la ligne de code :
"Set Myset = MyBase.OpenRecordset(Sql)"


Remarque :
Si j'utilise la même fonction et la même requête dans l'environnement Access cela fonctionne très bien.


Vloià, j'espère avoir été assez clair !
0
Rejoignez-nous