📄 ucourse.pas
字号:
unit uCourse;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Mask, DBCtrls, DBTables, Db, AdoDb, ExtCtrls, Grids,
DBGrids, ComCtrls, ComObj ;
type
TfrmCourse = class(TForm)
DBGrdSampleDir: TDBGrid;
DBNavBtns: TDBNavigator;
ActiveSource: TDataSource;
Panel1: TPanel;
LblCno: TLabel;
LblCName: TLabel;
DBEdtCName: TDBEdit;
DBEdtCno: TDBEdit;
Panel2: TPanel;
LblRec: TLabel;
LblText: TLabel;
ModeIndicator: TLabel;
DBDeleteBtns: TBitBtn;
DBEditBtns: TDBNavigator;
DBInsertBtns: TDBNavigator;
DBSaveBtns: TBitBtn;
DBCancelBtns: TDBNavigator;
BitBtnClose: TBitBtn;
LblCTime: TLabel;
DBEdtCTime: TDBEdit;
LblCCredit: TLabel;
DBEdtCCredit: TDBEdit;
procedure BitBtnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ActiveSourceDataChange(Sender: TObject; Field: TField);
procedure ActiveSourceStateChange(Sender: TObject);
procedure DBInsertBtnsClick(Sender: TObject; Button: TNavigateBtn);
procedure DBDeleteBtnsClick(Sender: TObject);
procedure DBSaveBtnsClick(Sender: TObject);
private
{ Private declarations }
procedure AppException(Sender: TObject; E: Exception);
procedure BeforeSaveCheck ;
public
{ Public declarations }
end;
var
frmCourse: TfrmCourse;
VRecNo, VRecCount : integer;
implementation
uses uDm;
{$R *.DFM}
const
DatasetStates: array[TDataSetState] of string =
('Not active', '浏览', '编辑', '插入', '删除', '',
'', '', '', '', '', '', '');
HelpTopicEdit = 2;
HelpTopicBrowse = 3;
procedure TfrmCourse.AppException(Sender: TObject; E: Exception);
begin
if DMSchool.ADOConn.InTransaction then
DMSchool.ADOConn.RollbackTrans ; // 事务回退
if Copy(E.Message,1,3) = 'ORA' then
begin
Application.MessageBox(PChar('请正确输入数据,重试!' + #13
+ '出错信息:' + Copy(E.Message,11, Length(E.Message)-10)),
'校验信息', MB_OK+MB_ICONInformation);
Exit;
end;
Application.MessageBox(PChar('请正确输入数据,重试!' + #13
+ '出错信息:' + E.Message), '出错信息', MB_ICONSTOP);
end;
procedure TfrmCourse.FormCreate(Sender: TObject);
begin
if not ActiveSource.DataSet.Active then
ActiveSource.DataSet.Open ;
ActiveSource.OnStateChange := ActiveSourceStateChange;
ActiveSourceDataChange(Self, Nil);
Application.OnException := AppException;
end;
procedure TfrmCourse.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if ActiveSource.Dataset.State in dsEditModes then
begin
Application.MessageBox('正在录入数据,不能退出!',
'出错信息',MB_ICONSTOP);
Abort;
end;
end;
procedure TfrmCourse.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ActiveSource.OnStateChange := nil;
if ActiveSource.DataSet.Active then
ActiveSource.DataSet.Close;
Action := caFree;
end;
procedure TfrmCourse.BitBtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TfrmCourse.ActiveSourceDataChange(Sender: TObject; Field: TField);
begin
VRecCount := ActiveSource.DataSet.RecordCount ;
if VRecCount = 0 then
VRecNo := 0
else
VRecNo := ActiveSource.DataSet.RecNo ; // 计算记录数
LblRec.Caption := IntToStr(VRecNo) + ' / ' + IntToStr(VRecCount);
end;
procedure TfrmCourse.ActiveSourceStateChange(Sender: TObject);
begin
with ActiveSource do
begin
if Dataset <> nil then ModeIndicator.Caption :=
Format('[%S]', [DatasetStates[State]]);
// Format('[%S: %S]', [Dataset.Name, DatasetStates[State]]);
if State in [dsEdit, dsInsert] then
begin
HelpContext := HelpTopicEdit;
ModeIndicator.Font.Color := clRed;
end
else
begin
HelpContext := HelpTopicBrowse;
ModeIndicator.Font.Color := clBlue;
end;
end;
// BitBtnClose.Enabled := ActiveSource.Dataset.State = dsBrowse;
DBNavBtns.Enabled := (ActiveSource.Dataset.State = dsBrowse) ;
DBEditBtns.Enabled := ActiveSource.Dataset.State = dsBrowse;
DBInsertBtns.Enabled := ActiveSource.Dataset.State = dsBrowse;
DBDeleteBtns.Enabled := ActiveSource.Dataset.State = dsBrowse;
DBSaveBtns.Enabled := ActiveSource.Dataset.State in dsEditModes;
DBCancelBtns.Enabled := ActiveSource.Dataset.State in dsEditModes;
// DBGrdSampleDir.Enabled := ActiveSource.Dataset.State = dsBrowse;
// 只能在插入状态下才可修改字段的值
DBEdtCNo.Enabled := ActiveSource.Dataset.State = dsInsert ;
end;
procedure TfrmCourse.DBInsertBtnsClick(Sender: TObject;
Button: TNavigateBtn);
begin
ActiveControl := DBEdtCNo;
end;
procedure TfrmCourse.DBDeleteBtnsClick(Sender: TObject);
var
VStr : string;
begin
if (VRecCount <= 0) then
begin
DBDeleteBtns.Enabled := False;
Abort;
end;
ModeIndicator.Caption := '删除';
ModeIndicator.Font.Color := clRed;
VStr := VStr + '课 程 号: ' + DBEdtCNo.Text + #13;
VStr := VStr + '课程名称: ' + DBEdtCName.Text + #13 ;
VStr := VStr + '学 时 数: ' + DBEdtCTime.Text + #13 ;
if Application.MessageBox(PChar('确认要删除当前编辑的数据?'+#13+#13+VStr),
'提示信息',MB_IconInformation+MB_YESNO) = IDNo then
begin
ModeIndicator.Caption := '浏览';
ModeIndicator.Font.Color := clBlue;
Abort;
end
else // 确认后,删除处理
begin
ActiveSource.DataSet.Delete ;
ModeIndicator.Caption := '浏览';
ModeIndicator.Font.Color := clBlue;
end;
end;
procedure TfrmCourse.DBSaveBtnsClick(Sender: TObject);
var
i : integer;
begin
BeforeSaveCheck; // 检查必须输入的字段不可为空
if (ActiveSource.Dataset.State = dsInsert) then // 插入状态
begin
with DMSchool.ADOQuery do // 判断课程号是否重复
begin
Close;
SQL.Clear;
SQL.ADD('SELECT COUNT(*) RECNUM FROM COURSE');
SQL.ADD(PChar(' WHERE CNO = ''' + DBEdtCNo.Text + ''''));
Open;
end;
i := DMSchool.ADOQuery.FieldByName('RECNUM').AsInteger;
if i > 0 then
begin
Application.MessageBox('该课程号已存在,请重新输入!',
'出错信息',MB_ICONSTOP);
DBEdtCNo.SetFocus ;
Abort;
end;
end;
ActiveSource.DataSet.Post ; // 保存到课程表
ActiveSource.DataSet.Refresh ;
end;
procedure TfrmCourse.BeforeSaveCheck; // 保存数据前的检查
begin
if Length(Trim(DBEdtCNo.Text)) <> 3 then // 检查课程号
begin
Application.MessageBox('必须输入 3 位课程号!',
'出错信息',MB_ICONSTOP);
DBEdtCNo.SetFocus ;
Abort;
end;
if Length(Trim(DBEdtCName.Text)) <= 0 then // 检查课程名称
begin
Application.MessageBox('必须录入课程名称!',
'出错信息',MB_ICONSTOP);
DBEdtCName.SetFocus ;
Abort;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -