Как получить количество всех записей, где поле Date находится в следующем году, и сохранить его в переменной? - PullRequest
0 голосов
/ 28 августа 2018

Я довольно новичок в MS Access, но неплохо разбираюсь в базах данных и немного разбираюсь в SQL.

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

Моей целью было создать ярлык с описанием информации, с кнопкой под ней. Кнопка откроет отчет обо всех записях (эта часть работает нормально), и я хотел, чтобы заголовок кнопки отображал общее количество записей, соответствующих критериям.

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

Я видел несколько методов получения счетчика и сохранения его в переменной, но все, что я нашел, сохраняло только счет КАЖДОЙ записи без фильтрации для диапазона дат.

Это было лучшее, что я мог придумать, но оно не работает:

Private Sub Form_Load()

    Dim oneYearFromToday As TempVars
    SET TempVars!oneYearFromToday = (SELECT COUNT(StatuteOfLimitation) FROM Case 
    WHERE StatuteOfLimitation <= DateAdd("yyyy", 1, Date());

End Sub 

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

Плохо использовать кнопку для отображения информации. Это не цель кнопки.

Используйте текстовое поле и установите его ControlSource :

=DCount("*","[Case]","[StatuteOfLimitation]<=DateAdd("yyyy",1,Date()))

Заполняется самостоятельно, и кнопка в любое время может открыть отчет.

0 голосов
/ 29 августа 2018

DCount() обеспечивает простой подход для "Как получить счетчик всех записей, где поле Date находится в следующем году"

Dim lngCount As Long
lngCount = DCount("*", "Case", "[StatuteOfLimitation] <= DateAdd('yyyy', 1, Date())")

Затем вы можете использовать это количество в свойстве Caption вашей командной кнопки. Скажем, кнопка названа cmdOpenReport ...

Me!cmdOpenReport.Caption = "Report " & lngCount & " cases"

Если вы хотите, чтобы число в TempVar вместо обычной переменной Long, объявите его As TempVar (только один) вместо As TempVars (коллекция). И когда вы присваиваете ему значение, не используйте Set.

Dim oneYearFromToday As TempVar
TempVars!oneYearFromToday = DCount("*", "Case", "[StatuteOfLimitation] <= DateAdd('yyyy', 1, Date())")
0 голосов
/ 29 августа 2018

Я не могу комментировать ответ HansUp, но чтобы изменить заголовок метки в VBA, вам нужно открыть форму в режиме конструктора. Обычно это не то, что я делаю, лично я предпочитаю использовать несвязанное текстовое поле с метками, которые не меняются, но я сделал это в одной базе данных, чтобы обновить время / дату и пользователя для последнего отправленного электронного письма.

Код будет выглядеть так:

    DoCmd.OpenForm "yourformname", acDesign, , , , acHidden
    Forms![yourformname]![yourlabelname].Caption = "There are " & TempVars!onYearFromToday & " cases to view."
    DoCmd.Close acForm, "yourformname", acSaveYes
    DoCmd.OpenForm "yourformname", acNormal
0 голосов
/ 29 августа 2018

Возможно, я бы не использовал tempvar для хранения вашей переменной. Вы можете попробовать что-то вроде ниже, используя DAO.

Private sub Form_Load()
dim rst         as dao.recordset
dim strSQL      as string

'Creates query string
strsql = "SELECT Count(StatueOfLimitation) as RecordCount " & _
         "FROM Case " & _
         "WHERE (((StatueOfLimitation) <= DateAdd('yyyy',1,date())));"

'Opens the query string into a recordset
set rst = currentdb.openrecordset(strsql)

'Change Labelnamehere isnto the name of the label control on your form
'Change what ever saying you want here to something you want the label to display
me.labelnamehere.caption = "What ever saying you want here " & rst![RecordCount] 'Don't need a variable storage is you can use the result here

rst.close 'closes recordset
set rst = nothing 'Clears memory

EndCode: 'Ensures clean up is successful
If not rst is nothing then
     rst.close
     set rst = nothing
end if
end sub

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

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