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

📄 studentmain.pas

📁 学籍管理
💻 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 + -