📄 app_unit2.~pas
字号:
unit App_Unit2;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, App_prj_TLB, StdVcl, Provider, DB, DBTables;
type
Tmylunwen = class(TRemoteDataModule, Imylunwen)
c_Table1: TTable;
c_DataSetProvider1: TDataSetProvider;
J_Table1: TTable;
J_DataSetProvider1: TDataSetProvider;
F_DataSetProvider2: TDataSetProvider;
P_DataSetProvider3: TDataSetProvider;
F_Table1: TTable;
P_Table2: TTable;
ksmd: TTable;
chaxun: TQuery;
Database1: TDatabase;
Session1: TSession;
DataSource1: TDataSource;
procedure RemoteDataModuleCreate(Sender: TObject);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure Login(const zkzID, ComputerName: WideString; var ksName,
TablesRecordOrder: OleVariant); safecall;
procedure getTablesSize(var Sizes: OleVariant); safecall;
public
{ Public declarations }
end;
implementation
uses Variants,App_Unit1;
{$R *.DFM}
class procedure Tmylunwen.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 Tmylunwen.Login(const zkzID, ComputerName: WideString;
var ksName, TablesRecordOrder: OleVariant);
var i,j,k : integer;
OrderString,FieldName : string;
Record_Count : array [1..4] of integer;
s : set of 1..255;
begin
Record_Count[1]:=c_Table1.RecordCount;
Record_Count[2]:=J_Table1.RecordCount;
Record_Count[3]:=F_Table1.RecordCount;
Record_Count[4]:=P_Table2.RecordCount;
ksmd.Active:=true;
if ksmd.Locate('准考证号',VarArrayOf([zkzID]),[]) then
begin
if ksmd.FieldValues['计算机名']=Null then
begin //首次登陆,在ksmd中填写考生的登陆信息
ksmd.Edit;
ksmd.FieldByName('计算机名').AsString := ComputerName;
for i:=1 to 4 do
begin //对第i种类型的试题,(随机)产生本考生的答题次序:
randomize;
s:=[]; k:=1;
OrderString:='';
while (k<=Record_Count[i]) do
begin
j:=trunc(random(Record_Count[i]));
if not(j in s) then // 第j题还未选过
begin
s := s + [j];
TablesRecordOrder[k,i]:=j+1; //第i类试题的第k题的题号为j+1;
OrderString:=OrderString + IntToStr(TablesRecordOrder[k,i]);
if k<Record_Count[i] then OrderString:=OrderString+',';
k:=k+1;
end;
end;
//形成存储第i类试题示题次序字符串的字段名:
FieldName:='OrderString'+IntToStr(i);
ksmd.FieldByName(FieldName).AsString := OrderString;
end;
ksmd.Post;
ksName:=ksmd.FieldValues['考生姓名'];
chaxun.Close;
chaxun.Active:=true;
end
else //该考生是再次登陆,并所用的计算机与上次是同一台
if ksmd.FieldValues['计算机名']=ComputerName then
ksName:=ksmd.FieldValues['考生姓名']
else
ksName:='你换了考试位置,但还没有得到监考老师认可!';
end
else
ksName:='not found';
end;
procedure Tmylunwen.getTablesSize(var Sizes: OleVariant);
begin
Sizes[1]:=c_Table1.RecordCount; //返回各数据表的记录数
Sizes[2]:=J_Table1.RecordCount;
Sizes[3]:=F_Table1.RecordCount;
Sizes[4]:=P_Table2.RecordCount;
end;
procedure Tmylunwen.RemoteDataModuleCreate(Sender: TObject);
begin
c_Table1.Open;
J_Table1.Open;
F_Table1.Open;
P_Table2.Open;
end;
initialization
TComponentFactory.Create(ComServer, Tmylunwen,
Class_mylunwen, ciMultiInstance, tmApartment);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -