网络函数库

原创 2006年05月25日 14:55:00

{=========================================================================
   功  能: 网络函数库
   时  间: SilverLong 2005/10/09
   版  本: 1.0
   备  注:
=========================================================================}

unit NetFunction;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Mask, ImgList, ToolWin ,winsock,
  ComObj,WinInet,Registry, Buttons, Menus,DB,Adodb;


  //功  能: 获取本机的IP地址
  Function GetIP: string;

  //得到本机的局域网Ip地址
  Function GetLocalIp(var LocalIp:string): Boolean;
  //通过Ip返回机器名
  Function GetNameByIPAddr(IPAddr: string; var MacName: string): Boolean ;
  //获取网络中SQLServer列表
  Function GetSQLServerList(var List: Tstringlist): Boolean;

  //获取网络中SQLServer列表
  Function GetSQLServerCom(var SQLComboBox: TComboBox): boolean;

  //获取网络中SQLServer中数据库名列表(根据use master select * from dbo.sysdatabases获取)
  Function GetDataBaseName(var Query: TADOQuery): TStringList;

  //获取网络中SQLServer中数据库表的表名列表 (根据select * from sysobjects where xtype='U'获取)
  Function GetTableName(var Query: TADOQuery): TStringList;

  //获取网络中SQLServer中数据库表的列名、类型和长度 列表
  //备 注:   根据select name (or Type or Length)  from syscolumns a ,sysobjects b
  //             where a.id=b.id and b.xtype='U' and b.name='表名参数'获取数据
  Function GetColValues(var Query: TADOQuery;TBName:String;nType:String): TStrings;
  

  //获取网络中的所有网络类型
  Function GetNetList(var List: Tstringlist): Boolean;
  //获取网络中的工作组
  Function GetGroupList(var List: TStringList): Boolean;
  //获取工作组中所有计算机
  Function GetUsers(GroupName: string; var List: TStringList): Boolean;
  //获取网络中的资源
  Function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
  //映射网络驱动器
  Function NetAddConnection(NetPath: Pchar; PassWord: Pchar;LocalPath: Pchar): Boolean;
  //检测网络状态
  Function CheckNet(IpAddr:string): Boolean;
  //检测机器是否登入网络
  Function CheckMacAttachNet: Boolean;

  //判断Ip协议有没有安装   这个函数有问题
  Function IsIPInstalled : boolean;
  //检测机器是否上网
  Function InternetConnected: Boolean;

  //处理登陆共享目录错误信息
  procedure CallNetExtError;
  //处理登陆共享目录
  function WinLoginNet(ShareDir,ServerIp,ServerUserPWD,ServerUserName : String):BooLean;

implementation

{=================================================================
  功  能: 检测机器是否登入网络
  参  数: 无
  返回值: 成功:  True  失败:  False
  备 注:
  版 本:
     1.0  2005/10/09 09:55:00
=================================================================}
Function CheckMacAttachNet: Boolean;
begin
        Result := False;
        if GetSystemMetrics(SM_NETWORK) <> 0 then
                Result := True;
end;

{=================================================================
  功  能: 返回本机的局域网Ip地址
  参  数: 无
  返回值: 成功:  True, 并填充LocalIp   失败:  False
  备 注:
  版 本:
     1.0  2005/10/09 21:05:00
=================================================================}
function GetLocalIP(var LocalIp: string): Boolean;
var
    HostEnt: PHostEnt;
    Ip: string;
    addr: pchar;
    Buffer: array [0..63] of char;
    GInitData: TWSADATA;
begin
        Result := False;
        try
                WSAStartup(2, GInitData);
                GetHostName(Buffer, SizeOf(Buffer));
                HostEnt := GetHostByName(buffer);
                if HostEnt = nil then Exit;
                addr := HostEnt^.h_addr_list^;
                ip := Format('%d.%d.%d.%d', [byte(addr [0]),
                        byte (addr [1]), byte (addr [2]), byte (addr [3])]);
                LocalIp := Ip;
                Result := True;
        finally
                WSACleanup;
        end;
end;

{=================================================================
  功  能: 通过Ip返回机器名
  参  数:
          IpAddr: 想要得到名字的Ip
  返回值: 成功:  机器名   失败:  ''
  备 注:
    inet_addr function converts a string containing an Internet
    Protocol dotted address into an in_addr.
  版 本:
    1.0  2005/10/09 22:09:00
=================================================================}
function GetNameByIPAddr(IPAddr : String;var MacName:String): Boolean;
var
        SockAddrIn: TSockAddrIn;
        HostEnt: PHostEnt;
        WSAData: TWSAData;
begin
        Result := False;
        if IpAddr = '' then exit;
        try
                WSAStartup(2, WSAData);
                SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
                HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
                if HostEnt <> nil then
                        MacName := StrPas(Hostent^.h_name);
                Result := True;
        finally
                WSACleanup;
        end;
end;


{=================================================================
  功  能: 获取本机的IP地址
  参  数:无
  返回值: 返回本机的IP地址
  备 注:
  版 本:
    1.0  2002/10/02 22:44:00
=================================================================}
function GetIP: string;
type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
var
        phe  : PHostEnt;
        pptr : PaPInAddr;
        Buffer : array [0..63] of char;
        I    : Integer;
        GInitData      : TWSADATA;
begin
        WSAStartup($101, GInitData);
        Result := '';
        GetHostName(Buffer, SizeOf(Buffer));
        phe :=GetHostByName(buffer);
        if phe = nil then Exit;
        pptr := PaPInAddr(Phe^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do
        begin
                result:=StrPas(inet_ntoa(pptr^[I]^));
                Inc(I);
        end;
        WSACleanup;
end;

{=================================================================
  功  能: 返回网络中SQLServer列表
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List  失败 False
  备 注:
  版 本:
    1.0  2005/10/09 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
        i: integer;
        sRetValue: String;
        SQLServer: Variant;
        ServerList: Variant;
begin
        Result := False;
        List.Clear;
        try
                SQLServer := CreateOleObject('SQLDMO.Application');
                ServerList := SQLServer.ListAvailableSQLServers;
                for i := 1 to Serverlist.Count do
                        list.Add (Serverlist.item(i));
                Result := True;
        Finally
                SQLServer  := 0;
                ServerList := 0;
        end;
end;

{=================================================================
  功  能: 返回网络中SQLServer列表
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List  失败 False
  备 注:
  版 本:
    1.0  2005/10/09 22:44:00
=================================================================}
Function GetSQLServerCom(var SQLComboBox: TComboBox): boolean;
var
        i: integer;
        sRetValue: String;
        SQLServer: Variant;
        ServerList: Variant;
        StrTmp:String;
begin
        Result := False;
        SQLComboBox.Clear;
        try
                SQLServer := CreateOleObject('SQLDMO.Application');
                ServerList := SQLServer.ListAvailableSQLServers;
                for i := 1 to Serverlist.Count do
                Begin
                        StrTmp:='';
                        StrTmp:=Serverlist.item(i);
                        SQLComboBox.Items.Add(StrTmp)
                End;
                Result := True;
        Finally
                SQLServer  := 0;
                ServerList := 0;
        end;
end;

{=================================================================
  功  能: 判断Ip协议有没有安装
  参  数: 无
  返回值: 成功:  True 失败: False;
  备 注:   该函数还有问题
  版 本:
     1.0  2005/10/09 21:05:00
=================================================================}
Function IsIPInstalled : boolean;
var
        WSData: TWSAData;
        ProtoEnt: PProtoEnt;
begin
        Result := True;
        try
                if WSAStartup(2,WSData) = 0 then
                begin
                        ProtoEnt := GetProtoByName('IP');
                        if ProtoEnt = nil then
                                Result := False
                end;
        finally
                WSACleanup;
        end;
end;
{=================================================================
  功  能: 返回网络中的共享资源
  参  数:
          IpAddr: 机器Ip
          List: 需要填充的List
  返回值: 成功:  True,并填充List 失败: False;
  备 注:
     WNetOpenEnum function starts an enumeration of network
     resources or existing connections.
     WNetEnumResource function continues a network-resource
     enumeration started by the WNetOpenEnum function.
  版 本:
     1.0  2005/10/10 07:30:00
=================================================================}
Function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
type
        TNetResourceArray = ^TNetResource;//网络类型的数组
Var
        i: Integer;
        Buf: Pointer;
        Temp: TNetResourceArray;
        lphEnum: THandle;
        NetResource: TNetResource;
        Count,BufSize,Res: DWord;
Begin
        Result := False;
        List.Clear;
        if copy(Ipaddr,0,2) <> '//' then
                IpAddr := '//'+IpAddr;   //填充Ip地址信息
        FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
        NetResource.lpRemoteName := @IpAddr[1];//指定计算机名称
        //获取指定计算机的网络资源句柄
        Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
                      RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
        if Res <> NO_ERROR then exit;//执行失败
        while True do//列举指定工作组的网络资源
        begin
                Count := $FFFFFFFF;//不限资源数目
                BufSize := 8192;//缓冲区大小设置为8K
                GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
                //获取指定计算机的网络资源名称
                Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
                if Res = ERROR_NO_MORE_ITEMS then break;//资源列举完毕
                if (Res <> NO_ERROR) then Exit;//执行失败
                Temp := TNetResourceArray(Buf);
                for i := 0 to Count - 1 do
                begin
                        //获取指定计算机中的共享资源名称,+2表示删除"//",
                        //如//192.168.0.1 => 192.168.0.1
                        List.Add(Temp^.lpRemoteName + 2);
                        Inc(Temp);
                end;
        end;
        Res := WNetCloseEnum(lphEnum);//关闭一次列举
        if Res <> NO_ERROR then exit;//执行失败
        Result := True;
        FreeMem(Buf);
End;

{=================================================================
  功  能: 返回网络中的工作组
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List 失败: False;
  备  注:
  版  本:
     1.0  2005/10/10 08:00:00
=================================================================}
Function GetGroupList( var List : TStringList ) : Boolean;
type
        TNetResourceArray = ^TNetResource;//网络类型的数组
Var
        NetResource: TNetResource;
        Buf: Pointer;
        Count,BufSize,Res: DWORD;
        lphEnum: THandle;
        p: TNetResourceArray;
        i,j: SmallInt;
        NetworkTypeList: TList;
Begin
        Result := False;
        NetworkTypeList := TList.Create;
        List.Clear;
        //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
        Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                       RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
        if Res <> NO_ERROR then exit;//Raise Exception(Res);//执行失败
        //获取整个网络中的网络类型信息
        Count := $FFFFFFFF;//不限资源数目
        BufSize := 8192;//缓冲区大小设置为8K
        GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
            //资源列举完毕                    //执行失败
        if ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR ) then Exit;
        P := TNetResourceArray(Buf);
        for i := 0 to Count - 1 do//记录各个网络类型的信息
        begin
                NetworkTypeList.Add(p);
                Inc(P);
        end;
        Res := WNetCloseEnum(lphEnum);//关闭一次列举

        if Res <> NO_ERROR then exit;

        for j := 0 to NetworkTypeList.Count-1 do //列出各个网络类型中的所有工作组名称
        begin//列出一个网络类型中的所有工作组名称
                NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息
                //获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
                Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                        RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);

                if Res <> NO_ERROR then break;//执行失败

                while true do//列举一个网络类型的所有工作组的信息
                begin
                        Count := $FFFFFFFF;//不限资源数目
                        BufSize := 8192;//缓冲区大小设置为8K
                        GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
                        //获取一个网络类型的文件资源信息,
                        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
                                //资源列举完毕                   //执行失败
                        if ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR)  then break;
                        P := TNetResourceArray(Buf);
                        for i := 0 to Count - 1 do//列举各个工作组的信息
                        begin
                                List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称
                                Inc(P);
                        end;
                end;
                Res := WNetCloseEnum(lphEnum);//关闭一次列举
                if Res <> NO_ERROR then break;//执行失败
        end;
        Result := True;
        FreeMem(Buf);
        NetworkTypeList.Destroy;
End;

{=================================================================
  功  能: 列举工作组中所有的计算机
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List 失败: False;
  备  注:
  版  本:
     1.0  2005/10/10 08:00:00
=================================================================}
Function GetUsers(GroupName: string; var List: TStringList): Boolean;
type
        TNetResourceArray = ^TNetResource;//网络类型的数组
Var
        i: Integer;
        Buf: Pointer;
        Temp: TNetResourceArray;
        lphEnum: THandle;
        NetResource: TNetResource;
        Count,BufSize,Res: DWord;
begin
        Result := False;
        List.Clear;
        FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
        NetResource.lpRemoteName := @GroupName[1];//指定工作组名称
        NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
        NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
        NetResource.dwScope := RESOURCETYPE_DISK;//列举文件资源信息
        //获取指定工作组的网络资源句柄
        Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                        RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);

        if Res <> NO_ERROR then Exit; //执行失败

        while True do//列举指定工作组的网络资源
        begin
                Count := $FFFFFFFF;//不限资源数目
                BufSize := 8192;//缓冲区大小设置为8K
                GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
                //获取计算机名称
                Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);

                if Res = ERROR_NO_MORE_ITEMS then break;//资源列举完毕

                if (Res <> NO_ERROR) then Exit;//执行失败
                Temp := TNetResourceArray(Buf);

                for i := 0 to Count - 1 do//列举工作组的计算机名称
                begin
                        //获取工作组的计算机名称,+2表示删除"//",如//wangfajun=>wangfajun
                        List.Add(Temp^.lpRemoteName + 2);
                        inc(Temp);
                end;
        end;
        Res := WNetCloseEnum(lphEnum);//关闭一次列举
        if Res <> NO_ERROR then exit;//执行失败
        Result := True;
        FreeMem(Buf);
end;

{=================================================================
  功  能: 列举所有网络类型
  参  数:
          List: 需要填充的List
  返回值: 成功:  True,并填充List 失败: False;
  备 注:
  版 本:
     1.0  2005/10/10 08:54:00
=================================================================}
Function GetNetList(var List: Tstringlist): Boolean;
type
        TNetResourceArray = ^TNetResource;//网络类型的数组
Var
        p: TNetResourceArray;
        Buf: Pointer;
        i: SmallInt;
        lphEnum: THandle;
        NetResource: TNetResource;
        Count,BufSize,Res: DWORD;
begin
        Result := False;
        List.Clear;
        Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                      RESOURCEUSAGE_CONTAINER, Nil,lphEnum);

        if Res <> NO_ERROR then exit;//执行失败
        Count := $FFFFFFFF;//不限资源数目
        BufSize := 8192;//缓冲区大小设置为8K
        GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);//获取网络类型信息
                //资源列举完毕                    //执行失败
        if ( Res = ERROR_NO_MORE_ITEMS ) or (Res <> NO_ERROR ) then Exit;
                P := TNetResourceArray(Buf);
end;

{=================================================================
  功  能: 映射网络驱动器
  参  数:
          NetPath: 想要映射的网络路径
          Password: 访问密码
          Localpath 本地路径
  返回值: 成功:  True  失败: False;
  备 注:
  版 本:
     1.0  2005/10/10 09:24:00
=================================================================}
Function NetAddConnection(NetPath: Pchar; PassWord: Pchar
                          ;LocalPath: Pchar): Boolean;
var
        Res: Dword;
begin
        Result := False;
        Res := WNetAddConnection(NetPath,Password,LocalPath);
        if Res <> No_Error then exit;
        Result := True;
end;

{=================================================================
  功  能:  检测网络状态
  参  数:
          IpAddr: 被测试网络上主机的IP地址或名称,建议使用Ip
  返回值: 成功:  True  失败: False;
  备 注:
  版 本:
     1.0  2005/10/10 09:40:00
=================================================================}

Function CheckNet(IpAddr: string): Boolean;
type
        PIPOptionInformation = ^TIPOptionInformation;
        TIPOptionInformation = packed record
                TTL:         Byte;      // Time To Live (used for traceroute)
                TOS:         Byte;      // Type Of Service (usually 0)
                Flags:       Byte;      // IP header flags (usually 0)
                OptionsSize: Byte;      // Size of options data (usually 0, max 40)
                OptionsData: PChar;     // Options data buffer
        end;

        PIcmpEchoReply = ^TIcmpEchoReply;
        TIcmpEchoReply = packed record
                Address:       DWord;                // replying address
                Status:        DWord;                // IP status value (see below)
                RTT:           DWord;                // Round Trip Time in milliseconds
                DataSize:      Word;                 // reply data size
                Reserved:      Word;
                Data:          Pointer;              // pointer to reply data buffer
                Options:       TIPOptionInformation; // reply options
        end;

        TIcmpCreateFile = function: THandle; stdcall;
        TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
        TIcmpSendEcho = function(
                IcmpHandle:          THandle;
                DestinationAddress:  DWord;
                RequestData:         Pointer;
                RequestSize:         Word;
                RequestOptions:      PIPOptionInformation;
                ReplyBuffer:         Pointer;
                ReplySize:           DWord;
                Timeout:             DWord
        ): DWord; stdcall;

const
        Size = 32;
        TimeOut = 1000;
var
        wsadata: TWSAData;
        Address: DWord;                     // Address of host to contact
        HostName, HostIP: String;           // Name and dotted IP of host to contact
        Phe: PHostEnt;                      // HostEntry buffer for name lookup
        BufferSize, nPkts: Integer;
        pReqData, pData: Pointer;
        pIPE: PIcmpEchoReply;               // ICMP Echo reply buffer
        IPOpt: TIPOptionInformation;        // IP Options for packet to send
const
        IcmpDLL = 'icmp.dll';
var
        hICMPlib: HModule;
        IcmpCreateFile : TIcmpCreateFile;
        IcmpCloseHandle: TIcmpCloseHandle;
        IcmpSendEcho:    TIcmpSendEcho;
        hICMP: THandle;                     // Handle for the ICMP Calls
begin
        // initialise winsock
        Result:=True;
        if WSAStartup(2,wsadata) <> 0 then begin
                Result:=False;
                halt;
        end;
        // register the icmp.dll stuff
        hICMPlib := loadlibrary(icmpDLL);
        if hICMPlib <> 0 then
        begin
                @ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');
                @IcmpCloseHandle:= GetProcAddress(hICMPlib, 'IcmpCloseHandle');
                @IcmpSendEcho:= GetProcAddress(hICMPlib, 'IcmpSendEcho');

                if (@ICMPCreateFile = Nil) or (@IcmpCloseHandle = Nil) or (@IcmpSendEcho = Nil) then
                begin
                        Result:=False;
                        halt;
                end;
                hICMP := IcmpCreateFile;

                if hICMP = INVALID_HANDLE_VALUE then
                begin
                        Result:=False;
                        halt;
                end;
        end else begin
                Result:=False;
                halt;
        end;

        // ------------------------------------------------------------

        Address := inet_addr(PChar(IpAddr));
        if (Address = INADDR_NONE) then
        begin
                Phe := GetHostByName(PChar(IpAddr));
                if Phe = Nil then Result:=False
        else begin
                Address := longint(plongint(Phe^.h_addr_list^)^);
                HostName := Phe^.h_name;
                HostIP := StrPas(inet_ntoa(TInAddr(Address)));
        end;
        end
        else begin
                Phe := GetHostByAddr(@Address, 4, PF_INET);
                if Phe = Nil then Result:=False;
        end;

        if Address = INADDR_NONE then
        begin
                Result:=False;
        end;
        // Get some data buffer space and put something in the packet to send
        BufferSize := SizeOf(TICMPEchoReply) + Size;
        GetMem(pReqData, Size);
        GetMem(pData, Size);
        GetMem(pIPE, BufferSize);
        FillChar(pReqData^, Size, $AA);
        pIPE^.Data := pData;

        // Finally Send the packet
        FillChar(IPOpt, SizeOf(IPOpt), 0);
        IPOpt.TTL := 64;
        NPkts := IcmpSendEcho(hICMP, Address, pReqData, Size,
                        @IPOpt, pIPE, BufferSize, TimeOut);
        if NPkts = 0 then Result:=False;

        // Free those buffers
        FreeMem(pIPE); FreeMem(pData); FreeMem(pReqData);

        // --------------------------------------------------------------
        IcmpCloseHandle(hICMP);
        FreeLibrary(hICMPlib);
        // free winsock
        if WSACleanup <> 0 then Result:=False;
end;


{=================================================================
  功  能:  检测计算机是否上网
  参  数:  无
  返回值:  成功:  True  失败: False;
  备 注:   uses Wininet
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
function InternetConnected: Boolean;
const
        // local system uses a modem to connect to the Internet.
        INTERNET_CONNECTION_MODEM      = 1;
        // local system uses a local area network to connect to the Internet.
        INTERNET_CONNECTION_LAN        = 2;
        // local system uses a proxy server to connect to the Internet.
        INTERNET_CONNECTION_PROXY      = 4;
        // local system's modem is busy with a non-Internet connection.
        INTERNET_CONNECTION_MODEM_BUSY = 8;
var
        dwConnectionTypes : DWORD;
begin
        dwConnectionTypes := INTERNET_CONNECTION_MODEM+ INTERNET_CONNECTION_LAN
                + INTERNET_CONNECTION_PROXY;
        Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;

{=================================================================
  功  能:  处理登陆共享目录错误信息
  参  数:  无
  返回值:  无
  备 注:   uses Wininet
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
procedure CallNetExtError;
var
        ErrorCode: Cardinal;
        ErrBuf,NameBuf: string;
        ShowMsg: string;
begin
        SetLength(ErrBuf,MAX_PATH);
        SetLength(NameBuf,MAX_PATH);
        if WNetGetLastError(ErrorCode,PChar(ErrBuf),MAX_PATH+1,PChar(NameBuf),MAX_PATH+1) = NO_ERROR then
        begin
                ShowMsg := 'Error Code:' + IntToStr(ErrorCode) + #13#10;
                ShowMsg := ShowMsg + 'Error String:' + ErrBuf + #13#10;
                ShowMsg := ShowMsg + 'Error Provider:' + NameBuf;
                ShowMessage(ShowMsg);
        end;
end;


{=================================================================
  功  能:  处理登陆共享目录
  参  数:  ShareDir共享目录,
           ServerIp服务器IP,
           ServerUserPWD服务器密码,
           ServerUserName服务器登录名
  返回值:  成功:  True  失败: False;
  备 注:   uses WinLoginNet
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
function WinLoginNet(ShareDir,ServerIp,ServerUserPWD,ServerUserName : String):BooLean;
var
    NR: NETRESOURCE;
    Ret: DWORD;
    S: string;
    NetDir:Integer;
    f: TSearchRec;
begin
    NetDir:=FindFirst(ShareDir+'*.log', faAnyFile, f);
    if NetDir<>0 then
    begin
         S := '//'+ServerIp;
         NR.dwType := RESOURCETYPE_ANY;
         NR.lpLocalName := nil;
         NR.lpRemoteName := PChar(S);
         NR.lpProvider := nil;
         //调用WNetAddConnection2,此函数在windows单元中,建立永久连接
         Ret := WNetAddConnection2(NR,PChar(ServerUserPWD),PChar(ServerUserName),CONNECT_UPDATE_PROFILE);

         if Ret <> NO_ERROR then
         begin
           if Ret <> 1208 then RaiseLastWin32Error
           else CallNetExtError;
         end;
    end;
end;


procedure ExecuteSql(var Query: TADOQuery;SQL:String);
begin
        try
                Query.Active:=False;
                Query.SQL.Clear;
                Query.SQL.Add(SQL);
                Query.ExecSQL;
        except

        end;
end;

{=================================================================
  功  能:  获取网络中SQLServer中数据库名列表
  参  数:  Query(数据集)
  返回值:  TStringList(数据库名列表)
  备 注:   根据use master select * from dbo.sysdatabases获取
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
Function GetDataBaseName(var Query: TADOQuery): TStringList;
Begin

End;


{=================================================================
  功  能:  获取网络中SQLServer数据库中数据表名列表
  参  数:  Query(数据集)
  返回值:  TStringList(数据库名列表)
  备 注:   根据select * from sysobjects where xtype='U'获取
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
Function GetTableName(var Query: TADOQuery): TStringList;
Begin

End;


{=================================================================
  功  能:  获取网络中SQLServer中数据库表的列名、类型和长度 列表
  参  数:  Query(数据集)
           TBName(表名)
           nType(参数:name--列名 Type--类型 Length--长度)
  返回值:  TStringList(数据库名列表)
  备 注:   根据select name (or Type or Length)  from syscolumns a ,sysobjects b
               where a.id=b.id and b.xtype='U' and b.name='表名参数'获取数据
  版 本:
     1.0  2005/10/10 13:33:00
=================================================================}
Function GetColValues(var Query: TADOQuery;TBName:String;nType:String): TStrings;
var List : TStringList;
    SQL  : String;
Begin
        List:=TStringList.Create;
        SQL:='';
        SQL:='select a.'+ nType +' from syscolumns a ,sysobjects b ';
        SQL:=SQL + ' where a.id=b.id and b.xtype=''U'' and b.name=''';
        SQL:=SQL + TBName + '''';
       
        Try
                List.Clear;
                Query.Active:=false;
                Query.SQL.Clear;
                Query.SQL.Add(SQL);
                Query.Open;
                while Not Query.Eof do
                Begin
                        List.Add(Query.FieldByName(nType).Value);
                        Query.Next;
                End;
                Result:=List;
        Finally
                //List.Free;
                Query.Close;
        End;
ENd;


end.

Linux 网络编程常用函数详解

sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket 表头文件 #include #incl...
  • sin0803
  • sin0803
  • 2015年07月12日 14:16
  • 506

Python优秀函数库集锦(二)

源地址:https://github.com/jobbole/awesome-python-cn 伯乐在线地址:http://python.jobbole.com/84464/环境管理管理 Pyth...
  • sinat_29508201
  • sinat_29508201
  • 2016年04月14日 16:25
  • 3537

webservice系列2---javabean&handler

摘要:本节主要介绍以下两点,1.带javabean的webservice的开发和调用 2.handler的简单介绍及使用 1.引言 在之前的一篇博客 webservice系列1---基于...
  • xuxu198899223
  • xuxu198899223
  • 2013年05月08日 15:00
  • 858

QTP之excel操作函数整理

*****************************************************   'Function:读Excel中的某个值 'Input parameter:  ...
  • lmxr133
  • lmxr133
  • 2016年01月26日 16:33
  • 611

libsocket网络函数库

自己写的基于事件驱动模型的网络函数库,使用非常方便。 当有数据可读时,系统就会调用用户注册的函数。 当有新的客户连接时,系统就会调用用户注册的函数。 源码下载地址:https://sourc...
  • zjhsucceed_329
  • zjhsucceed_329
  • 2014年03月27日 22:32
  • 2657

10.函数库-静态库和共享库

10.函数库-静态库和共享库 函数库是指由若干目标文件按某种格式构成的集合,它分为两种类型:静态库和共享库。应用程序在链接静态库时是将所需的静态库函数嵌入至可执行文件中(并非全部静态库),而在链接共...
  • notbaron
  • notbaron
  • 2016年10月22日 23:05
  • 30396

c语言编程基础------0.4GNU C 函数库(glibc)

这篇文章主要来自维基百科 GNU C函式庫 (重定向自Glibc) GNU C函式庫 初始版本 1987年[1] 穩定版本 2.2...
  • wujiangguizhen
  • wujiangguizhen
  • 2015年02月05日 15:04
  • 1811

EL表达式(函数库)

由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的E...
  • abcABC123454321
  • abcABC123454321
  • 2016年08月15日 14:10
  • 175

C语言标准函数库

http://blog.csdn.net/pipisorry/article/details/30398049C语言标准头 断言 字符类测试 (部分)库函数抛出的错误代码 浮点数运算...
  • pipisorry
  • pipisorry
  • 2014年06月13日 01:19
  • 1218

【C】初学习之库函数——通用的实用工具<stdlib.h>之伪随机序列生成函数

rand函数和srand函数都可以用来生成伪随机数。(用于模拟程序和玩游戏程序) (1)rand函数——随机数发生器 每次调用rand函数,会返回一个0—RAND_MAX(中定义的宏)的数字。ra...
  • allen_qt
  • allen_qt
  • 2017年08月25日 13:55
  • 68
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络函数库
举报原因:
原因补充:

(最多只允许输入30个字)