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

📄 formscoremanage.pas

📁 Delphi数据库编程
💻 PAS
字号:
unit FormScoreManage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, Grids, DBGrids, DBCtrls, ExtCtrls, Mask;

type
  TfrmScoreManage = class(TForm)
    GroupBox1: TGroupBox;
    dbgScore: TDBGrid;
    btnQuit: TButton;
    tblCourse: TTable;
    dbgCourse: TDBGrid;
    qryCourseInfo: TQuery;
    dsCourseInfo: TDataSource;
    dbtClassID: TDBText;
    dbtClassName: TDBText;
    dbtBeginDate: TDBText;
    dbtDepartName: TDBText;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    qryScore: TQuery;
    dsScoreList: TDataSource;
    dsCourse: TDataSource;
    DBText2: TDBText;
    Label8: TLabel;
    dbgClass: TDBGrid;
    dbeStudentID: TDBEdit;
    Label5: TLabel;
    dbnScore: TDBNavigator;
    Label7: TLabel;
    dbeScore: TDBEdit;
    qryClass: TQuery;
    dsClass: TDataSource;
    Label2: TLabel;
    tblScore: TTable;
    dsScore: TDataSource;
    qryValid: TQuery;
    procedure tblCourseAfterScroll(DataSet: TDataSet);
    procedure FormShow(Sender: TObject);
    procedure btnQuitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure qryClassAfterScroll(DataSet: TDataSet);
    procedure qryScoreAfterScroll(DataSet: TDataSet);
    procedure tblScoreBeforePost(DataSet: TDataSet);
    procedure tblScoreAfterPost(DataSet: TDataSet);
    procedure qryClassAfterOpen(DataSet: TDataSet);
    procedure qryScoreAfterOpen(DataSet: TDataSet);
    procedure dbnScoreClick(Sender: TObject; Button: TNavigateBtn);
    procedure tblScoreAfterScroll(DataSet: TDataSet);
    procedure tblScoreBeforeDelete(DataSet: TDataSet);
    procedure tblScoreAfterOpen(DataSet: TDataSet);
    procedure tblScoreAfterDelete(DataSet: TDataSet);
    procedure tblCourseAfterOpen(DataSet: TDataSet);
  private
    procedure ToggleMode;
  public
    { Public declarations }
  end;

var
  frmScoreManage: TfrmScoreManage;

implementation

{$R *.dfm}

procedure TfrmScoreManage.FormShow(Sender: TObject);
begin
  tblCourse.Active := true;
end;

procedure TfrmScoreManage.btnQuitClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmScoreManage.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  tblCourse.Active := false;
end;

{tblCourse}

procedure TfrmScoreManage.tblCourseAfterOpen(DataSet: TDataSet);
begin
  qryCourseInfo.Active := false;
  qryClass.Active := false;
end;

procedure TfrmScoreManage.tblCourseAfterScroll(DataSet: TDataSet);
begin
  qryCourseInfo.Active := false;
  qryCourseInfo.ParamByName('CourseID').AsString := tblCourse.FieldByName('CourseID').AsString;
  qryCourseInfo.Active := true;

  qryClass.Active := false;
  qryClass.ParamByName('CourseID').AsString := tblCourse.FieldByName('CourseID').AsString;
  qryClass.Active := true;
end;

{qryClass}

procedure TfrmScoreManage.qryClassAfterOpen(DataSet: TDataSet);
begin
  tblScore.Active := false;
  qryScore.Active := false;
end;

procedure TfrmScoreManage.qryClassAfterScroll(DataSet: TDataSet);
begin
  qryScore.Active := false;
  qryScore.ParamByName('CourseID').AsString := tblCourse.FieldByName('CourseID').AsString;
  qryScore.ParamByName('classID').AsString := qryClass.FieldByName('ClassID').AsString;
  qryScore.Active := true;
end;

{qryScore}

procedure TfrmScoreManage.qryScoreAfterOpen(DataSet: TDataSet);
begin
  tblScore.Active := false;
  if qryScore.Eof then
  begin
    tblScore.Filter := 'ID=-1';
    tblScore.Filtered := true;
    tblScore.Active := true;
  end;
end;

procedure TfrmScoreManage.qryScoreAfterScroll(DataSet: TDataSet);
begin
  tblScore.Active := false;
  tblScore.Filter := 'ID=' + qryScore.FieldByName('ID').AsString + '';
  tblScore.Filtered := true;
  tblScore.Active := true;
end;

{tblScore}

procedure TfrmScoreManage.ToggleMode;
  procedure EnableInput(Enabled: Boolean);
  begin
    dbgScore.Enabled := not Enabled;
    dbeStudentID.Enabled := Enabled;
    dbeScore.Enabled := Enabled;
  end;
begin
  case tblScore.State of
    dsInsert, dsEdit:
      begin
        EnableInput(true);
        dbnScore.VisibleButtons := [nbPost, nbCancel];
        dbeStudentID.SetFocus;
      end;
  else
    EnableInput(false);
    dbnScore.VisibleButtons := [nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh];
  end;

  if tblScore.State = dsInsert then
  begin
    dbeStudentID.Text := qryClass.FieldByName('ClassID').AsString;
    dbeStudentID.SelStart := Length(dbeStudentID.Text);
    dbeStudentID.SetFocus;
  end;
end;

procedure TfrmScoreManage.tblScoreAfterOpen(DataSet: TDataSet);
begin
  ToggleMode;
end;

procedure TfrmScoreManage.tblScoreAfterScroll(DataSet: TDataSet);
begin
  ToggleMode;
end;

procedure TfrmScoreManage.dbnScoreClick(Sender: TObject; Button: TNavigateBtn);
begin
  ToggleMode;
end;

procedure TfrmScoreManage.tblScoreBeforeDelete(DataSet: TDataSet);
var
  strMsg: string;
begin
  strMsg := '是否确定要删除学生成绩?'#13;
  strMsg := strMsg + Format('  课程名称:%s'#13, [tblCourse['CourseName']]);
  strMsg := strMsg + Format('  学生姓名:%s'#13, [qryScore['Name']]);
  strMsg := strMsg + Format('  考试成绩:%s', [tblScore['Score']]);
  if MessageDlg(strMsg, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
    Abort;
end;

procedure TfrmScoreManage.tblScoreAfterDelete(DataSet: TDataSet);
begin
  qryScore.Active := false;
  qryScore.Active := true;
end;

procedure TfrmScoreManage.tblScoreBeforePost(DataSet: TDataSet);
  procedure CheckField(FieldName, FieldDesc: string; dbText: TCustomEdit);
  begin
    dbText.Text := Trim(dbText.Text);
    dbText.Text := StringReplace(dbText.Text, '''', '', [rfReplaceAll]);
    dbText.Text := StringReplace(dbText.Text, ' ', '', [rfReplaceAll]);
    if dbText.Text = '' then
    begin
      ShowMessageFmt('“%s”不能为空,请输入足够的信息!', [FieldDesc]);
      dbText.SetFocus;
      Abort;
    end
    else
      tblScore.FieldByName(FieldName).AsString := dbText.Text;
  end;
begin
  CheckField('StudentID', '学号', dbeStudentID);
  CheckField('Score', '考试成绩', dbeScore);

  qryValid.Active := false;
  qryValid.SQL.Clear;
  qryValid.SQL.Add('SELECT * FROM Student ');
  qryValid.SQL.Add(' WHERE StudentID=''' + dbeStudentID.Text + '''');
  qryValid.SQL.Add(' AND ClassID=''' + qryClass.FieldByName('ClassID').AsString + ''';');
  qryValid.Active := true;
  if qryValid.Eof then
  begin
    ShowMessage('该学生不属于这个班级!');
    dbeStudentID.SetFocus;
    Abort;
  end;
  qryValid.Active := false;

  if dbeStudentID.Modified then
  begin
    qryValid.SQL.Clear;
    qryValid.SQL.Add('SELECT * FROM Score ');
    qryValid.SQL.Add(' WHERE StudentID=''' + dbeStudentID.Text + '''');
    qryValid.SQL.Add(' AND CourseID=''' + tblCourse.FieldByName('CourseID').AsString + ''';');
    qryValid.Active := true;
    if not qryValid.Eof then
    begin
      ShowMessage('该学生的成绩已经存在!');
      dbeStudentID.SetFocus;
      Abort;
    end;
    qryValid.Active := false;
  end;

  tblScore.FieldByName('CourseID').AsString := tblCourse['CourseID'];
end;

procedure TfrmScoreManage.tblScoreAfterPost(DataSet: TDataSet);
begin
  qryScore.Active := false;
  qryScore.Active := true;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -