⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exam_select_subjects_server.pas

📁 证券公司考试系统,三层架构,从题库自动产生试卷,全部主观题
💻 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 + -