📄 studclass.pas
字号:
unit studclass;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,
DBCtrls, Mask;
type
Tfrmclass = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
dbeclassID: TDBEdit;
dbeclassname: TDBEdit;
dbebegindate: TDBEdit;
dbemaster: TDBEdit;
dbetelephone: TDBEdit;
dblcbdepart: TDBLookupComboBox;
GroupBox1: TGroupBox;
dbmDesc: TDBMemo;
dbnclass: TDBNavigator;
btnquit: TBitBtn;
dbgclass: TDBGrid;
tblclass: TTable;
tbldepartment: TTable;
tblvalid: TTable;
dsclass: TDataSource;
dsdepart: TDataSource;
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);
procedure FormShow(Sender: TObject);
private
procedure ToggleMode;
function hasStudent(var str:string):boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
frmclass: Tfrmclass;
implementation
{$R *.dfm}
procedure Tfrmclass.btnquitClick(Sender: TObject);
begin
close;
end;
procedure Tfrmclass.ToggleMode;
var strmsg:string;
procedure EnableInput(enabled:boolean) ;
begin
dbgclass.Enabled:=not enabled;
dbeclassID.Enabled:=enabled;
dbeclassname.Enabled:=enabled;
dblcbdepart.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
showmessage(strmsg);
dbeclassID.Enabled:=false;
dbeclassname.Enabled:=false;
dblcbdepart.Enabled:=false;
end;
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']]);
result:=true;
end;
tblvalid.Active:=false;
end;
procedure Tfrmclass.dbnclassClick(Sender: TObject; Button: TNavigateBtn);
begin
ToggleMode;
end;
procedure Tfrmclass.tblclassAfterScroll(DataSet: TDataSet);
begin
ToggleMode;
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,[tbldepartment['departname']]);
strmsg:=strmsg+format('班主任:%S'#13,[tblclass['master']]);
strmsg:=strmsg+format('联系电话:%S'#13,[tblclass['telephone']]);
if messagedlg(strmsg,mtconfirmation,[mbyes,mbno],0)<>mryes then
abort;
end;
procedure Tfrmclass.tblclassBeforePost(DataSet: TDataSet);
procedure checkInput(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:='student';
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,[tblclass['classID']]);
strmsg:=strmsg+format('班级名称:%S'#13,[tblclass['classname']]);
strmsg:=strmsg+format('所属院系:%S'#13,[tbldepartment['departname']]);
strmsg:=strmsg+format('入学日期:%S'#13,[tblclass['begindate']]);
strmsg:=strmsg+format('班主任:%S'#13,[tblclass['master']]);
strmsg:=strmsg+format('联系电话:%S'#13,[tblclass['telephone']]);
showmessage(strmsg);
dbeclassID.SetFocus;
result:=false;
end;
tblvalid.Active:=false;
end;
begin
checkinput('classID','班级编号',dbeclassID,true);
checkinput('classname','班级名称',dbeclassname,true);
checkinput('begindate','入学日期',dbebegindate,true);
checkinput('master','班主任',dbemaster,true);
checkinput('telephone','联系电话',dbetelephone,true);
checkinput('description','说明',dbmDesc,false);
if dblcbdepart.Text='' then
begin
showmessage('所属院系不能为空,请输入足够的信息');
dblcbdepart.SetFocus;
abort;
end;
if dbeclassId.Modified and not validID then
abort;
end;
procedure Tfrmclass.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblclass.Active:=false;
tbldepartment.Active:=false;
end;
procedure Tfrmclass.FormShow(Sender: TObject);
begin
tblclass.Active:=true;
tbldepartment.Active:=true;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -