有条件的内部联接语句(VBA / SQL)生成多个值

艾蒂安

我是VBA / SQL的新手,正在尝试执行条件内部联接。

我有两个具有相同列的表(“ CRM”和“ CodeCRM”),当在表1(“ 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

一切工作都很好,除了它应该为电子邮件地址返回多个值。有线索吗?

谢谢

迪克·库斯莱卡(Dick Kusleika)

可能引起混淆的三个关键字:

在SQL中选择

SELECT确定结果记录集中的列。如果您的sql语句为SELECT Name, Number FROM Employees,那么SELECT部分​​将告诉您结果记录集将具有名为Name和Number的两列。

在VBA中选择案例

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

在SQL中的情况

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

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

如果执行此记录集,则会得到两列(名称,MyNum)。如果One该记录的Number为1,则MyNum字段将包含文本;如果Number为非1,则MyNum字段将包含文本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

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

在获取“电子邮件的值”字段之前,请确保记录集至少返回了一条记录。如果同时在文件的开头(BOF)和文件的结尾(EOF),则意味着记录集中没有记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章