2017-02-03 2 views
0

У меня есть форма с некоторым текстовым полем, и я хочу заполнить одно из них значением из SQL-запроса.Заполните textBox со значениями из таблицы

стол называется tbl-apartner, и я хочу выбрать каждый mailadress, который соответствует serviceid (sid2).

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

Результат этого оператора SELECT верен, но im не смог заполнить его текстовым полем.

Моя идея состояла в том, чтобы создать строку с каждым почтовым адресом, который соответствует SID, чтобы использовать их в качестве получателей для почты.

Я попытался использовать 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

Благодарим вас за ответ. Когда я открою эту форму im, получив ошибку «3061» Ошибка времени выполнения «3061». Слишком мало параметров. Ожидаемый 1. Установите d = ThisDB.OpenRecordset (q, dbOpenDynaset) – rel0aded0ne

+0

Я решил проблему. Линия Спасибо за помощь! 'q =" SELECT [tbl-apartner]. [EMail] FROM [tbl-apartner] ГДЕ [tbl-apartner]. [SID] = "& sid2' был неправильным. q = "SELECT [tbl-apartner]. [EMail] FROM [tbl-apartner] WHERE [tbl-apartner]. [SID] =" & "'" & sid2 & "'" Разница заключается в следующем: ' = "&" '"& sid2 &"' "' – rel0aded0ne

+0

Это потому, что вы используете текстовое поле для 'sid2' вместо численного, что и было для моего кода. Рад, что вы поняли это, как я был в отпуск на прошлой неделе. – SunKnight0

Смежные вопросы