Již nám fungují základní navigační tlačítka. Je však vidět, že se nezobrazuje celkové množství v paletách. Výpočet uděláme v proceduře CelkoveMnozstvi pomocí SQL příkazu, kde využijeme agregační funkci SUM. Pokud celkové množství klesne pod pojistnou zásobu, zobrazíme na formuláři u celkového množství vykřičník (pomocí objektu ErrorProvider) s informací "Pozor, jste pod pojistnou zásobou".
Na formulář proto musíme nejdříve vložit objekt ErrorProvider, který i tak nazveme.
Programový kód bude následující:
#Region "Uprava zaznamu"
Private Sub TblPaletyBindingSource_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TblPaletyBindingSource.PositionChanged
Cursor.Current = Cursors.WaitCursor
'paleta bez materiálu - bez zobrazení názvu, s možností rezervace
If IsDBNull(Me.TblPaletyBindingSource.Current("cislo_mat")) Then
Me.btnRezervace.Enabled = True
Me.btnZmenaObsahuPalety.Enabled = False
Else ' zobrazení názvu materiálu, možnost přidávat a ubírat
Me.btnRezervace.Enabled = False
Me.btnZmenaObsahuPalety.Enabled = True
'vypocitame celkove mnozstvi pomoci agregacni funkce
CelkoveMnozstvi()
End If
' zobrazení stavu a nastavení možnosti jeho změny
Select Case Me.TblPaletyBindingSource.Current("Stav_Pa")
Case "V"
Me.btnVyskladnit.Enabled = False
Me.btnZaskladnit.Enabled = True
Me.btnVyskladneno.Enabled = False
Me.btnZaskladneno.Enabled = False
Case "Z"
Me.btnVyskladnit.Enabled = True
Me.btnZaskladnit.Enabled = False
Me.btnVyskladneno.Enabled = False
Me.btnZaskladneno.Enabled = False
Case "D"
Me.btnVyskladnit.Enabled = False
Me.btnZaskladnit.Enabled = False
Me.btnVyskladneno.Enabled = True
Me.btnZaskladneno.Enabled = True
End Select
Cursor.Current = Cursors.Default
End Sub
Private Sub CelkoveMnozstvi()
'vypocitame celkove mnozstvi pomoci agregacni funkce
Dim CelkoveMnozstvi As Integer
If Not IsDBNull(Me.TblPaletyBindingSource.Current("cislo_mat")) Then
Dim strSQL As String
strSQL = "SELECT SUM(Mnoz_pa) AS CelkoveMnozstvi FROM tblPalety WHERE cislo_mat = '" & Me.TblMaterialBindingSource.Current("cislo_mat") & "'"
Dim oledbcon As New OleDb.OleDbConnection
oledbcon.ConnectionString = TblPaletyTableAdapter.Connection.ConnectionString
oledbcon.Open()
Dim cmd As New OleDb.OleDbCommand(strSQL, oledbcon)
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader()
'ziskame celkove mnozstvi
dr.Read()
CelkoveMnozstvi = IIf(IsDBNull(dr("CelkoveMnozstvi")), "0", dr("CelkoveMnozstvi"))
oledbcon.Close()
If CelkoveMnozstvi <= CInt(Me.txtMnoz_Poj.Text) Then
ErrorProvider.SetError(Me.txtMnoz_Celk, "Pozor, jste pod pojistnou zásobou")
Else
ErrorProvider.SetError(Me.txtMnoz_Celk, "")
End If
Else
CelkoveMnozstvi = 0
End If
Me.txtMnoz_Celk.Text = CelkoveMnozstvi
End Sub
#End Region