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 + -
显示快捷键?