Lab 6 (Access), Access - przykład, Laboratorium Bazy Danych I


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



Wyszukiwarka