📄 u_exammakeresult.pas
字号:
unit U_ExamMakeResult;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, Spin, ComCtrls, DBTables, Db;
type
TFm_ExamMakeResult = class(TForm)
Btn_Ok: TButton;
Bevel1: TBevel;
Label1: TLabel;
PrgBar: TProgressBar;
Timer1: TTimer;
cQuery: TQuery;
cUpSQL: TUpdateSQL;
cQueryS_XHAO: TStringField;
cQueryI_KSHAO: TIntegerField;
cQueryS_KCDHAO: TStringField;
cQueryN_CJI: TFloatField;
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
public
FExamNo, FGradeNo, FExamType: integer;
FSubjectCode: string;
end;
function Show_ExamMakeResult(pExamNo, pGradeNo, pExamType: integer; pSubjectCode: string): Boolean;
implementation
uses IniFiles, U_GlobalVar, U_GlobalProc;
{$R *.DFM}
function Show_ExamMakeResult(pExamNo, pGradeNo, pExamType: integer; pSubjectCode: string): Boolean;
var
Fm_ExamMakeResult: TFm_ExamMakeResult;
begin
Result := False;
Fm_ExamMakeResult := TFm_ExamMakeResult.Create(Application);
with Fm_ExamMakeResult do
try
FExamNo := pExamNo;
FGradeNo := pGradeNo;
FExamType := pExamType;
FSubjectCode := pSubjectCode;
if ShowModal = idOk then
Result := True;
finally
Free;
end;
end;
procedure TFm_ExamMakeResult.FormShow(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TFm_ExamMakeResult.Timer1Timer(Sender: TObject);
var
AQuery, BQuery: TQuery; // 学号; 课程
I, StdNum, SubNum, Per: Cardinal;
begin
//1. 取考试号
//2. 取学生号: 如果是全考, 则从基本信息表内取该年级的各班所有学生; 若是抽考,则应从
// 抽考人员表内取学生
//3. 取课程号: 如果是全科, 则从年级课程表内取; 如果是单科, 则应该从考试设置表内取
// 单科课程号
//4. 取上述各数据的交集送入成绩表内.
//5. "正在生成 XX 年级的 XX 课程成绩表..."
Timer1.Enabled := False;
aQuery := TQuery.Create(Application);
with aQuery do
begin
DataBaseName := DataDBase;
SQL.Add('SELECT s_xhao FROM ');
if FExamType = 1 then
begin
SQL.Add('xsjbxx');
SQL.Add('WHERE s_bjhao LIKE ''' + S_SchoolCode +
IntToStr(W_CurYear - FGradeNo + 1) + '%''');
end else
begin
SQL.Add('ckry ');
SQL.Add('WHERE si_nji=' + IntToStr(FGradeNo));
end;
Open;
Last;
StdNum := aQuery.RecordCount;
end;
Application.ProcessMessages;
PrgBar.Position := 1;
bQuery := TQuery.Create(Application);
with bQuery do
begin
DataBaseName := DataDBase;
if FExamType = 2 then //单科
SQL.Text := 'SELECT s_kcdhao FROM kc WHERE s_kcdhao=''' +
FSubjectCode + ''''
else
SQL.Text := 'SELECT s_kcdhao FROM xqkskc WHERE si_nji=' +
IntToStr(FGradeNo);
Open;
Last;
SubNum := bQuery.RecordCount;
end;
Application.ProcessMessages;
PrgBar.Position := 3;
cQuery.Open;
Application.ProcessMessages;
PrgBar.Position := 5;
I := StdNum * SubNum;
Per := I div 100;
I := 1;
AQuery.First;
Label1.Caption := '正在生成 ' + GradeNames[FGradeNo - 1] +
'年级 的成绩表...';
while not AQuery.Eof do
begin
BQuery.First;
while not BQuery.Eof do
begin
if I >= Per then
begin
PrgBar.Position := PrgBar.Position + 1;
Application.ProcessMessages;
end;
CQuery.AppendRecord([AQuery.FieldByName('s_xhao').AsString,
FExamNo, BQuery.FieldByName('s_kcdhao').AsString, 0]);
BQuery.Next;
Inc(I);
end;
CQuery.ApplyUpdates;
AQuery.Next;
end;
PrgBar.Position := PrgBar.Max;
Application.ProcessMessages;
ModalResult := idOk;
//Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -