⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucourse.pas

📁 可实现学生成绩管理系统的各种功能,无需登陆,直接查询学生的各种信息
💻 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 + -