批量插入

unit unit2;

interface uses Windows, ActiveX, SysUtils, Winsock, ComObj, Variants, Forms, Classes, ComCtrls, Controls, IPMacEdit, IniFiles;

function PlugInName: PChar; stdcall;
procedure LoadDll; stdcall;
procedure UnLoadDll; stdcall;
function Config(GroupID: Integer; Right: Integer): Boolean; stdcall;
function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;

type  TLog = record  Time: TDateTime;
    SrcIP, DstIP: DWORD;
    PlugIn, Msg, Link: string;
    Act: integer;
  end;
  PLog = ^TLog;
const  Opcode_TOLAN = 1;
const  Opcode_TOINT = 2;
const  adOpenForwardOnly = 0;
  adOpenKeyset = 1;
  adOpenDynamic = 2;
  adOpenStatic = 3;
  adLockReadOnly = 1;
  adLockPessimistic = 2;
  adLockOptimistic = 3;
  adLockBatchOptimistic = 4;
  adUseServer = 2;
  adUseClient = 3;

procedure SaveConfig;
procedure SaveLogs;
procedure LoadConfig;

function TestConnect(UdlFile: string): Boolean;
function GetModuleName: string;
procedure ClearLogList;

var  LogList: TList;
  MaxLog: Integer;
  DataLink: string;
  DbError: Boolean = False;
  ADOConn, ADOCmd, ADORs: OLEOBJ_E_FIRST;


implementation //·µ»ØÄ£¿éÃû³ÆÈë¿Úº¯Êý function PlugInName: PChar; stdcall;
begin  Result := 'ÈÕÖ¾Êý¾Ý¿âÊä³ö';
end;

//Ä£¿é³õʼ»¯×°ÔØÈë¿Úº¯Êý procedure LoadDll; stdcall;
begin  CoInitialize(nil);
  ADOConn := CreateOleObject('ADODB.Connection');
  ADORs := CreateOleObject('ADODB.RecordSet');
  ADORs.CursorLocation := adUseClient;
  LoadConfig;
  LogList := TList.Create;
end;

//Ä£¿é½áÊøÇ°Ð对ØÈë¿Úº¯Êý procedure UnLoadDll; stdcall;
begin  if LogList.Count > 0 then SaveLogs;
  ClearLogList;
  LogList.Free;
  ADORs := Unassigned;
  ADOConn := Unassigned;
  CoUnInitialize;
end;

//ÈÕÖ¾Èë¿Úº¯Êý function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
var  EnvLog: PLog;
begin  Result := 0;
  New(EnvLog);
  EnvLog^.Time := Now;
  if (LENGTH > $22) and (PWORD(@Data[$0C])^ = $0008) then  begin  case OPCODE of  Opcode_TOLAN:
        begin  EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1A])^);
          EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1E])^);
        end;
      Opcode_TOINT:
        begin  EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1A])^);
          EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1E])^);
        end;
    end;
  end;
  EnvLog^.PlugIn := PlugIn;
  EnvLog^.Msg := WarnMsg;
  EnvLog^.Link := WarnMsg + 256;
  EnvLog^.Act := Action and $7;
  LogList.Add(EnvLog);

end;

//ÅäÖÃÈë¿Úº¯Êý function Config(GroupID: Integer; Right: Integer): Boolean;
begin end;


function GetModuleName: string;
var  szFileName: array[0..MAX_PATH] of Char;
begin  GetModuleFileName(hInstance, szFileName, MAX_PATH);
  Result := szFileName;
end;

procedure ClearLogList;
var  i: integer;
begin  for i := 0 to LogList.Count - 1 do  begin  Dispose(PLog(LogList.Items[i]));
  end;
  LogList.Clear;
end;

//´ò¿ªÅäÖú¯Êý procedure LoadConfig;
var  IniFile: TIniFile;
begin  IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
  MaxLog := IniFile.ReadInteger('Config', 'MaxLog', 100);
  DataLink := IniFile.ReadString('Config', 'DataLink', ExtractFilePath(Application.ExeName) + 'PlugIns/DbLink.udl');
  IniFile.Free;
end;

procedure SaveConfig;
var  IniFile: TIniFile;
begin  IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
  IniFile.WriteInteger('Config', 'MaxLog', MaxLog);
  IniFile.WriteString('Config', 'DataLink', DataLink);
  IniFile.Free;
  DbError := False;
end;

procedure SaveLogs;
var  LogItem: PLog;
  IP: TIP;
  i: Integer;
begin  if DbError then Exit;
  try  ADOConn.Open('File Name=' + DataLink + ';');
  except  DbError := True;
    Exit;
  end;
  try  ADORs.Open('SELECT * FROM EventLog WHERE 0=1', ADOConn, adOpenKeyset, adLockBatchOptimistic);
  except  ADOConn.Close;
    DbError := True;
    Exit;
  end;

  IP := TIP.Create;
  try  for i := 0 to LogList.Count - 1 do  begin  LogItem := LogList.Items[i];
      ADORs.AddNew;
      ADORs.Fields.Item['EventTime'].Value := LogItem^.Time;
      IP.DIP := LogItem^.SrcIP;
      ADORs.Fields.Item['SrcIP'].Value := IP.IPString;
      IP.DIP := LogItem^.DstIP;
      ADORs.Fields.Item['DstIP'].Value := IP.IPString;
      ADORs.Fields.Item['PlugIn'].Value := LogItem^.PlugIn;
      ADORs.Fields.Item['Act'].Value := LogItem^.Act;
      ADORs.Fields.Item['Msg'].Value := LogItem^.Msg;
      ADORs.Fields.Item['Res'].Value := LogItem^.Link;
    end;
      ADORs.UpdateBatch;
  except  ADORs.CancelUpdate;
    DbError := True;
  end;
  IP.Free;
  ADORs.Close;
  ADOConn.Close;
end;

function TestConnect(UdlFile: string): Boolean;
begin  try  ADOConn.Open('File Name=' + UdlFile + ';');
  except  Result := False;
    Exit;
  end;
  try  ADORs.Open('SELECT EventTime,SrcIP,DstIP,PlugIn,Act,Msg,Res FROM EventLog WHERE ID=0', ADOConn, adOpenKeyset, adLockBatchOptimistic);
  except  ADOConn.Close;
    Result := False;
    Exit;
  end;
  ADORs.Close;
  ADOConn.Close;
  Result := True;
end;

end.


 unit2;

interface

uses Windows, ActiveX, SysUtils, Winsock, ComObj, Variants, Forms, Classes, ComCtrls, Controls, IPMacEdit, IniFiles;

function PlugInName: PChar; stdcall;
procedure LoadDll; stdcall;
procedure UnLoadDll; stdcall;
function Config(GroupID: Integer; Right: Integer): Boolean; stdcall;
function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;

type
  TLog = record
    Time: TDateTime;
    SrcIP, DstIP: DWORD;
    PlugIn, Msg, Link: string;
    Act: integer;
  end;
  PLog = ^TLog;
const
  Opcode_TOLAN = 1;
const
  Opcode_TOINT = 2;
const
  adOpenForwardOnly = 0;
  adOpenKeyset = 1;
  adOpenDynamic = 2;
  adOpenStatic = 3;
  adLockReadOnly = 1;
  adLockPessimistic = 2;
  adLockOptimistic = 3;
  adLockBatchOptimistic = 4;
  adUseServer = 2;
  adUseClient = 3;

procedure SaveConfig;
procedure SaveLogs;
procedure LoadConfig;

function TestConnect(UdlFile: string): Boolean;
function GetModuleName: string;
procedure ClearLogList;

var
  LogList: TList;
  MaxLog: Integer;
  DataLink: string;
  DbError: Boolean = False;
  ADOConn, ADOCmd, ADORs: OLEOBJ_E_FIRST;


implementation


//·µ»ØÄ£¿éÃû³ÆÈë¿Úº¯Êý

function PlugInName: PChar; stdcall;
begin
  Result := 'ÈÕÖ¾Êý¾Ý¿âÊä³ö';
end;

//Ä£¿é³õʼ»¯×°ÔØÈë¿Úº¯Êý

procedure LoadDll; stdcall;
begin
  CoInitialize(nil);
  ADOConn := CreateOleObject('ADODB.Connection');
  ADORs := CreateOleObject('ADODB.RecordSet');
  ADORs.CursorLocation := adUseClient;
  LoadConfig;
  LogList := TList.Create;
end;

//Ä£¿é½áÊøÇ°Ð对ØÈë¿Úº¯Êý

procedure UnLoadDll; stdcall;
begin

  if LogList.Count > 0 then SaveLogs;
  ClearLogList;
  LogList.Free;
  ADORs := Unassigned;
  ADOConn := Unassigned;
  CoUnInitialize;
end;

//ÈÕÖ¾Èë¿Úº¯Êý

function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
var
  EnvLog: PLog;
begin
  Result := 0;
  New(EnvLog);
  EnvLog^.Time := Now;
  if (LENGTH > $22) and (PWORD(@Data[$0C])^ = $0008) then
  begin
    case OPCODE of
      Opcode_TOLAN:
        begin
          EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1A])^);
          EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1E])^);
        end;
      Opcode_TOINT:
        begin
          EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1A])^);
          EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1E])^);
        end;
    end;
  end;
  EnvLog^.PlugIn := PlugIn;
  EnvLog^.Msg := WarnMsg;
  EnvLog^.Link := WarnMsg + 256;
  EnvLog^.Act := Action and $7;
  LogList.Add(EnvLog);

end;

//ÅäÖÃÈë¿Úº¯Êý

function Config(GroupID: Integer; Right: Integer): Boolean;
begin
end;


function GetModuleName: string;
var
  szFileName: array[0..MAX_PATH] of Char;
begin
  GetModuleFileName(hInstance, szFileName, MAX_PATH);
  Result := szFileName;
end;

procedure ClearLogList;
var
  i: integer;
begin
  for i := 0 to LogList.Count - 1 do
  begin
    Dispose(PLog(LogList.Items[i]));
  end;
  LogList.Clear;
end;

//´ò¿ªÅäÖú¯Êý

procedure LoadConfig;
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
  MaxLog := IniFile.ReadInteger('Config', 'MaxLog', 100);
  DataLink := IniFile.ReadString('Config', 'DataLink', ExtractFilePath(Application.ExeName) + 'PlugIns/DbLink.udl');
  IniFile.Free;
end;

procedure SaveConfig;
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
  IniFile.WriteInteger('Config', 'MaxLog', MaxLog);
  IniFile.WriteString('Config', 'DataLink', DataLink);
  IniFile.Free;
  DbError := False;
end;

procedure SaveLogs;
var
  LogItem: PLog;
  IP: TIP;
  i: Integer;
begin
  if DbError then Exit;
  try
    ADOConn.Open('File Name=' + DataLink + ';');
  except
    DbError := True;
    Exit;
  end;
  try
    ADORs.Open('SELECT * FROM EventLog WHERE 0=1', ADOConn, adOpenKeyset, adLockBatchOptimistic);
  except
    ADOConn.Close;
    DbError := True;
    Exit;
  end;

  IP := TIP.Create;
  try
    for i := 0 to LogList.Count - 1 do
    begin
      LogItem := LogList.Items[i];
      ADORs.AddNew;
      ADORs.Fields.Item['EventTime'].Value := LogItem^.Time;
      IP.DIP := LogItem^.SrcIP;
      ADORs.Fields.Item['SrcIP'].Value := IP.IPString;
      IP.DIP := LogItem^.DstIP;
      ADORs.Fields.Item['DstIP'].Value := IP.IPString;
      ADORs.Fields.Item['PlugIn'].Value := LogItem^.PlugIn;
      ADORs.Fields.Item['Act'].Value := LogItem^.Act;
      ADORs.Fields.Item['Msg'].Value := LogItem^.Msg;
      ADORs.Fields.Item['Res'].Value := LogItem^.Link;
    end;
      ADORs.UpdateBatch;
  except
    ADORs.CancelUpdate;
    DbError := True;
  end;
  IP.Free;
  ADORs.Close;
  ADOConn.Close;
end;

function TestConnect(UdlFile: string): Boolean;
begin
  try
    ADOConn.Open('File Name=' + UdlFile + ';');
  except
    Result := False;
    Exit;
  end;
  try
    ADORs.Open('SELECT EventTime,SrcIP,DstIP,PlugIn,Act,Msg,Res FROM EventLog WHERE ID=0', ADOConn, adOpenKeyset, adLockBatchOptimistic);
  except
    ADOConn.Close;
    Result := False;
    Exit;
  end;
  ADORs.Close;
  ADOConn.Close;
  Result := True;
end;

end.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值