(General) (Declaration) (Modul) Option Explicit Public stDB As Database, stRS As Recordset Public AddEditRecord As Boolean (General) (Declaration) (frmData) Private Sub cmdDelete_Click() ' удаление записи Dim tmpRS As Recordset, id As Integer ' создать выборку на одной таблице Set tmpRS = stDB.OpenRecordset("SELECT * FROM Studs", _ dbOpenDynaset, dbInconsistent) ' удалять нечего - выйти If tmpRS.RecordCount = 0 Then Exit Sub ' найти удаляемого студента - позиционирование указателя tmpRS.FindFirst "S_ID = " & stRS!S_ID If MsgBox("Текущая запись будет удалена", _ vbOKCancel + vbExclamation, "Удаление записи") _ = vbOK Then tmpRS.Delete ' после удаления установить указатель на предыдущую запись If tmpRS.RecordCount > 0 Then stRS.MoveNext If stRS.EOF Then stRS.MovePrevious id = stRS!S_ID Else cmdFirst.Enabled = False cmdPrev.Enabled = False cmdNext.Enabled = False cmdLast.Enabled = False End If ' обновить динамический набор Set stRS = stDB.OpenRecordset("SELECT S_Name, S_Bal, G_Numb, " & _ "F_Long, Studs.G_ID, S_ID " & _ "FROM Studs, Faculs, Groups WHERE " & _ "Faculs.F_ID = Groups.F_ID and " & _ "Studs.G_ID = Groups.G_ID ORDER BY S_Name" & _ dbOpenDynaset, dbInconsistent) stRS.FindFirst "S_ID = " & Str(id) ShowAll End Sub Private Sub cmdEdit_Click() AddEditRecord = False frmAddEdit.Show End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdFirst_Click() stRS.MoveFirst cmdFirst.Enabled = False cmdPrev.Enabled = False cmdNext.Enabled = True cmdLast.Enabled = True ShowAll End Sub Private Sub cmdInsert_Click() AddEditRecord = True stRS.AddNew frmAddEdit.Show End Sub Private Sub cmdLast_Click() stRS.MoveLast cmdFirst.Enabled = True cmdPrev.Enabled = True cmdNext.Enabled = False cmdLast.Enabled = False ShowAll End Sub Private Sub cmdNext_Click() If Not stRS.EOF Then stRS.MoveNext If stRS.EOF Then cmdNext.Enabled = False cmdLast.Enabled = False stRS.MoveLast End If End If cmdPrev.Enabled = True cmdFirst.Enabled = True ShowAll End Sub Private Sub cmdPrev_Click() If Not stRS.BOF Then stRS.MovePrevious If stRS.BOF Then cmdPrev.Enabled = False cmdFirst.Enabled = False stRS.MoveFirst End If End If cmdNext.Enabled = True cmdLast.Enabled = True ShowAll End Sub Private Sub Form_Load() ' открытие базы данных Set stDB = OpenDatabase("FStud.mdb") ' создание динамического набора записей Set stRS = stDB.OpenRecordset("SELECT S_Name, S_Bal, G_Numb, " & _ "F_Long, Studs.G_ID, S_ID " & _ "FROM Studs, Faculs, Groups WHERE " & _ "Faculs.F_ID = Groups.F_ID and " & _ "Studs.G_ID = Groups.G_ID ORDER BY S_Name", _ dbOpenDynaset, dbInconsistent) If stRS.RecordCount = 0 Then cmdNext.Enabled = False cmdLast.Enabled = False Else cmdNext.Enabled = True cmdLast.Enabled = True End If cmdFirst.Enabled = False cmdPrev.Enabled = False ShowAll End Sub ' заполнение полей формы Public Sub ShowAll() If stRS.RecordCount > 0 Then txtFacult.Text = stRS!F_Long txtGroup.Text = stRS!G_Numb txtName.Text = stRS!S_Name txtBal.Text = stRS!S_Bal Else txtFacult.Text = "" txtGroup.Text = "" txtName.Text = "" txtBal.Text = "" End If End Sub (General) (Declaration) (frmAddEdit) Private grRS As Recordset Private Sub cboGroup_Click() grRS.FindFirst "G_Numb = " & cboGroup.Text txtFacult.Text = grRS!F_Long End Sub Private Sub cmdCancel_Click() Me.Hide End Sub Private Sub cmdOk_Click() Dim id As Integer If Not AddEditRecord Then stRS.Edit ' если запись редактируется stRS!S_Name = txtName stRS!S_Bal = Val(txtBal) stRS!G_ID = grRS!G_ID stRS.Update id = stRS!S_ID Else ' если запись вставляется stDB.Execute "INSERT INTO Studs (G_ID, S_Name, " & _ "S_Bal) VALUES(" & Str(grRS!G_ID) & ", '" & _ txtName & "', " & Str(Val(txtBal)) & ");" End If Set stRS = stDB.OpenRecordSet("SELECT S_Name, "& _ "S_Bal, G_Numb, F_Long, Studs.G_ID, S_ID " & _ "FROM Studs, Faculs, Groups WHERE Faculs.F_ID " & _ "= Groups.F_ID and Studs.G_ID = Groups.G_ID " & "ORDER BY S_Name", dbOpenDynaset, dbInconsistent) stRS.FindFirst "S_ID = " & Str(id) frmData.ShowAll Me.Hide End Sub Private Sub Form_Activate() Dim stbMark As String, i As Integer Dim tmpRS As Recordset Set tmpRS = stDB.OpenRecordset("SELECT G_Numb FROM Groups", _ dbOpenDynaset) Set grRS = stDB.OpenRecordset("SELECT G_ID, G_Numb, F_Long " & _ "FROM Groups, Faculs WHERE Groups.F_ID = " & _ "Faculs.F_ID", dbOpenDynaset) tmpRS.MoveLast tmpRS.MoveFirst txtFacult.Text = IIf(AddEditRecord, "", stRS!F_Long) txtName.Text = IIf(AddEditRecord, "", stRS!S_Name) txtBal.Text = IIf(AddEditRecord, "", stRS!S_Bal) For i = 1 To tmpRS.RecordCount cboGroup.List(i - 1) = tmpRS!G_Numb tmpRS.MoveNext Next tmpRS.MoveFirst cboGroup.Text = IIf(AddEditRecord, tmpRS!G_Numb, stRS!G_Numb) cboGroup.Text = IIf(AddEditRecord, & _ tmpRS!G_Numb, stRS!G_Numb) End Sub