📄 dmsystemservice.pas
字号:
{-----------------------------------------------------------------------------
Unit: dmBaseModule
Author: Aleyn.wu
Date: 2002-05-12
Descript: Module Service
-----------------------------------------------------------------------------}
unit dmSystemService;
interface
uses
SysUtils, Classes, Windows, Provider, DB, dmBaseModule, hmUniKey, hmMemTools,
ADODB, Dialogs;
type
TdmSysService = class(TDataModule)
mdLibrary: TADOQuery;
Connection: TADOConnection;
Cmd: TADOCommand;
private
public
procedure CreateMDTable;
procedure DropMDTable;
function LoadModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
function FreeModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
function LoadAllModuleLibrary: Boolean;
function FreeAllModuleLibrary: Boolean;
end;
var
dmSysService: TdmSysService;
OnlineUserCount: integer;
LibUniKey: string;
implementation
uses dmBaseService;
{$R *.dfm}
{ TdmSysService }
function TdmSysService.LoadModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
var
Module: PModuleLibrary;
FModuleInfo: IDataModuleInfo;
begin
try
if CheckDB then
if not mdLibrary.Locate('md_UniKey', Key, []) then
begin
Result := False;
exit;
end;
if mdLibrary['md_State'] = 1 then
begin
Result := True;
Exit;
end;
Module := MemCreate(sizeof(TModuleLibrary));
//Module^.FileName := MemCreate(Length(FileName));
//Module^.FileName := StrPCopy(Module^.FileName, FileName);
Module^.LibHandle := LoadLibrary(PChar(mdLibrary.FieldByName('md_FileName').AsString));
Module^.CreateDataModule := GetProcAddress(Module^.LibHandle, 'CreateDataModule');
Module^.CreateDataModuleInfo := GetProcAddress(Module^.LibHandle, 'CreateDataModuleInfo');
FModuleInfo := Module^.CreateDataModuleInfo();
mdLibrary.Edit;
mdLibrary['md_ModuleAddr'] := Integer(Module);
mdLibrary['md_ModuleName'] := FModuleInfo.GetModuleName;
mdLibrary['md_Version'] := FModuleInfo.GetVersion;
mdLibrary['md_Designner'] := FModuleInfo.GetDesignner;
mdLibrary['md_Memo'] := FModuleInfo.GetMemo;
mdLibrary['md_LastUpdate'] := FModuleInfo.GetLastUpdate;
mdLibrary['md_ModuleIndex'] := FModuleInfo.ModuleIndex;
mdLibrary['md_State'] := 1;
mdLibrary.Post;
FModuleInfo := nil;
Result := True;
except
Result := False;
end;
end;
function TdmSysService.FreeModuleLibrary(Key: string; CheckDB: Boolean): Boolean;
var
Module: PModuleLibrary;
begin
try
if CheckDB then
if not mdLibrary.Locate('md_UniKey', Key, []) then
begin
Result := False;
exit;
end;
if mdLibrary['md_State'] = 3 then
begin
Result := True;
exit;
end;
if mdLibrary.FieldByName('md_ModuleAddr').AsInteger = 0 then
begin
Result := False;
exit;
end;
Module := Pointer(mdLibrary.FieldByName('md_ModuleAddr').AsInteger);
FreeLibrary(Module^.LibHandle);
Module^.CreateDataModule := nil;
Module^.CreateDataModuleInfo := nil;
//MemFree(Module^.FileName);
Module^.ModuleState := srStop;
MemFree(Module);
mdLibrary.Edit;
mdLibrary['md_ModuleAddr'] := 0;
mdLibrary['md_State'] := 3;
mdLibrary.Post;
Result := True;
except
Result := False;
end;
end;
function TdmSysService.LoadAllModuleLibrary: Boolean;
begin
mdLibrary.First;
Result := False;
while not mdLibrary.Eof do
begin
Result := LoadModuleLibrary(mdLibrary.FieldByName('md_UniKey').AsString, False);
if not Result then Break;
mdLibrary.Next;
end; // while
mdLibrary.First;
end;
function TdmSysService.FreeAllModuleLibrary: Boolean;
begin
mdLibrary.First;
Result := False;
while not mdLibrary.Eof do
begin
Result := FreeModuleLibrary(mdLibrary.FieldByName('md_UniKey').AsString, False);
if not Result then Break;
mdLibrary.Next;
end; // while
mdLibrary.First;
end;
procedure TdmSysService.CreateMDTable;
begin
try
LibUniKey := '##MD' + UniKey;
Cmd.CommandText := 'Create Table ' + LibUniKey + ' (' +
'md_ID int identity,md_Filename varchar(50),md_ModuleName varchar(50),' +
'md_ModuleIndex int,md_Version varchar(50),md_Designner varchar(50),' +
'md_Memo text,md_LastUpdate datetime,md_State smallint,md_ModuleAddr int,' +
'md_UniKey char(16),md_System bit,md_LoadWhenStart bit)';
Cmd.Execute;
mdLibrary.SQL.Text:='Select * from '+LibUniKey;
mdLibrary.Open;
except
ShowMessage('Create ' + LibUniKey + ' Error');
end;
end;
procedure TdmSysService.DropMDTable;
begin
mdLibrary.Close;
Cmd.CommandText := 'Drop Table ' + LibUniKey;
Cmd.Execute;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -