revoxa77
Messages postés3Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention13 février 2007
-
7 juin 2006 à 10:35
revoxa77
Messages postés3Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention13 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 !)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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
revoxa77
Messages postés3Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention13 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.