sql - 用于生成多个值的条件内连接语句 (VBA/SQL)

标签 sql excel vba ms-access

我对 VBA/SQL 很陌生,我正在尝试执行条件内部联接。

我有两个具有共同列的表(“CRM”和“CodeCRM”),当表 1 中的某些内容被触发(CodeBlocage = 101)时,我想从表 2(“办公 table ”)获取电子邮件地址(“Flux”)以便将其添加到自动电子邮件中。

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

SELECT 确定结果记录集中的列。如果您的 SQL 语句是SELECT Name, Number FROMEmployees,则 SELECT 部分会告诉您生成的记录集将包含名为 Name 和 Number 的两列。

在 VBA 中选择大小写

Select Case 是条件语句的编程结构。当您不想使用一堆 If..ElseIf..Else 语句,但您可以使用 If 执行的任何操作都可以使用 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中的CASE

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

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

如果执行此记录集,您将获得两列(Name、MyNum)。当该记录的 Number 为 1 时,MyNum 字段将包含文本 One;如果 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

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

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

关于sql - 用于生成多个值的条件内连接语句 (VBA/SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118228/

相关文章:

mysql - 使用 select 语句插入 MySQL 表

sql - SQL Server 08 ')'附近的语法不正确

vba - .Findnext 不尊重范围集

excel - 将txt文件导入excel会使换行符消失

vba - 导入文本文件 - Vb/Access

php - 谈论并发 PHP 时的最佳方法

SQL Server : error could not find type in assembly during dll trigger creation

mysql - SQL 选择带过滤器的行

VBA - 如何声明 "Cell"变量

vba - 使用 VBA 更改 PowerPoint 演示文稿中的默认文本方向