VBA Access - Nom de champ en paramètre

Fermé
MichaelKeul - 11 mars 2010 à 12:46
 MichaelKeul - 11 mars 2010 à 14:19
Bonjour,

Je sèche sur un problème qui doit être assez simple à résoudre, mais je n'en trouve pas la solution.
Je fais appel à une fonction qui va rechercher la valeur d'un champ précis pour un enregistrement précis. Pour ce faire je passe en paramètre de ma fonction le nom de ma table, l'ID de l'enregistrement et le nom du champ.

Function FindLinkedString(ByVal Table As String, ByVal ID As Integer, ByVal Field As String) As String

Dim mydb2 As Database
Dim LinkedTable As Recordset
Dim linkedTableCount As Integer

Set mydb2 = CurrentDb()
Set LinkedTable = mydb2.OpenRecordset(Table)

LinkedTable.MoveFirst
For linkedTableCount = 1 To LinkedTable.RecordCount
If LinkedTable!ID = ID Then
FindLinkedString = Table & "!" & Field
GoTo Fin_FindLinkedString
End If
LinkedTable.MoveNext
Next
Fin_FindLinkedString:

LinkedTable.Close
mydb2.Close

End Function


Le problème est que FindLinkedString = Table & "!" & Field , c'est visiblement foireux puisqu'il ne va pas rechercher la valeur dans la db, il sauve le string en transformant "Table" et "Field" par les paramètres (ex: "Clients!Nom" alors que je voudrais qu'il ressorte "Dupont")

Est-ce que quelqu'un pourrait me dire ce que je dois modifier ?

Grand grand merci

3 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
11 mars 2010 à 13:10
Bonjour,

'...
LinkedTable.MoveFirst
While Not LinkedTable.EOF
   If LinkedTable.Fields("ID") = ID Then
       FindLinkedString = LinkedTable.Fields("Nom")
       LinkedTable.Close
       mydb2.Close 
       Set LinKedTable = Nothing
       Set mydb2 = Nothing
       Exit Function
   End If
LinkedTable.MoveNext
Wend
'...


Mais on peut faire plus simple:
'...
Set LinkedTable = mydb2.OpenRecordset("SELECT Nom FROM " & Table & " WHERE ID = " & ID) 
FindLinkedString = LinkedTable.Fields(0)
'...


;o)
0
blux Messages postés 26317 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 octobre 2024 3 300
11 mars 2010 à 13:16
Salut,

tu as aussi la fonction dlookup, qui fait la même chose, mais sans créer de recordset...
0
MichaelKeul
11 mars 2010 à 14:19
Superbe !

Merci à vous 2.
0