条件内连接语句(VBA / SQL)生成多个值

我是VBA / SQL的新手,我正在尝试执行条件内连接.

我有两个共同列的表(“CRM”和“CodeCRM”),我希望在table1(“Flux”)中触发某些内容(CodeBlocage = 101)时从table2(“Desks”)获取一个电子邮件地址以将其添加到自动电子邮件中.

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

一切都很好,除了它应该为电子邮件地址返回多个值.任何线索?

谢谢

最佳答案 有三个关键字可能会导致混淆:

在sql中选择

SELECT确定结果记录集中的列.如果您的sql语句是SELECT Name,Number FROM Employees,则SELECT部分​​会告诉您生成的记录集将包含两个名为Name和Number的列.

在VBA中选择Case

Select Case是条件的编程结构.当你不想使用一堆If..ElseIf..Else语句时,你可以使用它,但是你可以做任何事情如果你可以使用Select Case.

Select Case A
    Case "Flux"
        Execute these VBA statements when the variable A = Flux
    Case "Capacitor"
        Execute these statements when A = Capacitor
    Case Else
        Execute these statements when A is neither Flux nor Capacitor
End Select

CAS中的CASE

sql中的CASE关键字类似于VBA中的Select Case,但它在SELECT sql语句的字段列表中使用(对于一个).

SELECT Name, CASE WHEN Number = 1 THEN 'One' ELSE 'Two' END MyNum FROM Employees

如果执行此记录集,则会得到两列(Name,MyNum).当该数字为1时,MyNum字段将包含文本One,如果Number不是1,则包含文本Two.

记录集

你有Excel和Access标签,所以我假设你在其中任何一个中使用ADO.你的陈述

Y = Select email from table2 Inner Join table1 on table2.Crm = table1.Crm WHERE table1.Code = 1

什么都不做 – 它不会编译.假设您希望变量Y包含在执行该sql语句时将返回的电子邮件.

Sub GetEmail()

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

    Set cn = New ADODB.Connection
    cn.Open "MyConnectionStringGoesHere"

    sSql = "Select email from table2 Inner Join table1 on table2.Crm = table1.Crm WHERE table1.Code = 1"

    Set rs = cn.Execute(sSql)

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

End Sub

在这种情况下,我必须创建一个记录集并为某个连接执行该记录集.假设连接和WHERE子句确保它只返回一条记录.但如果它返回更多,此示例将仅使用第一条记录中的电子邮件.

在我获取电子邮件字段的值之前,我确保记录集至少返回一条记录.如果它同时位于文件的开头(BOF)和文件的末尾(EOF),则表示记录集中没有记录.

点赞