2017-04-04 88 views
2

对于VBA/SQL我很新,我试图执行条件内部联接。在条件内部联接语句(VBA/SQL)上返回多个值

我有两个共同列(“CRM”和“CodeCRM”)的表,并且我想从table2(“服务台”)获取邮件地址,当table1中的某个事件被触发(CodeBlocage = 101) Flux“)以将其添加到自动Outlook电子邮件中。

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 

一切工作很好,除了它应该返回多个值的电子邮件地址。任何线索?

谢谢

+0

要从记录集中获取多行,您必须循环它(MoveNext等) – Andre

+0

谢谢安德烈。我实际上使用了语法Y = rs.GetString来获取记录集的所有电子邮件地址。我现在的问题是,一些电子邮件地址出现两倍。我怎么能删除双打? – Etienne

回答

1

当读出一个记录集时,你必须逐行循环记录。用你现在的代码,你只看第一行。

尝试这样:

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 

结果变量将是唯一的值

+0

我实际上使用了语法Y = rs.GetString来获取记录集的所有电子邮件地址。我现在的问题是,一些电子邮件地址出现两倍。我怎么能删除双打? – Etienne

+0

我已经编辑了答案将它们添加到列表(串)导致唯一值的列表,并在其上运行一个.Distinct()结束 – Kevin

+0

无法使其与在工作,但我用了你在我的select语句中使用DISTINCT的想法,并且它与rs.GetString一起工作。干杯! – Etienne

1

解决的列表。

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 
+0

欢迎来到堆栈溢出!请不要添加[相同的回答多个问题(http://meta.stackexchange.com/questions/104227/is-it-acceptable-to-ad??da-duplicate-answer-to-several-questions )。一旦你获得了足够的声望,请回答最好的一个,并将其余标记为重复。如果它不是重复的,请调整问题的帖子 –