2017-02-03 101 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