📄 formclass.pas
字号:
unit FormClass;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, DBTables, ExtCtrls, DBCtrls, StdCtrls, Mask;
type
TfrmClass = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
dbgClass: TDBGrid;
btnQuit: TButton;
dbeClassID: TDBEdit;
dbeClassName: TDBEdit;
dbeMaster: TDBEdit;
dbeTelephone: TDBEdit;
GroupBox1: TGroupBox;
dbmDesc: TDBMemo;
dbnClass: TDBNavigator;
dsClass: TDataSource;
tblClass: TTable;
tblValid: TTable;
dblcbDepartID: TDBLookupComboBox;
Label5: TLabel;
dbeBeginDate: TDBEdit;
Label6: TLabel;
tblDepart: TTable;
dsDepart: TDataSource;
procedure FormShow(Sender: TObject);
procedure btnQuitClick(Sender: TObject);
procedure dbnClassClick(Sender: TObject; Button: TNavigateBtn);
procedure tblClassAfterScroll(DataSet: TDataSet);
procedure tblClassBeforeDelete(DataSet: TDataSet);
procedure tblClassBeforePost(DataSet: TDataSet);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
function HasStudent(var str: string): Boolean;
procedure ToggleMode;
public
{ Public declarations }
end;
var
frmClass: TfrmClass;
implementation
{$R *.dfm}
procedure TfrmClass.FormShow(Sender: TObject);
begin
tblDepart.Active := true;
tblClass.Active := true;
ToggleMode;
end;
procedure TfrmClass.btnQuitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmClass.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblClass.Active := false;
tblDepart.Active := false;
end;
procedure TfrmClass.dbnClassClick(Sender: TObject; Button: TNavigateBtn);
begin
ToggleMode;
end;
procedure TfrmClass.tblClassAfterScroll(DataSet: TDataSet);
begin
ToggleMode;
end;
function TfrmClass.HasStudent(var str: string): Boolean;
begin
Result := false;
tblValid.Active := false;
tblValid.TableName := 'Student';
tblValid.Filter := 'ClassID=''' + tblClass['ClassID'] + '''';
tblValid.Filtered := true;
tblValid.Active := true;
if not tblValid.Eof then
begin
str := Format('不能修改班级“%s”的编号, 下面的学生:'#13, [tblClass['ClassName']]);
repeat
str := str + Format('%10s - %s'#13, [tblValid['StudentID'], tblValid['Name']]);
tblValid.Next;
until tblValid.Eof;
str := str + '隶属于该班级。';
Result := true;
end;
tblValid.Active := false;
end;
procedure TfrmClass.ToggleMode;
var
strMsg: string;
procedure EnableInput(Enabled: Boolean);
begin
dbgClass.Enabled := not Enabled;
dbeClassID.Enabled := Enabled;
dbeClassName.Enabled := Enabled;
dblcbDepartID.Enabled := Enabled;
dbeBeginDate.Enabled := Enabled;
dbeMaster.Enabled := Enabled;
dbeTelephone.Enabled := Enabled;
dbmDesc.Enabled := Enabled;
end;
begin
case tblClass.State of
dsInsert, dsEdit:
begin
EnableInput(true);
dbnClass.VisibleButtons := [nbPost, nbCancel];
dbeClassID.SetFocus;
end;
else
EnableInput(false);
dbnClass.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh];
end;
if (tblClass.State = dsEdit) and HasStudent(strMsg) then
begin
dbeClassID.Enabled := false;
ShowMessage(strMsg)
end;
end;
procedure TfrmClass.tblClassBeforeDelete(DataSet: TDataSet);
var
strMsg: string;
begin
if HasStudent(strMsg) then
begin
ShowMessage(strMsg);
Abort;
end;
strMsg := Format('确定要删除班级"%s"吗?该班级相关信息如下:'#13, [tblClass['ClassName']]);
strMsg := strMsg + Format(' 班级编号:%s'#13, [tblClass['ClassID']]);
strMsg := strMsg + Format(' 班级名称:%s'#13, [tblClass['ClassName']]);
strMsg := strMsg + Format(' 班主任:%s'#13, [tblClass['Master']]);
if MessageDlg(strMsg, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
Abort;
end;
procedure TfrmClass.tblClassBeforePost(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
tblClass.FieldByName(FieldName).AsString := dbText.Text;
end;
function ValidID: Boolean;
var
strMsg: string;
begin
Result := true;
tblValid.Active := false;
tblValid.TableName := 'Class';
tblValid.Filter := 'ClassID=''' + tblClass['ClassID'] + '''';
tblValid.Filtered := true;
tblValid.Active := true;
if not tblValid.Eof then
begin
strMsg := Format('班级编号“%s”已经存在,请重新输入!'#13, [tblClass['ClassID']]);
strMsg := strMsg + Format(' 班级编号:%s'#13, [tblValid['ClassID']]);
strMsg := strMsg + Format(' 班级名称:%s'#13, [tblValid['ClassName']]);
strMsg := strMsg + Format(' 班主任:%s'#13, [tblValid['Master']]);
ShowMessage(strMsg);
dbeClassID.SetFocus;
Result := false;
end;
tblValid.Active := false;
end;
begin
CheckField('ClassID', '班级编号', dbeClassID, true);
CheckField('ClassName', '班级名称', dbeClassName, true);
CheckField('BeginDate', '入学日期', dbeBeginDate, true);
CheckField('Master', '班主任', dbeMaster, true);
CheckField('MasterTel', '联系电话', dbeTelephone, true);
CheckField('Description', '说明', dbmDesc, false);
if dblcbDepartID.Text = '' then
begin
ShowMessage('所属院系不能为空,请输入足够的信息!');
dblcbDepartID.SetFocus;
Abort;
end;
if dbeClassID.Modified and not ValidID then
Abort;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -