📄 exam_select_subjects_server.pas
字号:
unit Exam_Select_Subjects_server;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, Exam_Server_TLB, StdVcl, DB, ADODB, Provider,IniFiles,Dialogs;
type
TExam_Select_Subject_datamodule = class(TRemoteDataModule, IExam_Select_Subject_datamodule)
Exam_name_Query_Provider: TDataSetProvider;
Subject_Rule_Query_Provider: TDataSetProvider;
Select_Subject_SP: TADOStoredProc;
Select_Subject_Provider: TDataSetProvider;
Set_Subject_Point_Provider: TDataSetProvider;
Select_Subject_Key_Value_Provider: TDataSetProvider;
Select_Employee_Achievement_Provider: TDataSetProvider;
Employee_Table: TADOTable;
Employee_Table_Provider: TDataSetProvider;
Exam_Connection_Access: TADOConnection;
Select_Exam_name: TADOQuery;
Select_Subject_Rule: TADOQuery;
Select_Subject_Key_Value: TADOQuery;
Select_Subject_Key_ValueKey_Value: TWideStringField;
Select_Employee_Achievement: TADOQuery;
Employee_Achievement_Table_Insert: TADOQuery;
Employee_Logins: TADOQuery;
Employee_LoginsLogin_Psw: TWideStringField;
Employee_LoginsName: TWideStringField;
Employee_LoginsSex: TWideStringField;
Employee_LoginsSales_Department: TWideStringField;
Employee_LoginsDepartment: TWideStringField;
Employee_LoginsPurview: TWideStringField;
Employee_LoginsEmployee_Code: TWideStringField;
Update_Login_Psws: TADOQuery;
Set_Subject_Point: TADOQuery;
procedure RemoteDataModuleDestroy(Sender: TObject);
procedure Exam_ConnectionBeforeConnect(Sender: TObject);
procedure Employee_Table_ProviderBeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
private
FEmployee_Name:string;//登陆员工姓名,用来在中间件上显示登陆者信息(包括登陆时间)
Employee_Exam_Name: String;//某个员工的某次考试名称
Begin_Exam_Time,End_Exam_Time:string;//考试考试时间和结束考试时间
FSales_Department:string;{私有数据,记录登陆者的营业部名称}
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure Active_Select_Subject_Rule_SP(const Exam_Name: WideString);
safecall;
procedure Active_Select_Subject_SP(const Specialty, Style, Difficulty,
Select_Subject_Count: WideString); safecall;
procedure Active_Select_Subject_Key_Value_SP(const ID: WideString;
var Key_Value: OleVariant); safecall;
procedure Active_Set_Subject_Point_SP(const Exam_Name: WideString);
safecall;
procedure Active_Achievement_Table_Insert_SP(const Names, Sex, ID_card,
Employee_Code, Sales_Department, Department, Achievement, Exam_Name,
Exam_Specialty, Exam_Style, Begin_Exam_Datetime: WideString);
safecall;
procedure Employee_Login(const Login_Name: WideString; var Login_Psw,
Names, Sex, Sales_Department, Department, Purview, Employee_Code,
Count: OleVariant); safecall;
procedure Update_Login_Psw(const Login_Name, Login_Psw: WideString);
safecall;
procedure Active_Select_Employee_Achievement(const Employee_Code,
FromDatatime, ToDatatime: WideString); safecall;
procedure Action_Log(const Employee_Name, Sales_Department, Department,
Action_Name: WideString); safecall;
public
{ Public declarations }
end;
implementation
uses Main;
{$R *.DFM}
class procedure TExam_Select_Subject_datamodule.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
procedure TExam_Select_Subject_datamodule.Active_Select_Subject_Rule_SP(
const Exam_Name: WideString);
begin
//Employee_Exam_Name:=Exam_Name;{将该员工的考试名称记录起来}
with Select_Subject_Rule do
begin
Parameters.ParamByName('Exam_Name').Value:=Exam_Name;
ExecProc;
end;
end;
procedure TExam_Select_Subject_datamodule.Active_Select_Subject_SP(
const Specialty, Style, Difficulty, Select_Subject_Count: WideString);
begin
//问题没解决
{ with Select_Subject_SP do
begin
Parameters.ParamByName('@Specialty').Value:=Specialty;
Parameters.ParamByName('@Style').Value:=Style;
Parameters.ParamByName('@Difficulty').Value:=Difficulty;
Parameters.ParamByName('@Select_Subject_Count').value:=strtoint(Select_Subject_Count);
ExecProc;
end; }
end;
procedure TExam_Select_Subject_datamodule.Active_Select_Subject_Key_Value_SP(
const ID: WideString; var Key_Value: OleVariant);
begin
//远程过程,输入参数题目编号,激活Select_Subject_Key_Value,返回该题目的答案值
with Select_Subject_Key_Value do
begin
Parameters.ParamByName('ID').Value:=ID;
ExecProc;
Key_Value:=Select_Subject_Key_ValueKey_Value.Value;
end;
end;
procedure TExam_Select_Subject_datamodule.Active_Set_Subject_Point_SP(
const Exam_Name: WideString);
begin
{远程过程,输入参数考试名称,激活存储过程Set_Subject_Point_SP,
通过考试规则表,计算出某个题型某个难度的题目分值,结果为数据集合 }
with Set_Subject_Point do
begin
Parameters.ParamByName('Exam_Name').Value:=Exam_Name;
ExecProc;
end;
end;
procedure TExam_Select_Subject_datamodule.Active_Achievement_Table_Insert_SP(
const Names, Sex, ID_card, Employee_Code, Sales_Department, Department,
Achievement, Exam_Name, Exam_Specialty, Exam_Style,
Begin_Exam_Datetime: WideString);
begin
{远程过程,考试结束并得出成绩时调用,将考生身份和考试成绩等相关内容插入到数据库}
With Employee_Achievement_Table_Insert do
begin
Parameters.ParamByName('Name').Value:=Names;
Parameters.ParamByName('Sex').Value:=Sex;
Parameters.ParamByName('ID_card').Value:=ID_card;
Parameters.ParamByName('Employee_Code').Value:=Employee_Code;
Parameters.ParamByName('Sales_Department').Value:=Sales_Department;
Parameters.ParamByName('Department').Value:=Department;
Parameters.ParamByName('Achievement').Value:=Achievement;
Parameters.ParamByName('Exam_Name').Value:=Exam_Name;
Parameters.ParamByName('Exam_Specialty').Value:=Exam_Specialty;
Parameters.ParamByName('Exam_Style').Value:=Exam_Style;
Parameters.ParamByName('Begin_Exam_Datetime').Value:=Begin_Exam_Datetime;
ExecProc;
end;
end;
procedure TExam_Select_Subject_datamodule.Employee_Login(
const Login_Name: WideString; var Login_Psw, Names, Sex,
Sales_Department, Department, Purview, Employee_Code, Count: OleVariant);
begin
With Employee_Login do
begin
Parameters.ParamByName('Login_Name').Value:=Login_Name;
ExecProc;
If Employee_LoginsName.Value<>''
then
begin
Login_Psw:=Employee_LoginsLogin_Psw.Value;
Names:=Employee_LoginsName.Value;
Sex:=Employee_LoginsSex.Value;
Sales_Department:=Employee_LoginsSales_Department.Value;
Department:=Employee_LoginsDepartment.Value;
Purview:=Employee_LoginsPurview.Value;
Employee_Code:=Employee_LoginsEmployee_Code.Value;
Count:='1'
Else Count:='0';
{私有数据,记录登陆者的营业部名称}
FSales_Department:=Sales_Department;
end;
end;
procedure TExam_Select_Subject_datamodule.Update_Login_Psw(
const Login_Name, Login_Psw: WideString);
begin
With Update_Login_Psw do
begin
Parameters.ParamByName('@Login_Name').Value:=Login_Name;
Parameters.ParamByName('@Login_Psw').Value:=Login_Psw;
ExecProc;
end;
end;
procedure TExam_Select_Subject_datamodule.RemoteDataModuleDestroy(
Sender: TObject);
begin
with Server_Main_Frm.Login_ListBox.Items do
Delete(IndexOf(FEmployee_Name));
With Server_Main_Frm do {显示考试人数}
Count_Label.Caption:=Inttostr(Login_ListBox.Items.Count);
end;
procedure TExam_Select_Subject_datamodule.Exam_ConnectionBeforeConnect(
Sender: TObject);
var
Configure_Sqlserver: TIniFile;
Host_IP,Provider,Password,Persist_Security_Info,User_ID,Initial_Catalog,Data_Source:string;
Connection_String:string;
begin
//读出INI文件中数据库服务器的相关参数
Configure_Sqlserver := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Configure_Sqlserver.ini');
with Configure_Sqlserver do
begin
Host_IP:=ReadString('Server', 'Host_IP',Host_IP);
Provider:=ReadString('Sqlserver', 'Provider',Provider);
Password:=ReadString('Sqlserver', 'Password',Password);
Persist_Security_Info:=ReadString('Sqlserver', 'Persist Security Info',Persist_Security_Info);
User_ID:=ReadString('Sqlserver', 'User ID',User_ID);
Initial_Catalog:=ReadString('Sqlserver', 'Initial Catalog',Initial_Catalog);
Data_Source:=ReadString('Sqlserver', 'Data Source',Data_Source);
Connection_String:='Provider='+Provider+';Password='+Password+';Persist Security Info=';
Connection_String:=Connection_String+Persist_Security_Info+';User ID='+User_ID+';Initial Catalog=';
Connection_String:=Connection_String+Initial_Catalog+';Data Source='+Data_Source;
Exam_Connection.ConnectionString:=Connection_String;
end;
Configure_Sqlserver.Free;
end;
procedure TExam_Select_Subject_datamodule.Active_Select_Employee_Achievement(
const Employee_Code, FromDatatime, ToDatatime: WideString);
begin
With Select_Employee_Achievement do
begin
Parameters.ParamByName('Employee_Code').Value:=Employee_Code;
Parameters.ParamByName('Fromdatatime').Value:=FromDatatime;
Parameters.ParamByName('Todatatime').Value:=ToDatatime;
ExecProc;
end;
end;
procedure TExam_Select_Subject_datamodule.Employee_Table_ProviderBeforeGetRecords(
Sender: TObject; var OwnerData: OleVariant);
begin
{员工资料过滤,各营业部管理员只能看到自己营业部的员工资料}
Employee_Table.Filter:= 'Sales_Department='+''''+FSales_Department+'''';
Employee_Table.Filtered:=True;
end;
procedure TExam_Select_Subject_datamodule.Action_Log(const Employee_Name,
Sales_Department, Department, Action_Name: WideString);
begin
Server_Main_Frm.Log_ListBox.Items.Add(Datetostr(date())+' '+Timetostr(time())+': '
+Sales_Department+'/'+Department+'/'+Employee_Name+': '+Action_Name);
{将登陆信息独立写在实时监控栏,以便核对登陆人数}
If Action_Name='动作:已经登陆!' Then
begin
Server_Main_Frm.Login_ListBox.Items.Add(Datetostr(date())+' '+Timetostr(time())+': '+Sales_Department+'/'+Department+'/'+Employee_Name);
FEmployee_Name := Datetostr(date())+' '+Timetostr(time())+': '+Sales_Department+'/'+Department+'/'+Employee_Name;
With Server_Main_Frm do {显示考试人数}
Count_Label.Caption:=Inttostr(Login_ListBox.Items.Count);
end;
end;
initialization
TComponentFactory.Create(ComServer, TExam_Select_Subject_datamodule,
Class_Exam_Select_Subject_datamodule, ciMultiInstance, tmApartment);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -