Je suis assez nouveau dans VBA / SQL et j'essaye d'exécuter une jointure interne conditionnelle.

J'ai deux tables avec une colonne en commun ("CRM" et "CodeCRM") et je voudrais obtenir les adresses email de table2 ("Desks") quand quelque chose est déclenché (CodeBlocage = 101) dans table1 ("Flux") dans afin de l'ajouter à un e-mail Outlook automatique.

Dim StrDestinataire As String
Select Case Strtable
   Case "Flux", "GAFIJOUR"

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Y As String
    Dim sSql As String

    Set cn = CurrentProject.Connection


    sSql = "Select AddMailCRM from Desks Inner Join Flux on Desks.CODECRM = Flux.CRM WHERE Flux.CODEBLOCAGE = '101'"

    Set rs = cn.Execute(sSql)

    If Not rs.BOF And Not rs.EOF Then
        Y = rs.Fields("AddMailCRM").Value
    End If


    StrDestinataire =  Y

    cn.Close

Tout fonctionne très bien sauf qu'il devrait renvoyer plus d'une valeur pour l'adresse e-mail. Des pistes?

Je vous remercie

2
Etienne 4 avril 2017 à 10:02

2 réponses

Meilleure réponse

Lors de la lecture d'un jeu d'enregistrements, vous devez parcourir les enregistrements ligne par ligne. Avec votre code actuel, vous ne regardez que la première ligne.

Essayez quelque chose comme ceci:

Dim results as New List(Of String)

While Not rs.EOF
    results.Add(rs.Fields("AddMailCRM").Value)
    rs.MoveNext()
End While

results = results.Distinct().ToList

La variable de résultats sera une liste de valeurs uniques

1
Kevin 4 avril 2017 à 07:25

Résolue.

Dim StrDestinataire As String
Select Case Strtable
   Case "Flux", "GAFIJOUR"
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Y As String
Dim sSql As String

Set cn = CurrentProject.Connection


sSql = "Select DISTINCT AddMailCRM from Desks Inner Join Flux on Desks.CODECRM = Flux.CRM WHERE Flux.CODEBLOCAGE = '101'"

Set rs = cn.Execute(sSql)

If Not rs.BOF And Not rs.EOF Then
    Y = rs.GetString
End If


StrDestinataire = Y

cn.Close
1
Etienne 4 avril 2017 à 07:45