ugrade.~pas

来自「一.录入学生信息(预计有81个学生」· ~PAS 代码 · 共 265 行

~PAS
265
字号
unit uGrade;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, DB, ADODB, ImgList, Grids, DBGridEh,
  Buttons, ExtCtrls;

type
  TfrmGrade = class(TForm)
    GroupBox1: TGroupBox;
    Tree: TTreeView;
    ImageList1: TImageList;
    dsQuery: TADODataSet;
    GroupBox2: TGroupBox;
    DBGridEh2: TDBGridEh;
    GroupBox3: TGroupBox;
    DBGridEh1: TDBGridEh;
    Panel2: TPanel;
    cmdAppend: TBitBtn;
    cmdEdit: TBitBtn;
    cmdClose: TBitBtn;
    dsStudent: TADODataSet;
    DataSource2: TDataSource;
    dsGrade: TADODataSet;
    DataSource1: TDataSource;
    ADOCommand1: TADOCommand;
    dsTemp: TADODataSet;
    Function ReadyData():Boolean;
    Function ReadyList():Boolean;
    Function ReadySubj():Boolean;

    procedure cmdCloseClick(Sender: TObject);
    procedure TreeClick(Sender: TObject);
    procedure cmdAppendClick(Sender: TObject);
    procedure dsStudentAfterScroll(DataSet: TDataSet);
    procedure cmdEditClick(Sender: TObject);
    procedure DBGridEh1DblClick(Sender: TObject);
    procedure DBGridEh1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Function ShowGrade():Boolean;

implementation

uses uPub,uDM,uGuadeEdit;

{$R *.dfm}

Function ShowGrade():Boolean;
var
  frmGrade: TfrmGrade;
begin
  Result:=False;
  frmGrade:=TfrmGrade.Create(nil);
  if Not frmGrade.ReadyData then
  begin
    frmGrade.Free;
    Exit;
  end;
  frmGrade.ShowModal;
  frmGrade.Free;
  Result:=True;
end;

Function TfrmGrade.ReadyData():Boolean;
var TmpSQL:String;
    OldTerm:String;
    TmpData:PNodeData;
    TmpItem,LastPar:TTreeNode;
begin
  Result:=False;
  TmpSQL:='select TTermToClass.*,TTerm.TermName,TClass.ClassName from TTermToClass,TTerm,TClass'+
    ' where TTermToClass.TermCode=TTerm.TermCode And TTermToClass.ClassCode=TClass.ClassCode'+
    ' Order by TTermToClass.TermCode,TTermToClass.ClassCode';
  dsQuery.Close;
  dsQuery.CommandText:=TmpSQL;
  Try
    dsQuery.Open;
  Except
    ShowMessage('读取本地数据文件发生错误!');
    Exit;
  End;
  dsQuery.First;
  LastPar:=nil;
  While Not dsQuery.Eof Do
  begin
    if OldTerm<>dsQuery.FieldByName('TermCode').AsString then
    begin
      new(TmpData);
      TmpItem:=Tree.Items.Add(nil,dsQuery.FieldByName('TermName').AsString);
      TmpItem.ImageIndex:=0;
      TmpItem.SelectedIndex:=0;
      TmpData.Code:=dsQuery.FieldByName('TermCode').AsString;
      TmpData.Name:=dsQuery.FieldByName('TermName').AsString;
      TmpItem.Data:=TmpData;
      OldTerm:=dsQuery.FieldByName('TermCode').AsString;
      LastPar:=TmpItem;
    end;
    new(TmpData);
    TmpItem:=Tree.Items.AddChild(LastPar,dsQuery.FieldByName('ClassName').AsString);
    TmpItem.ImageIndex:=1;
    TmpItem.SelectedIndex:=1;
    TmpData.Code:=dsQuery.FieldByName('ClassCode').AsString;
    TmpData.Name:=dsQuery.FieldByName('ClassName').AsString;
    TmpItem.Data:=TmpData;
    dsQuery.Next;
  end;
  Result:=True;
end;

Function TfrmGrade.ReadyList():Boolean;
var TmpSQL:String;
begin
  Result:=False;
  dsStudent.Close;  
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level<>1 then Exit;
  TmpSQL:='Select * from TStudent Where ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+''''+
    ' Order by SName';
  GroupBox2.Caption:='班级 ['+dsQuery.fieldByName('ClassName').AsString+'] 的学生信息列表!';
  dsStudent.Close;
  dsStudent.CommandText:=TmpSQL;
  Try
    dsStudent.Open;
  Except
    ShowMessage('读取本地数据文件发生错误!');
    Exit;
  End;
  if dsStudent.IsEmpty then
  begin
    dsGrade.Close;
  end;
  Result:=True;
end;

Function TfrmGrade.ReadySubj():Boolean;
var TmpSQL:String;
begin
  Result:=True;
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level=0 then Exit;
  if dsStudent.IsEmpty then Exit;
  TmpSQL:='SELECT TGrade.*,TSubject.SubjName from TGrade,TSubject'+
    ' where TGrade.SubjectCode=TSubject.SubjCode'+
    ' And TGrade.TermCode='+PNodeData(Tree.Selected.Parent.Data)^.Code+
    ' And TGrade.ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+''''+
    ' And StudentID='+dsStudent.fieldByName('ID').AsString+
    ' Order by TGrade.SubjectCode';
  dsGrade.Close;
  dsGrade.CommandText:=TmpSQL;
  Try
    dsGrade.Open;
  Except
    ShowMessage('读取本地数据文件发生错误!');
    Exit;
  End;
  if dsGrade.IsEmpty then
  begin
    //cmdAppendClick(nil);
  end;
  Result:=True;
end;

procedure TfrmGrade.cmdCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmGrade.TreeClick(Sender: TObject);
begin
  ReadyList;
end;

procedure TfrmGrade.cmdAppendClick(Sender: TObject);
var TmpSQL:String;
begin
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level=0 then Exit;
  if dsStudent.IsEmpty then Exit;
  if Not dsGrade.IsEmpty then
  begin
    if MessageDlg('已经有记录存在,初始化将把已有记录覆盖,是否继续?',mtWarning,[mbYes,mbno],0)=mrNo then Exit;
  end;
  TmpSQL:='Delete from TGrade Where TermCode='+PNodeData(Tree.Selected.Parent.Data)^.Code+
    ' And ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+''''+
    ' And StudentID='+dsStudent.fieldByName('ID').AsString;
  ADOCommand1.CommandText:=TmpSQL;
  Try
    ADOCommand1.Execute;
  Except
    ShowMessage('初始化过程中发生错误!请重新初始化!');
    Exit;
  End;
  TmpSQL:='Select* from TClassToSubject Where TermCode='+PNodeData(Tree.Selected.Parent.Data)^.Code+
    ' And ClassCode='+''''+PNodeData(Tree.Selected.Data)^.Code+'''';
  dsTemp.Close;
  dsTemp.CommandText:=TmpSQL;
  Try
    dsTemp.Open;
  Except
    ShowMessage('初始化过程中发生错误!请重新初始化!');
    Exit;
  End;
  if dsTemp.IsEmpty then
  begin
    ShowMessage('对应学期/班级的科目信息没有设置!');
    Exit;
  end;
  dsTemp.First;
  While Not dsTemp.Eof Do
  begin
    TmpSQL:='Insert into TGrade (TermCode,ClassCode,StudentID,SubjectCode,Score) Values('+
      PNodeData(Tree.Selected.Parent.Data)^.Code+','+''''+PNodeData(Tree.Selected.Data)^.Code+''''+','+
      dsStudent.fieldByName('ID').AsString+','+
      ''''+dsTemp.fieldByName('SubjCode').AsString+''''+',0)';
    ADOCommand1.CommandText:=TmpSQL;
    Try
      ADOCommand1.Execute;
    Except
      ShowMessage('初始化过程中发生错误!请重新初始化!');
      Exit;
    End;      
    dsTemp.Next;
  end;
//  ShowMessage('指定学期,指定班级,指定学生的成绩初始化完成,您可以修改为具体内容!');
  ReadySubj;
end;

procedure TfrmGrade.dsStudentAfterScroll(DataSet: TDataSet);
begin
  ReadySubj;
end;

procedure TfrmGrade.cmdEditClick(Sender: TObject);
begin
  if Tree.Selected=nil then Exit;
  if Tree.Selected.Level=0 then Exit;
  if dsGrade.IsEmpty then Exit;
  if Not ShowGuadeEdit(dsGrade.FieldByName('ID').AsInteger) then Exit;
  ReadySubj; 
end;

procedure TfrmGrade.DBGridEh1DblClick(Sender: TObject);
begin
  cmdEditClick(nil);
end;

procedure TfrmGrade.DBGridEh1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=vk_Return then
  begin
    cmdEditClick(nil);
  end;
end;

end.

⌨️ 快捷键说明

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