感謝所有為此提供幫助的人,謝謝。我的目標是為我的員工獲取聊天對話的持續時間,然后計算他們的年平均值。正在將資料作為(mm:ss 或 18:30)格式的短文本插入到資料庫中。我已經嘗試以幾種不同的方式轉換和決議資料,到目前為止,我已經瀏覽了 SO.com 上的眾多解釋和解決方案,但沒有任何作業符合我的意愿。下面是我將資料帶入表單的顯示程序。我知道我可以以更簡單的方式完成此操作,但我對 VB.net 和一般編碼相當陌生。
Private Sub DisplayJanMetrics()
'Open a connection to the database and then assign the values from the appropriate metric columns to the appropriate labels.
Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\CoachingDB.accdb"
Dim conn As New OleDbConnection(str)
Try
conn.Open()
Dim sql As String = "SELECT Duration, CSAT, Away, Quality, Development FROM January WHERE Employee =" & "'" & cmbEmployee.SelectedItem.ToString & "'"
Dim cmd As New OleDbCommand(sql, conn)
Dim myReader As OleDbDataReader = cmd.ExecuteReader()
While myReader.Read
lblJanDuration.Text = myReader("Duration").ToString
lblJanCSAT.Text = myReader("CSAT").ToString
lblJanAway.Text = myReader("Away").ToString
lblJanQual.Text = myReader("Quality").ToString
lblJanDev.Text = myReader("Development").ToString
End While
Catch ex As OleDbException
MsgBox(ex.ToString)
Finally
conn.Close()
End Try
End Sub
將資料加載到正確的標簽后,我有一個按鈕和單擊事件來計算標簽的平均值 - 其他的我可以輕松完成,因為我可以將它們決議為雙精度,然后從那里進行計算。這是表格外觀的影像,我認為它會幫助你們所有人了解我要完成的任務。
這是表單布局的樣子
uj5u.com熱心網友回復:
將用戶界面代碼與資料庫代碼分開是個好主意。通過將月份作為 傳遞,您可以對任何月份使用相同的資料檢索功能TableName。
資料庫物件 Connection、Command 和 DataReader 都需要處理和關閉,以便將它們放置在Using塊中。您不希望在更新用戶界面時保持連接打開。只需回傳 aDataTable并用它更新 UI。
CalculateAverage首先創建要包含在平均值中的標簽陣列。您可以包括所有 12 個,但平均值將不包括空標簽。( IsNullOrEmpty)
將字串分成分鐘和秒。獲取總秒數并添加到串列中。
獲得通過呼叫平均秒數Average上List(Of Integer)。
最后,將平均秒數轉換回分鐘和秒數并格式化一個字串以顯示。
Private Sub DisplayJanMetrics()
Dim dt As DataTable
Try
dt = GetEmployeeData(cmbEmployee.SelectedItem.ToString, "January")
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
If dt.Rows.Count > 0 Then
lblJanDuration.Text = dt(0)("Duration").ToString
lblJanCSAT.Text = dt(0)("CSAT").ToString
lblJanAway.Text = dt(0)("Away").ToString
lblJanQual.Text = dt(0)("Quality").ToString
lblJanDev.Text = dt(0)("Development").ToString
End If
End Sub
Private Function GetEmployeeData(Employee As String, TableName As String) As DataTable
Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\CoachingDB.accdb"
Dim sql As String = $"SELECT Duration, CSAT, Away, Quality, Development FROM {TableName} WHERE Employee = @Employee;"
Dim dt As New DataTable
Using conn As New OleDbConnection(str),
cmd As New OleDbCommand(sql, conn)
cmd.Parameters.Add("@Employee", OleDbType.VarChar).Value = Employee
conn.Open()
Using reader = cmd.ExecuteReader
dt.Load(reader)
End Using
End Using
Return dt
End Function
Private Function CalculateAverage() As String
Dim lst As New List(Of Integer)
Dim labels() = {Label1, Label2, Label3, Label4} 'an array of 1 thru 12
For Each label In labels
If Not String.IsNullOrEmpty(label.Text) Then
Dim fields = label.Text.Split(":"c)
Dim mins = CInt(fields(0))
Dim secs = CInt(fields(1))
lst.Add(mins * 60 secs)
End If
Next
Dim avg = lst.Average
Dim avgMins = Math.Truncate(avg / 60)
Dim remainderSec = avg - avgMins * 60
Return $"{avgMins}:{remainderSec}"
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/367654.html
標籤:网络
