2017-02-03 7 views
0

私はいくつかのtextBoxを持つフォームを持っていて、そのうちの1つにSQLクエリの値を入力したいと思います。テーブルからの値でtextBoxを塗りつぶします

テーブルはtbl-apartnerと呼ばれ、serviceidsid2)と一致するすべてのmailadressを選択します。

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

このSELECT文の出力は正しいものの、textBoxを入力することはできません。

私の考えは、メールの受信者として使用するために、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

ご返信ありがとうございます。私がそのフォームを開くと、エラー '3061'を取得します。 実行時エラー '3061'。パラメータが少なすぎます。予想される1.セットd = ThisDB.OpenRecordset(q、dbOpenDynaset) – rel0aded0ne

+0

私は問題を解決しました。 The Line ありがとうございました! q = "SELECT [tbl-apartner]。[EMail] FROM [tbl-apartner] WHERE [SID] ="&sid2' が正しくありません。 q = "SELECT [tbl-apartner]。[EMail] FROM [tbl-apartner] WHERE [tbl-apartner]。[SID] ="& "'&sid2&"' " 違いは次のとおりです。 = "&" '"&sid2&"' "' – rel0aded0ne

+0

これは、数値コードの代わりに 'sid2'のテキストフィールドを使用しているからです。これは私のコードが書かれたものです。先週の休暇で。 – SunKnight0

関連する問題