2017-02-03 174 views
0

我有一个带有一些文本框的表单,我想用SQL查询中的值填充其中的一个。用表中的值填充文本框

该表格被称为tbl-apartner,我想选择与serviceidsid2)匹配的每个mailadress

SELECT [tbl-apartner].[EMail] FROM [tbl-apartner] WHERE [tbl-apartner].[SID] = sid2; 

该SELECT语句的输出是正确的,但我不能用它填充文本框。

我的想法是创建一个字符串与每个与SID匹配的mailadress使用它们作为邮件的收件人。

我试过使用dlookup(" [EMail]" ; "qry-apartner") 但输出只是我的查询中的第一个条目。

回答

1

您必须通过查询结果编写VBA函数迭代,并创建一个字符串分配给您的文本框。根据表单行为的不同,可以将其置于适当的事件中,例如,如果您的表单一旦使用OnOpen打开,如果sid2可以由用户使用相关控件的AfterUpdate事件等进行更改,则可以使用此类事件。

样例代码:

Dim ThisDB As DAO.Database 
Set ThisDB = CurrentDb 
Dim d As DAO.Recordset 
Dim q As String 
q = "SELECT [tbl-apartner].[EMail] FROM [tbl-apartner] WHERE [tbl-apartner].[SID] = " & sid2 
Set d = ThisDB.OpenRecordset(q, dbOpenDynaset) 
Dim Result As String 
Result = "" 
If d.EOF = False Or d.BOF = False Then 
    d.MoveFirst 
    Do While Not d.EOF 
     If Result <> "" Then Result = Result & vbCrLf 
     Result = Result & d!Email 
     d.MoveNext 
     Loop 
    End If 
d.Close 

以上内容会为每个电子邮件地址创建一个新行。用你想要的任何东西替换vbCrLf,例如“,”会生成逗号分隔的电子邮件。

+0

谢谢您的回复。当我打开该表格即时获取错误'3061' 运行时错误'3061'。参数太少。预计1.设置d = ThisDB.OpenRecordset(q,dbOpenDynaset) – rel0aded0ne

+0

我解决了这个问题。 该行 感谢您的帮助! 'q =“SELECT [tbl-apartner]。[EMail] FROM [tbl-apartner] WHERE [tbl-apartner]。[SID] =”&sid2' 是不正确的。 q =“SELECT [tbl-apartner]。[EMail] FROM [tbl-apartner] WHERE [tbl-apartner]。[SID] =”&“'”&sid2&“'” 区别在于:'' =“&”'“&sid2&”'“' – rel0aded0ne

+0

这是因为您使用的是'sid2'的文本字段而不是数字字符,这就是我的代码的写法。在上周度假。 – SunKnight0