VBA Access - Nom de champ en paramètre

MichaelKeul -  
 MichaelKeul -
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
A voir également:

3 réponses

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
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 27120 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

tu as aussi la fonction dlookup, qui fait la même chose, mais sans créer de recordset...
0
MichaelKeul
 
Superbe !

Merci à vous 2.
0