2010-12-03 9 views
1

Ich habe zwei verwandte Fragen. Erstens: Wie weise ich den Wert eines Abfrageergebnisses einer Textbox zu?Zuweisen von Abfrageergebnis zu Textfeld in MS Access

Hier ist der Code, den ich habe, zur Zeit auf dem Click-Ereignis einer Schaltfläche zugeordnet:

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 

Dies funktioniert, aber es öffnet sich die Abfrage und zeigt das Ergebnis in einem Datenblatt. Ich möchte das Ergebnis in einem Textfeld auf dem Formular anzeigen, anstatt auf eine Schaltfläche klicken und ein Datenblatt anzeigen zu müssen. Erstens, wie kann ich das Ergebnis als Zeichenfolge abrufen, anstatt die Abfrage zum Öffnen eines Datenblattes auszuführen? Was ich im Web gefunden habe scheint darauf hinzuweisen, dlookup zu verwenden, anstatt die Abfrage so auszuführen, wie ich es geschrieben habe, aber von dem, was ich gefunden habe, scheint dlookup geeignet zu sein, einfache Abfragen auszuführen, und ich habe nichts gefunden, was anzeigt Fügen Sie komplexere Anforderungen hinzu, z. B. count und groupby.

Zweitens, wie führe ich die Abfrage, wenn das Formular geöffnet ist? Ich nehme an, dass ich es auslösen möchte, um auf einem Ereignis zu laufen, aber es scheint kein passendes Ereignis unter den Eigenschaften des Textfelds verfügbar zu sein.

Ich bin ein Netzwerk-Ingenieur, kein Programmierer oder ein Datenbank-Analyst, aber ich habe genug Dinge probiert, dass all diese Art von Arbeit in meinem Schoß abgeladen wird. Wenn jemand einem kämpfenden Ingenieur helfen kann, würde ich das sicherlich zu schätzen wissen.

Antwort

3

In diesem Fall ist es wahrscheinlich am besten DCount verwenden:

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

Sie direkt die Steuerquelle eines Textfeldes auf diese Aussage festlegen.

jedoch für die Zukunft:

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

eine neue Form bilden mit der Datenquelle, da diese Abfrage ohne die Zählung, lassen Sie alle Ergebnisse geben, dann in Form Fußzeile ein Textfeld machen und setzen Sie den Text to "= Count ([Switch Port Matrix]. [Gerätetyp beenden])"

setzen Sie dieses Formular als Teilformular in das Formular, in dem Sie das Ergebnis anzeigen möchten, und Sie können aus dem Hauptformular auf Sie verweisen finden Sie eine ähnliche Idee in diesem Link 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