📄 u_examresultinput.pas
字号:
unit U_ExamResultInput;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
HGrids, HDBGrids, TB97Tlbr, TB97Ctls, TB97, DBTables, Db, Menus,
ComCtrls, ExtCtrls, ImgList, HTitleDBGrid;
type
TFm_ExamResultInput = class(TForm)
MDS: TDataSource;
Dock: TDock97;
Tb97_Func: TToolbar97;
TbBtn_ExamNo: TToolbarButton97;
TbBtn_Help: TToolbarButton97;
TbBtn_Exit: TToolbarButton97;
TbSep02: TToolbarSep97;
MQuery: TQuery;
MUpSQL: TUpdateSQL;
PPM: TPopupMenu;
PM_Add: TMenuItem;
PM_BBan: TMenuItem;
PM_Help: TMenuItem;
PM_Exit: TMenuItem;
PM_Z02: TMenuItem;
MTrView: TTreeView;
Spl_Main: TSplitter;
Pnl_DAn: TPanel;
TbBtn_Direct: TToolbarButton97;
ToolbarSep971: TToolbarSep97;
ImageList: TImageList;
PM_Z01: TMenuItem;
UpQuery: TQuery;
TbBtn_Print: TToolbarButton97;
TbSp01: TToolbarSep97;
PM_Z03: TMenuItem;
PM_Print: TMenuItem;
MGrid: THDBGrid;
procedure TbBtn_ExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
procedure MTrViewGetImageIndex(Sender: TObject; Node: TTreeNode);
procedure MTrViewGetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure MTrViewChange(Sender: TObject; Node: TTreeNode);
procedure TbBtn_HelpClick(Sender: TObject);
procedure TbBtn_DirectClick(Sender: TObject);
procedure TbBtn_ExamNoClick(Sender: TObject);
procedure MQueryAfterPost(DataSet: TDataSet);
procedure TbBtn_PrintClick(Sender: TObject);
private
public
OldGrade, CurGrade: integer;
CurClass, SubjectCode: string;
ExamType: integer;
ExamChanged: Boolean;
procedure RefreshFieldColumn(GradeNo: integer);
end;
var
Fm_ExamResultInput: TFm_ExamResultInput;
procedure Show_ExamResultInput;
implementation
uses IniFiles, U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_SetCurExam,
U_Print;
{$R *.DFM}
procedure Show_ExamResultInput;
var
i: integer;
begin
for i := Fm_Main.MDIChildCount - 1 downto 0 do
begin
if (Fm_Main.MDIChildren[i].Name <> 'Fm_Wizard') and
(Fm_Main.MDIChildren[i].Name <> 'Fm_ExamResultInput') then
Fm_Main.MDIChildren[i].Close;
end;
if not Assigned(Fm_ExamResultInput) then
begin
Fm_ExamResultInput := TFm_ExamResultInput.Create(Application);
with Fm_ExamResultInput do
begin
GetCurExamCode;
RefreshGridStyle(MGrid);
MakeGradeTree(MTrView, 0, False);
OldGrade := -1;
ExamChanged := True;
MTrView.Items[0].Selected := True;
end;
end;
with Fm_ExamResultInput do
begin
if WindowState <> wsMaximized then
WindowState := wsMaximized;
Show;
SetFocus;
end;
end;
procedure TFm_ExamResultInput.RefreshFieldColumn(GradeNo: integer);
var
aQuery: TQuery;
aColumn: THColumn;
ExamType, i: integer;
begin
aQuery := TQuery.Create(Application);
with aQuery do
try
DataBaseName := DataDBase;
SQL.Text := 'SELECT si_kslxing, s_kcdhao FROM kssz WHERE si_nji=' + IntToStr(GradeNo);
Open;
if IsEmpty then
Exit;
ExamType := FieldByName('si_kslxing').AsInteger;
SubjectCode := FieldByName('s_kcdhao').AsString;
Close;
SQL.Text := 'SELECT d1.s_kcdhao, s_kcmcheng FROM ';
if ExamType = 2 then
SQL.Text := SQL.Text + 'kc WHERE s_kcdhao=''' + SubjectCode + ''''
else
SQL.Text := SQL.Text + 'xqkskc d1, kc d2 WHERE d1.s_xqhao=''' + S_CurTermCode +
''' AND d1.si_nji=' + IntToStr(GradeNo) + ' AND d1.s_kcdhao=d2.s_kcdhao';
Open;
if IsEmpty then
Exit;
while not Eof do
begin
aColumn := MGrid.FindFirstColumn('n_' + aQuery.FieldByName('s_kcdhao').AsString);
if Assigned(aColumn) then
aColumn.Title.Caption := FieldByName('s_kcmcheng').AsString;
Next;
end;
Close;
if MGrid.Columns.Count > 2 then
begin
with MGrid.Columns[0] do
begin
Title.Caption := '学号';
CanEdit := False;
end;
with MGrid.Columns[1] do
begin
Title.Caption := '姓名';
Width := 60;
CanEdit := False;
end;
for i := 2 to MGrid.Columns.Count - 1 do
MGrid.Columns[i].Width := 50;
end;
finally
Close;
Free;
end;
end;
procedure TFm_ExamResultInput.TbBtn_ExitClick(Sender: TObject);
begin
Close;
end;
procedure TFm_ExamResultInput.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if MQuery.State in [dsEdit] then
MQuery.Post;
MQuery.Close;
Action := caFree;
Fm_ExamResultInput := nil;
end;
procedure TFm_ExamResultInput.Spl_MainCanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
if NewSize < 8 then
Accept := False;
end;
procedure TFm_ExamResultInput.MTrViewGetImageIndex(Sender: TObject;
Node: TTreeNode);
begin //
if Node.HasChildren then
begin
if Node.Expanded then
Node.ImageIndex := 2
else
Node.ImageIndex := 1;
end
else
begin
if Node.Level = 0 then
Node.ImageIndex := 1
else
Node.ImageIndex := 0;
end;
end;
procedure TFm_ExamResultInput.MTrViewGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
if Node.HasChildren then
begin
if Node.Expanded then
Node.SelectedIndex := 5
else
Node.SelectedIndex := 4;
end
else
begin
if Node.Level = 0 then
Node.SelectedIndex := 4
else
Node.SelectedIndex := 3;
end;
end;
procedure TFm_ExamResultInput.MTrViewChange(Sender: TObject;
Node: TTreeNode);
var
tmS, tmCaption: string;
aQuery, bQuery, cQuery: TQuery;
I: integer;
begin
if Integer(Node.Data) < 9999 then
begin // 年级
CurGrade := W_CurYear - Integer(Node.Data) + 1;
CurClass := '';
end
else
begin // 班级
tmS := Copy(IntFormatStr(Integer(Node.Data), 9), 4, 4);
CurGrade := W_CurYear - StrToInt(tmS) + 1;
CurClass := IntFormatStr(Integer(Node.Data), 9);
end;
with MQuery do
try
if MQuery.State = dsEdit then
MQuery.Post;
DisableControls;
AfterPost := nil;
aQuery := TQuery.Create(Application);
with aQuery do
try
DataBaseName := DataDBase;
// 表标题
SQL.Text := 'SELECT s_kssming, si_kslxing, s_kcdhao FROM kssz WHERE i_kshao=' +
IntToStr(I_CurExamCode[CurGrade]);
Open;
if not IsEmpty then
tmCaption := FieldByName('s_kssming').AsString;
if Pos('年级', Node.Text) > 0 then
MGrid.CaptionString := tmCaption + '成绩登记表'
else
MGrid.CaptionString := ' ' + tmCaption + Node.Text +
' 成绩登记表';
if I_CurExamCode[CurGrade] = 0 then
begin
Caption := '学生考试成绩登记表—(当前年级没有选定考试)';
MessageBeep(0);
MQuery.Close;
//U_GlobalProc.Show_ErrorMess('当前年级没有选定考试。');
Exit;
end
else
Caption := '学生考试成绩登记表';
//SQL.Text := 'SELECT si_kslxing, s_kcdhao FROM kssz WHERE si_nji=' + IntToStr(CurGrade);
//Open;
if IsEmpty then
Exit;
ExamType := FieldByName('si_kslxing').AsInteger;
SubjectCode := FieldByName('s_kcdhao').AsString;
Close;
finally
Close;
Free;
end;
if (OldGrade <> CurGrade) or ExamChanged then
begin
ExamChanged := False;
Close;
tmS := 'SELECT s_xhao, s_xming'; //, d1.i_kshao';
// 课程
bQuery := TQuery.Create(Application);
with bQuery do
try
DataBaseName := DataDBase;
SQL.Text := 'SELECT s_kcdhao FROM ';
if ExamType = 2 then
SQL.Text := SQL.Text + 'kc WHERE s_kcdhao=''' + SubjectCode + ''''
else
SQL.Text := SQL.Text + 'xqkskc WHERE s_xqhao=''' + S_CurTermCode +
''' AND si_nji=' + IntToStr(CurGrade);
Open;
if IsEmpty then
Exit;
while not Eof do
begin
tmS := tmS + ', CAST(''0'' AS NUMERIC) AS n_' + FieldByName('s_kcdhao').AsString;
Next;
end;
tmS := tmS + ' FROM xsjbxx WHERE 0=1';
Close;
MQuery.SQL.Text := tmS;
MQuery.Open;
finally
Close;
Free;
end;
end // 年级没变
else if MQuery.Active then
begin
MQuery.First;
while not MQuery.Eof do
MQuery.Delete;
end else
Exit;
// 单个成绩
cQuery := TQuery.Create(Application);
with cQuery do
try
DataBaseName := DataDBase;
if ExamType = 2 then
begin
SQL.Text := 'SELECT d1.s_xhao, d2.s_xming FROM ckry d1, xsjbxx d2 WHERE d1.si_nji=' +
IntToStr(CurGrade);
if CurClass <> '' then
SQL.Text := SQL.Text + ' AND d2.s_bjhao=''' + CurClass + '''';
SQL.Text := SQL.Text + ' AND d1.s_xhao=d2.s_xhao';
end
else
begin
if CurClass = '' then
SQL.Text := 'SELECT s_xhao, s_xming FROM xsjbxx WHERE s_bjhao LIKE ''' +
S_SchoolCode + IntFormatStr(W_CurYear - CurGrade + 1, 4) + '%'''
else
SQL.Text := 'SELECT s_xhao, s_xming FROM xsjbxx WHERE s_bjhao=''' +
CurClass + '''';
end;
Open;
if IsEmpty then
begin
Close;
Exit;
end;
while not Eof do
begin
MQuery.AppendRecord([FieldByName('s_xhao').AsString, FieldByName('s_xming').Asstring]); //,
//I_CurExamCode[CurGrade]]);
Next;
end;
finally
Close;
// 成绩
SQL.Text := 'SELECT s_xhao, s_kcdhao, n_cji FROM kscj WHERE ' +
'i_kshao=' + IntToStr(I_CurExamCode[CurGrade]) + ' AND s_kcdhao=:ps_kcdhao';
end;
try
for i := 2 to Fields.Count - 1 do
begin
tmS := Copy(Fields[i].FieldName, 3, 4);
First;
with cQuery do
begin
Close;
ParamByName('ps_kcdhao').AsString := tmS;
Prepare;
Open;
end;
while not Eof do
begin
if cQuery.Locate('s_xhao', FieldByName('s_xhao').AsString, []) then
begin
Edit;
Fields[i].AsFloat := cQuery.FieldByName('n_cji').AsFloat;
Post;
end;
Next;
end;
cQuery.Close;
end;
finally
cQuery.Close;
cQuery.Free;
end;
AfterPost := MQueryAfterPost;
finally
EnableControls;
OldGrade := CurGrade;
RefreshFieldColumn(CurGrade);
end;
end;
procedure TFm_ExamResultInput.TbBtn_HelpClick(Sender: TObject);
begin //
end;
procedure TFm_ExamResultInput.TbBtn_DirectClick(Sender: TObject);
begin
if MGrid.ReturnDirection = rdUp then
MGrid.ReturnDirection := rdNone
else
MGrid.ReturnDirection := THReturnDirection(Integer(MGrid.ReturnDirection) + 1);
TbBtn_Direct.ImageIndex := 38 + Integer(MGrid.ReturnDirection);
end;
procedure TFm_ExamResultInput.TbBtn_ExamNoClick(Sender: TObject);
begin //
if U_SetCurExam.Show_SetCurExam then
begin
GetCurExamCode;
ExamChanged := True;
MTrViewChange(MTrView, MTrView.Selected);
end;
end;
procedure TFm_ExamResultInput.MQueryAfterPost(DataSet: TDataSet);
var
i: integer;
tmS: string;
begin //
with MQuery do
for i := 2 to FieldCount - 1 do
begin
tmS := Copy(Fields[i].FieldName, 3, 4);
UpQuery.ParamByName('pn_cji').AsFloat := Fields[i].AsFloat;
UpQuery.ParamByName('ps_xhao').AsString := Fields[0].AsString;
UpQuery.ParamByName('pi_kshao').AsInteger := I_CurExamCode[CurGrade];
UpQuery.ParamByName('ps_kcdhao').AsString := tmS;
UpQuery.ExecSQL;
end;
end;
{procedure TFm_ExamResultInput.QueryGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
DataSetGetText(MGrid, Sender, Text, DisplayText);
end;
procedure TFm_ExamResultInput.QuerySetText(Sender: TField;
const Text: string);
begin
DataSetSetText(MGrid, Sender, Text);
end;}
procedure TFm_ExamResultInput.TbBtn_PrintClick(Sender: TObject);
begin
Show_Print(MGrid);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -