delphi实现映射和断开网络驱动器

type   TNetDiskMapper=class

  private
     FNetResource: TNetResource;
     FUserName,FPassWord:PWideChar;
  public
     constructor Create(DriveName,ShareURI,UserName,Password:PWideChar);
     destructor  Destory();
     function ConnectDiskMap:boolean;
     function disConnectDiskMap:boolean;
end;


var NetDiskMap: TNetDiskMapper;


{ TNetDiskMapper }

constructor TNetDiskMapper.Create(DriveName, ShareURI, UserName,
  Password: PWideChar);
begin
  FNetResource.dwType := RESOURCETYPE_DISK{磁盘资源};
  FNetResource.lpLocalName :=driveName { 指定本地设备 };
  FNetResource.lpRemoteName := PChar(ShareURI) { 指定远程网络名 };
  FNetResource.lpProvider := nil { 指定提供网络资源的供应商。如为空,则表示供应商未知。 };
  FUserName:=UserName { 远程资源的用户名 };
  FPassword:=Password { 远程资源的口令 };
end;

function TNetDiskMapper.ConnectDiskMap: boolean;
begin

{ WNetAddConnection2 的参数说明:

    dwFlags标志位用于指定登录时是否重新连接(0时表示不重新连接,CCONNECT_UPDATE_PROFILE登录时重新连接)。
}


   result:=false;
   case WNetAddConnection2(FNetResource,FPassword,FUserName,CONNECT_UPDATE_PROFILE) of
       NO_ERROR:begin result:=true; ShowMessage('映射成功') ; end;
       ERROR_ACCESS_DENIED: showmessage('Access is denied.');
       ERROR_ALREADY_ASSIGNED:ShowMessage('The device specified in the lpLocalName parameter is already connected.');
       ERROR_BAD_DEV_TYPE:    ShowMessage('The device type and the resource type do not match.');
       ERROR_BAD_DEVICE:    ShowMessage('The value specified in lpLocalName is invalid');
       ERROR_BAD_NET_NAME: ShowMessage('The value specified in the lpRemoteName parameter is not valid or cannot be located.');
       ERROR_BAD_PROFILE :    ShowMessage('    The user profile is in an incorrect format.')   ;
       ERROR_CANNOT_OPEN_PROFILE :    ShowMessage(' The system is unable to open the user profile to process persistent connections.    ');
       ERROR_DEVICE_ALREADY_REMEMBERED    : ShowMessage('An entry for the device specified in lpLocalName is already in the user profile.') ;
       ERROR_EXTENDED_ERROR    :ShowMessage('A network-specific error occurred. To get a description of the error, use the WNetGetLastError function. ');
       ERROR_INVALID_PASSWORD:ShowMessage('    The specified password is invalid. ');
       ERROR_NO_NET_OR_BAD_PATH:ShowMessage(' The operation cannot be performed because either a network component is not started or the specified name cannot be used.');
       ERROR_NO_NETWORK:ShowMessage('    The network is not present. ');
       else
       ShowMessage('其他意外终止!');
   end;
end;



destructor TNetDiskMapper.Destory;
begin
  disConnectDiskMap;
end;

function TNetDiskMapper.disConnectDiskMap: boolean;
begin
    if NO_ERROR= WNetCancelConnection2(FNetResource.lpLocalName,CONNECT_UPDATE_PROFILE,True) then
    begin
         result:=true;
    end
    else
       result:=false;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
//映射网络驱动器
    NetDiskMap:=TNetDiskMapper.Create('Z:','\\127.0.0.1\2016年安规调考',nil,nil);
    showmessage(booltostr(NetDiskMap.ConnectDiskMap,true));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//断开网络驱动器

if assigned(NetDiskMap) and ( NetDiskMap<>nil) then showmessage(booltostr(NetDiskMap.disConnectDiskMap,true)); end;

 

转载于:https://www.cnblogs.com/yzryc/p/6292655.html

一个使用ADO连接池的示例,演示了TADOStoredProc动态参数的使用,带重连机制 =================== unit UnitDemo; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; //数据库服务器 gDBServer: String = '127.0.0.1'; //数据库名称 gDBName: String = 'master'; //数据库用户名 gDBUser: String = 'sa'; //密码 gDBPass: String = '2001'; implementation {$R *.dfm} uses ADODB, UnitADOConnectionPool; const CreateSQL = 'create procedure TestMyPool (@type sysname) '#13#10+ 'as'#13#10+ 'select * from sysobjects where xtype=@type'#13#10+ 'return @@rowcount'; DeleteSQL = 'if Exists(select 1 from sysobjects where xtype=N''P'' and name=N''TestMyPool'')'#13#10+ ' drop procedure TestMyPool'; var gPoolMan: TADOConnPoolMan = Nil; procedure TForm2.Button1Click(Sender: TObject); var ADOObject:TADOConnPoolObject; ADOStoredProc:TADOStoredProc; Running :Integer; I: Integer; begin //取得一个存储过程资源(含一数据库有效连接) ADOObject := gPoolMan.CreateSP('TestMyPool'); if ADOObject = Nil then //取得资源失败 Exit; try ADOStoredProc := ADOObject.ExecObject as TADOStoredProc; Running := 2;//允许重试(两次)操作,以便在操作失败之后达到重连 while Running>0 do begin Dec(Running); if ADOObject.NeedRefresh then begin//判断是否有重连标志(比如数据库断开等,可能需要进行重连) if Not ADOObject.Reconnect then Exit; ADOObject.NeedRefresh := Not ADOStoredProc.Parameters.Refresh; if ADOObject.NeedRefresh then Exit; end; for I := 1(*Zero is the *Result* Parameter*) to ADOStoredProc.Parameters.Count - 1 do begin //========================= //传递参数 ADOStoredProc.Parameters.Items[I].Value := 'U'; //========================= end; if Running 0 then try //执行存储过程 ADOStoredProc.Open; //执行存储过程成功,退出循环进入后续的数据处理 break; except On E:Exception do begin //执行失败非程序级的异常通常有两种可能: //1.数据库连接断开 //2.自适合的参数传递当中可能存储过程已更新,参与不一致 //设置重连标志 ADOObject.NeedRefresh := True; //=================== //这里记录数据库操作失败日志 //=================== end; end; Exit; end; //========================== //从ADOStoredProc当中读取记录 ShowMessage(IntToStr(ADOStoredProc.Parameters.ParamByName('Result').Value)); //========================== //关闭存储对象的资源 ADOStoredProc.Close; finally //调用结束,释放资源 ADOObject.Free; end; end; procedure TForm2.FormCreate(Sender: TObject); var ADOConn:TADOConnection; begin (****************BEGIN*******************) (*注:仅为测试准备 *) //初始化测试环境 ADOConn := Nil; if Not TADOConnPoolMan.ConnectADO( gDBServer,gDBUser,gDBPass,gDBName,true,ADOConn) then Exit; try ADOConn.Execute(DeleteSQL); ADOConn.Execute(CreateSQL); finally try ADOConn.Close; except end; ADOConn.Free; end; (*****************END********************) //初始化连接池 gPoolMan := TADOConnPoolMan.Create(gDBServer,gDBUser,gDBPass,gDBName,true); end; procedure TForm2.FormDestroy(Sender: TObject); var ADOConn:TADOConnection; begin //释放连接池 if Assigned(gPoolMan) then gPoolMan.Free; (****************BEGIN*******************) (*注:仅为测试准备 *) //清理测试环境 ADOConn := Nil; if Not TADOConnPoolMan.ConnectADO( gDBServer,gDBUser,gDBPass,gDBName,true,ADOConn) then Exit; try ADOConn.Execute(DeleteSQL); finally try ADOConn.Close; except end; ADOConn.Free; end; (*****************END********************) end; end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值