Назначить результат запроса для текстового поля в MS Access - PullRequest
1 голос
/ 03 декабря 2010

У меня есть два связанных вопроса. Во-первых, как мне присвоить значение результата запроса текстовому полю?

Вот код, который я присвоил событию нажатия кнопки:

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 кажется подходящим для выполнения простых запросов, и я не нашел ничего, что указывало бы на то, что добавьте более сложные требования, такие как count и groupby.

Во-вторых, как мне выполнить запрос, когда форма открыта? Я предполагаю, что хочу запустить его на событии, но в свойствах текстового поля, похоже, нет подходящего события.

Я сетевой инженер, а не программист или аналитик базы данных, но я баловался достаточным количеством вещей, которые вся эта работа бросает мне на колени. Если кто-то может помочь борющемуся инженеру, я, безусловно, буду благодарен.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

В этом случае, вероятно, лучше всего использовать DCount:

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

Вы можете напрямую установить источник управления текстового поля для этого оператора.

Однако, для дальнейшего использования:1006 *

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 голосов
/ 03 декабря 2010

Создайте новую форму с источником записи в качестве этого запроса без счетчика, позвольте дать все результаты, затем в нижнем колонтитуле формы создайте текстовое поле и установите его текст "= Count ([Switch Port Matrix]. [End Device Тип]) "

Поместите эту форму в качестве подчиненной формы, где вы хотите отобразить результат, и вы можете ссылаться на него из основной формы, вы можете найти аналогичную идею в этой ссылке 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...