我是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
一切工作都很好,除了它应该为电子邮件地址返回多个值。有线索吗?
谢谢
可能引起混淆的三个关键字:
在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] 删除。
我来说两句