📄 formstudent.pas
字号:
unit FormStudent;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, DBCtrls, ExtCtrls, StdCtrls, Mask, Grids, DBGrids;
type
TfrmStudent = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
dbgStudent: TDBGrid;
btnQuit: TButton;
dbeStudentID: TDBEdit;
dbeName: TDBEdit;
dbeNative: TDBEdit;
dbnStudent: TDBNavigator;
dblcbClassID: TDBLookupComboBox;
dbeBirthday: TDBEdit;
dsStudent: TDataSource;
tblStudent: TTable;
tblValid: TTable;
tblClass: TTable;
dsClass: TDataSource;
Label4: TLabel;
dbrgSex: TDBRadioGroup;
procedure FormShow(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
procedure dbnStudentClick(Sender: TObject; Button: TNavigateBtn);
procedure tblStudentAfterScroll(DataSet: TDataSet);
procedure tblStudentBeforeDelete(DataSet: TDataSet);
procedure tblStudentBeforePost(DataSet: TDataSet);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
Private
function HasRec(TableName: string): Boolean;
procedure ToggleMode;
Public
{ Public declarations }
end;
var
frmStudent: TfrmStudent;
implementation
{$R *.dfm}
procedure TfrmStudent.FormShow(Sender: TObject);
begin
tblClass.Active := true;
tblStudent.Active := true;
ToggleMode;
end;
procedure TfrmStudent.btnQuitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmStudent.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblStudent.Active := false;
tblClass.Active := false;
end;
procedure TfrmStudent.dbnStudentClick(Sender: TObject;
Button: TNavigateBtn);
begin
ToggleMode;
end;
procedure TfrmStudent.tblStudentAfterScroll(DataSet: TDataSet);
begin
ToggleMode;
end;
function TfrmStudent.HasRec(TableName: string): Boolean;
begin
Result := false;
tblValid.Active := false;
tblValid.TableName := TableName;
tblValid.Filter := 'StudentID=''' + tblStudent['StudentID'] + '''';
tblValid.Filtered := true;
tblValid.Active := true;
if not tblValid.Eof then
Result := true;
tblValid.Active := false;
end;
procedure TfrmStudent.ToggleMode;
var
strMsg: string;
CanModify: Boolean;
procedure EnableInput(Enabled: Boolean);
begin
dbgStudent.Enabled := not Enabled;
dbeStudentID.Enabled := Enabled;
dbrgSex.Enabled := Enabled;
dbeName.Enabled := Enabled;
dblcbClassID.Enabled := Enabled;
dbeBirthday.Enabled := Enabled;
dbeNative.Enabled := Enabled;
end;
begin
case tblStudent.State of
dsInsert, dsEdit:
begin
EnableInput(true);
dbnStudent.VisibleButtons := [nbPost, nbCancel];
dbeStudentID.SetFocus;
end;
else
EnableInput(false);
dbnStudent.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh];
end;
if tblStudent.State = dsEdit then
begin
CanModify := true;
strMsg := '不能修改该学生的学号。该学生存在如下教务管理记录:'#13;
if HasRec('Change') then
begin
strMsg := strMsg + ' 【学籍变更】'#13;
CanModify := false;
end;
if HasRec('Reward') then
begin
strMsg := strMsg + ' 【奖励】'#13;
CanModify := false;
end;
if HasRec('Punish') then
begin
strMsg := strMsg + ' 【处罚】'#13;
CanModify := false;
end;
strMsg := strMsg + '修改学号会破坏数据的完整性!';
if not CanModify then
ShowMessage(strMsg);
dbeStudentID.Enabled := CanModify;
end;
end;
procedure TfrmStudent.tblStudentBeforeDelete(DataSet: TDataSet);
var
strMsg: string;
CanDelete: Boolean;
begin
CanDelete := true;
strMsg := '不能删除该学生的基本信息。该学生存在如下教务管理记录:'#13;
if HasRec('Change') then
begin
strMsg := strMsg + ' 【学籍变更】'#13;
CanDelete := false;
end;
if HasRec('Reward') then
begin
strMsg := strMsg + ' 【奖励】'#13;
CanDelete := false;
end;
if HasRec('Punish') then
begin
strMsg := strMsg + ' 【处罚】'#13;
CanDelete := false;
end;
strMsg := strMsg + '删除该学生的基本信息会破坏数据的完整性!';
if not CanDelete then begin
ShowMessage(strMsg);
Abort;
end;
strMsg := Format('确定要删除学生“%s”[%s] 的基本信息吗?', [tblStudent['StudentID'], tblStudent['Name']]);
if MessageDlg(strMsg, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
Abort;
end;
procedure TfrmStudent.tblStudentBeforePost(DataSet: TDataSet);
procedure CheckField(FieldName, FieldDesc: string; dbText: TCustomEdit; NotEmpty: Boolean);
begin
dbText.Text := Trim(dbText.Text);
dbText.Text := StringReplace(dbText.Text, '''', '', [rfReplaceAll]);
dbText.Text := StringReplace(dbText.Text, ' ', '', [rfReplaceAll]);
if NotEmpty and (dbText.Text = '') then begin
ShowMessageFmt('“%s”不能为空,请输入足够的信息!', [FieldDesc]);
dbText.SetFocus;
Abort;
end
else
tblStudent.FieldByName(FieldName).AsString := dbText.Text;
end;
function ValidID: Boolean;
var
strMsg: string;
begin
Result := true;
tblValid.Active := false;
tblValid.TableName := 'Student';
tblValid.Filter := 'StudentID=''' + tblStudent['StudentID'] + '''';
tblValid.Filtered := true;
tblValid.Active := true;
if not tblValid.Eof then
begin
strMsg := Format('学号“%s”[%s] 已经存在,请重新输入!', [tblStudent['StudentID'], tblValid['Name']]);
ShowMessage(strMsg);
dbeStudentID.SetFocus;
Result := false;
end;
tblValid.Active := false;
end;
begin
CheckField('StudentID', '学号', dbeStudentID, true);
CheckField('Name', '姓名', dbeName, true);
CheckField('Birthday', '出生日期', dbeBirthday, true);
CheckField('Native', '籍贯', dbeNative, true);
if dbrgSex.Value = '' then begin
ShowMessage('性别不能为空,请输入足够的信息!');
dbrgSex.SetFocus;
Abort;
end;
if dblcbClassID.Text = '' then
begin
ShowMessage('所在班级不能为空,请输入足够的信息!');
dblcbClassID.SetFocus;
Abort;
end;
if dbeStudentID.Modified then
if not ValidID then Abort;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -