gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:17:26 29 4
gpt4 key购买 nike

我对 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com