2010-12-03 20 views
1

2つの関連する質問があります。まず、クエリ結果の値をテキストボックスにどのように割り当てるのですか?MS Accessのテキストボックスにクエリ結果を割り当てます。

は、ここで私は、現在、ボタンのクリックイベントに割り当てられているコードです:

Private Sub SeatCount_Click() 
Dim db As Database 
Dim qdf As QueryDef 
Dim sql As String 
Dim rs As Recordset 

sql = "SELECT Count([Switch Port Matrix].[End Device Type]) AS [CountOfEnd Device Type] FROM [Switch Port Matrix] WHERE ((([Switch Port Matrix].[End Device Type])=""Seat"" Or ([Switch Port Matrix].[End Device Type])=""6AB"") AND (([Switch Port Matrix].Enabled)=1)) GROUP BY [Switch Port Matrix].[Switch Name] HAVING ((([Switch Port Matrix].[Switch Name]) Like """ & Me![Switch Name] & """))" 

Set db = CurrentDb() 
With db 
    On Error Resume Next 
    .QueryDefs.Delete "SeatCount" 
    Set qdf = .CreateQueryDef("SeatCount", sql) 
    DoCmd.OpenQuery "SeatCount" 
    .QueryDefs.Delete "SeatCount" 
End With 
db.Close 
qdf.Close 

End Sub 

これは動作しますが、それは、クエリを開き、データシートに結果を表示します。私がしたいのは、ボタンをクリックしてデータシートを見る必要がなく、フォーム上のテキストボックスに結果を表示することです。まず、データシートを開くためにクエリを実行するのではなく、結果を文字列として取得するにはどうすればよいですか?私がウェブ上で見つけたのは、私が書いたように、クエリを実行するのではなく、dlookupを使うことを指しているようですが、私が見つけたものから、dlookupは簡単なクエリを実行するのに適しています。カウントやグループバイなどの複雑な要件を追加する。

第2に、フォームを開いたときにクエリを実行するにはどうすればよいですか?私はイベントで実行するようにトリガーしたいと思っていますが、テキストボックスのプロパティの下で利用できる適切なイベントがないようです。

私はネットワークエンジニアであり、プログラマーやデータベースアナリストではありませんが、私はこのような仕事のすべてが自分のラップに投げ捨てられているということを十分に熟知しています。誰かが苦労しているエンジニアを助けることができるなら、私は確かにそれを感謝します。

答えて

3

この場合には、Dcount関数を使用するのが最善です:

=DCount("End Device Type","Switch Port Matrix","[End Device Type] IN ('Seat','6AB') AND [Enabled]=1 AND [Switch Name] = '" & [Switch Name] & "'") 

あなたはこの声明にテキストボックスのコントロールソースを直接設定することができます。

しかし、今後の参考のために:

Private Sub SeatCount_Click() 
Dim db As Database 
Dim rs As DAO.Recordset ''Requires reference to Microsoft DAO x.x Library 
Dim sSQL As String 

sSQL = "SELECT Count(s.[End Device Type]) AS CountOfEndDeviceType " _ 
    & "FROM [Switch Port Matrix] s " _ 
    & "WHERE s.[End Device Type] IN ('Seat,'6AB') AND s.Enabled=1 " _ 
    & "s.[Switch Name] = '" & Me![Switch Name] & "'" 

Set db = CurrentDb 
Set rs = db.OpenRecordset(sSQL) 

If rs.recordCount>0 Then 
    Me.txtTextbox=rs!CountOfEndDeviceType 
Else 
    Me.txtTextbox="N/A" 
End If 

Set rs=Nothing 
Set db=Nothing  
End Sub 
0

その後、フォームのフッターにテキストボックスを作成し、そのテキストを設定し、すべての結果を与えてみましょう、回数せずに、このクエリとしてレコードソースで新しいフォームを作成します(Switch Port Matrix)。[End Device Type])」

結果を表示するフォームにこのフォームをサブフォームとして配置し、メインフォームからこのフォームを参照することができます。このリンクにも同様の考えがあります。 http://office.microsoft.com/en-us/access-help/about-calculating-a-total-in-a-subform-and-displaying-it-on-a-form-HP005187909.aspx?CTT=1