📄 studentmain.pas
字号:
{**********************************************************************}
{ ================== }
{ MIDAS远程数据模块 }
{ ================== }
{ 《学籍管理系统》--作者:贺广兵 }
{ }
{ 本模块IShoolMTS提供了六个方法供调用,重要的方法有 GETALLTABLES , }
{ NEWPASSWORD。实现了ADO交易控制,为连结查询后的结果修改提供了正确保护 }
{ NEWPASSWORD 本来是用来在服务器端进行客户权限管理的方法,但实现了此方 }
{ 法,虽然使用户的管理更加容易,却阻碍了本系统软件设计阶段所规定的良好 }
{ 的可移植性。考虑到高校学籍管理的实际情况,把权限交给使用本系统的客户 }
{ 来管理。 }
{ }
{**********************************************************************}
unit StudentMain;
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, SchoolManager_TLB, StdVcl, Dialogs, Provider, Db, ADOCONED, ADODB;
type
TSchoolMTS = class(TRemoteDataModule, ISchoolMTS)
DataSetProviderXiB: TDataSetProvider;
ADOConnection1: TADOConnection;
ADODataSetXiB: TADODataSet;
procedure DataSetProviderXiBUpdateData(Sender: TObject;
DataSet: TClientDataSet);
procedure RemoteDataModuleCreate(Sender: TObject);
procedure RemoteDataModuleDestroy(Sender: TObject);
procedure DataSetProviderXiBGetTableName(Sender: TObject;
DataSet: TDataSet; var TableName: String);
procedure DataSetProviderXiBBeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
procedure ADODataSetXiBBeforePost(DataSet: TDataSet);
procedure ADODataSetXiBAfterPost(DataSet: TDataSet);
procedure ADODataSetXiBPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure GetHostNotes(var Notes: OleVariant); safecall;
procedure GetSystemTime(var SystemTime: OleVariant); safecall;
procedure GetSystemUse(var SystemUse: OleVariant); safecall;
procedure GetAllTables(var TablesNames: OleVariant); safecall;
procedure SearchRecord(var CommandTxt: OleVariant); safecall;
procedure NewPassword(var UseName, OldPassword, NewPassword: OleVariant);
safecall;
procedure ClearLink; safecall;
public
procedure LinkDataBase;
{ Public declarations }
end;
var
SchoolMTS:TSchoolMTS;
implementation
uses StudentMain1, DataModuleLocate;
{$R *.DFM}
procedure TSchoolMTS.LinkDataBase;
begin
//try
//ADOConnection1.Close;
//EditConnectionString(ADOConnection1);
// ADOConnection1.Open;
//MessageDlg('连接成功!!!',mtInformation,[mbOK],0);
//except on E:Exception do
//begin
//ADOConnection1.Close;
//DataSourceLinked:=False;
// MessageDlg('连接失败!!!',mtWarning,[mbOK],0);
// end;
//end;
end;
class procedure TSchoolMTS.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 TSchoolMTS.GetHostNotes(var Notes: OleVariant);
begin
end;
procedure TSchoolMTS.DataSetProviderXiBUpdateData(Sender: TObject;
DataSet: TClientDataSet);
begin
with ServerMainForm do
begin
ClientDataSet1.AppendData(DataSet.Data,False);
Memo1.Lines.Add('访问时间:'+DateTimeToStr(Now));
end;
end;
procedure TSchoolMTS.RemoteDataModuleCreate(Sender: TObject);
begin
ADOConnection1.Connected:=True; //初始化连接
ADODataSetXiB.Active:=True;
end;
procedure TSchoolMTS.RemoteDataModuleDestroy(Sender: TObject);
begin
ADODataSetXiB.Active:=False;
ADOConnection1.Connected:=False;
end;
procedure TSchoolMTS.GetSystemTime(var SystemTime: OleVariant);
begin
SystemTime:=DateTimeToStr(Now);
end;
procedure TSchoolMTS.GetSystemUse(var SystemUse: OleVariant);
begin
//得到系统用户列表
end;
procedure TSchoolMTS.GetAllTables(var TablesNames: OleVariant);
var
tbList:TStringList;
icount:Integer;
begin
tbList:=TStringList.Create;
try
ADOConnection1.GetTableNames(tbList);
TablesNames:=VarArrayCreate([0,tblist.Count-1],VarVariant);
for icount:=0 to tbList.Count-1 do
begin
TablesNames[icount]:=tbList.Strings[icount];
end;
finally
tbList.Free;
end;
end;
procedure TSchoolMTS.DataSetProviderXiBGetTableName(Sender: TObject;
DataSet: TDataSet; var TableName: String);
begin
with ServerMainForm do //此事件在数据被更新时才触发!
begin
Memo1.Lines.Add(DateTimeToStr(Now)+': '+TableName+'被访问。');
//
end;
end;
procedure TSchoolMTS.SearchRecord(var CommandTxt: OleVariant);
begin
ADOConnection1.Close;
ADODataSetXiB.Close;
ADOConnection1.Open;
ADODataSetXiB.CommandText:=CommandTxt;
ADODataSetXiB.Open;
end;
procedure TSchoolMTS.DataSetProviderXiBBeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
begin //和客户端通信共同维护虚拟Curse
{with Sender as TDataSetProvider do
begin
DataSet.Open;
DataSet.Locate('系号',OwnerData,[]);
DataSet.Next;
end;}
end;
procedure TSchoolMTS.NewPassword(var UseName, OldPassword,
NewPassword: OleVariant);
begin
try
LocateData.ADODataSetPassword.Close;
LocateData.ADODataSetPassword.CommandText:=
'SELECT * FROM 用户权限表 WHERE 用户名= '+''''+UseName+'''';
LocateData.ADODataSetPassword.Open;
if LocateData.ADODataSetPassword.FieldByName('用户密码').AsString
=OldPassword then
begin
LocateData.ADODataSetPassword.Edit;
LocateData.ADODataSetPassword.FieldByName('用户密码').AsString:=NewPassword;
LocateData.ADODataSetPassword.Post;
UseName:='T';
end else
begin
UseName:='F';
end;
except on E:Exception do
begin
UseName:='D';
end;
end;
end;
procedure TSchoolMTS.ClearLink;
begin
ADOConnection1.Close;
ADOConnection1.Open;
end;
procedure TSchoolMTS.ADODataSetXiBBeforePost(DataSet: TDataSet);
begin
//ADOConnection1.BeginTrans;
end;
procedure TSchoolMTS.ADODataSetXiBAfterPost(DataSet: TDataSet);
begin
//ADOConnection1.CommitTrans;
end;
procedure TSchoolMTS.ADODataSetXiBPostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
ADOConnection1.RollbackTrans;
Action:=daAbort;
end;
initialization
TComponentFactory.Create(ComServer, TSchoolMTS,
Class_SchoolMTS, ciMultiInstance, tmApartment);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -