Preluarea într-un textbox, via VBA, a unei valori calculate printr-o funcţie agregată

Dacă este necesară afişarea rezultatului unei interogări care foloseşte anumite funcţii (SUM, AVERAGE, MIN, MAX etc.) într-un textbox, la acţionarea unui buton, se poate realiza relativ simplu, prin folosirea unei variabile de tip Recordset.

Private Sub Command98_Click()
Dim rst As DAO.Recordset
Dim rez_sql As String
Dim d_data_cur As Date
Dim s_data_cur As String

d_data_cur = DateValue(Me!txt_data_zilei)
s_data_cur = Format(d_data_cur, "yyyy\/mm\/dd")

rez_sql = "SELECT Sum(DateDiff('n',[ora_act_start],[ora_act_sf])) AS ore_zi " & _
"FROM t_zi_lucru INNER JOIN q_start_act ON t_zi_lucru.zi_id = q_start_act.zi_id " & _
" WHERE zi_lucru =#" & s_data_cur & "#;"

Set rst = CurrentDb.OpenRecordset(rez_sql)

Me.txt_total_lucru.value = rst!ore_zi

rst.Close
Set rst = Nothing

End Sub

Într-un alt exemplu, să presupunem că ne-ar interesa afişarea valorii maxime a unui câmp de tip numeric. Pentru aceasta, vom folosi o variabilă tip String (str_max_gr), care va stoca rezultatul interogării, apoi acesta va fi preluat, în variabila tip Recordset (rst) după cum urmează:

Private Sub cmd_Adaug_gr_Click()
Dim str_max_gr As String
Dim rst As DAO.Recordset

str_max_gr = "SELECT Max(nr_gr) AS max_nr_gr FROM t_gr_ident_gr"

MsgBox str_max_gr

Set rst = CurrentDb.OpenRecordset(str_max_gr)

MsgBox rst!max_nr_gr

Me.testVBA.Value = rst!max_nr_gr
End Sub

Fig. 2

După cum se observă în figura 2, rezutatul apare în textbox (17); pentru comparaţie între cele două variabile (String şi Recordset) am inserat şi două mesaje, ca să se vadă rezultatul diferit (sintaxă, respectiv, valoare).

Sursa: prelucrare după StackOverflow.com (1), (2).

Author: Ovidiu.S

Suficient de pasionat de această zonă profesională ca, în cazul în care ştiu ceva - cât de puţin - să împărtăşesc cu alţii.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *