Laboratorium Bazy Danych I
Zadanie z Access'a - kolokwium termin 2.
Treść zadania:
W języku MS Access Basic napisać procedurę
Oblicz_stypendium (min_srednia, max_srednia, rok, miesiac, kwota)
dodającą studentom w roku akademickim "rok" i miesiącu "miesiac" stypendium w wysokości "kwota". Studenci ci muszą mieć w roku "rok" średnią ocen pomiędzy "min_srednia" a "max_srednia". Jeśli dany student posiada już wygenerowane (przed wykonaniem procedury) stypendium na dany rok i miesiąc akademicki to należy mu do istniejącej kwoty stypendium dodać wartość "kwota".
Struktura bazy danych:
studenci(ALBUM, NAZWISKO, IMIE, ADRES_ZAMIESZKANIA, DATA_UR)
oceny(ALBUM, ROK, SEMESTR, PRZEDMIOT,OCENA)
stypendia(ALBUM, ROK, MIESIAC, KWOTA)
Uwaga:
1) Dla wszystkich tabel zdefiniowane są klucze główne mające nazwę PrimaryKey.
2) W zadaniu nie można wykorzystywać metody z rodziny Find.
-----------------------------------------------------------------
Poniżej przedstawiono 2 przykładowe rozwiązania zadania z MS Access z II terminu kolokwium zaliczeniowego.
Sub przyklad_1(min_srednia, max_srednia, rok, miesiac, kwota)
Dim db As Database
Dim zap_sred As Recordset
Dim tb_styp As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set zap_sred = db.OpenRecordset("select album, avg(ocena) as srednia from oceny where rok = '" & rok & "' group by album")
Set tb_styp = db.OpenRecordset("Stypendia")
tb_styp.Index = "PrimaryKey"
Do Until zap_sred.EOF
If zap_sred!srednia >= min_srednia And zap_sred!srednia <= max_srednia Then
tb_styp.Seek "=", zap_sred!ALBUM, rok, miesiac
If tb_styp.NoMatch Then
tb_styp.AddNew
tb_styp!ALBUM = zap_sred!ALBUM
tb_styp!rok = rok
tb_styp!miesiac = miesiac
tb_styp!kwota = kwota
tb_styp.Update
Else
tb_styp.Edit
tb_styp!kwota = tb_styp!kwota + kwota
tb_styp.Update
End If
End If
zap_sred.MoveNext
Loop
zap_sred.Close
tb_styp.Close
End Sub
-------
Sub przyklad_2(min_srednia, max_srednia, rok, miesiac, kwota)
Dim db As Database
Dim zap_sred As Recordset
Dim tb_styp As Recordset
Set db = DBEngine.Workspaces(0).Databases(0)
Set zap_sred = db.OpenRecordset("select album from oceny where rok = '" & rok & "' group by album having avg(ocena)>= " & min_srednia & " and avg(ocena) <= " & max_srednia & " ;")
Set tb_styp = db.OpenRecordset("Stypendia")
tb_styp.Index = "PrimaryKey"
Do Until zap_sred.EOF
tb_styp.Seek "=", zap_sred!ALBUM, rok, miesiac
If tb_styp.NoMatch Then
tb_styp.AddNew
tb_styp!ALBUM = zap_sred!ALBUM
tb_styp!rok = rok
tb_styp!miesiac = miesiac
tb_styp!kwota = kwota
tb_styp.Update
Else
tb_styp.Edit
tb_styp!kwota = tb_styp!kwota + kwota
tb_styp.Update
End If
zap_sred.MoveNext
Loop
zap_sred.Close
tb_styp.Close
End Sub