[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] WIN7 64位系统VBS无法正常ADODB.Connection的问题以及其他一些疑问

  1. MdbAddr = "\\win-pc\vbs\1.mdb"
  2. Miaoshu = 1 '定义秒数等于1
  3. Shijian = Miaoshu*1000 '间隔时间等1乘1000毫秒
  4. Dim WMI'定义变量
  5. Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  6. '建立wmi服务连接。
  7. '完整格式是:"winmgmts:[{SecuritySettings}!][\\ComputerName][\Namespace][:ClassName][.KeyProperty='Value']" winmgmts:"是前缀, 表示为WMI服务;第二部分用来验证权限和假冒级别的;
  8. '获取计算机名
  9. Set colComputers = WMI.ExecQuery("Select * from Win32_ComputerSystem")
  10. For Each objComputer in colComputers
  11.     PcName = objComputer.Name
  12. Exit For
  13. Next
  14. '查找活动连接
  15. Set colItems = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled='TRUE'")
  16. For Each objItem In colItems
  17.     NetName =  Replace(objItem.Description,"/","_") '获取网卡名
  18.     MacAddr = objItem.MacAddress '获取mac地址
  19. For Each objAddress in objItem.IPAddress
  20. If objAddress <> "" then
  21. IpAddr = objAddress '获取ip地址
  22. Exit For
  23. End If
  24. Next
  25. Next
  26. Set colItems = Nothing '释放对象colItems
  27. UserName= CreateObject("wscript.network").username
  28. '将控制权传递给函数Network
  29. Call Network(Name)
  30. Function Network(Names)
  31.   '判断数据库文件是否存在
  32. If CreateObject("Scripting.FileSystemObject").FileExists(MdbAddr) Then
  33. 'MsgBox "数据库文件已经存在"
  34. Else
  35. 'MsgBox "数据库文件不存在,创建数据库"
  36. '创建数据库
  37. CreateObject("ADOX.Catalog").Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & MDBaddr
  38. '创建表以及字段
  39. Set connObj = CreateObject("ADODB.Connection")
  40. connObj.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & MdbAddr
  41. connObj.Execute "CREATE TABLE Speed(计算机名 varchar(255),用户名 varchar(255),IP地址 varchar(255),下载速度 varchar(255),上传速度 varchar(255),时间 varchar(255),MAC地址 varchar(255),网卡名称 varchar(255))"
  42. connObj.Close
  43. Set connObj = Nothing
  44. End If
  45. '循环开始
  46. Do
  47. Dim A
  48. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& NetName &"'")
  49. For Each B In A
  50.     R1 = B.BytesReceivedPersec '接收包
  51.     S1 = B.BytesSentPersec '发送包
  52.     T1 = B.BytesTotalPersec '总流量
  53.     If T0 ="" Then :T0 = B.BytesTotalPersec :End If
  54. Next
  55. Set A = Nothing '释放A的对象
  56. WScript.Sleep(Shijian) '延迟时间获取数据
  57. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& NetName &"'")
  58. For Each B In A
  59.     R2 = B.BytesReceivedPersec
  60.     S2 = B.BytesSentPersec
  61.     T2 = B.BytesTotalPersec
  62. Next
  63. Set A = Nothing
  64. Down=CheckSize((R2-R1)/Miaoshu) &"/s" '计算下载速率
  65. Up=CheckSize((S2-S1)/Miaoshu) &"/s" '计算上传速率
  66. '数据库更新
  67. Dim rsObj
  68. Set connObj = CreateObject("ADODB.Connection") '前面虽然已经定义,但是后来释放了
  69. connObj.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & MdbAddr
  70.      connObj.Open
  71. Set rsObj = CreateObject("ADODB.RecordSet") '数据的操作,主要靠的是ADODB.RecordSet对象
  72. rsObj.Open "select * FROM Speed where MAC地址 = '"& MacAddr & "'", connObj, 1, 3
  73. If Not rsObj.Eof Then
  74. 'MsgBox rsObj("MAC地址")&"已有数据,更新信息"
  75. rsObj("计算机名") = pcname
  76. rsObj("用户名") = username
  77. rsObj("IP地址") = ipaddr
  78. rsObj("下载速度") = down
  79. rsObj("上传速度") = up
  80. rsObj("时间") = Now()
  81. rsObj.Update
  82. rsObj.Close
  83. connObj.Close
  84. Else
  85. 'MsgBox "没有数据,添加新数据"
  86. rsObj.Close
  87. connObj.Close
  88. connObj.open
  89. rsObj.Open "select * FROM Speed", connObj, 1, 3
  90. rsObj.AddNew
  91. If Not rsObj.Eof Then
  92. rsObj("计算机名") = PcName
  93. rsObj("用户名") = UserName
  94. rsObj("IP地址") = IpAddr
  95. rsObj("下载速度") = Down
  96. rsObj("上传速度") = Up
  97. rsObj("时间") = Now()
  98. rsObj("MAC地址") = MacAddr
  99. rsObj("网卡名称") = NetName
  100. rsObj.Update
  101. rsObj.Close
  102. connObj.Close
  103. End If
  104. End If
  105. Set rsObj = Nothing
  106. Set connObj = Nothing
  107. Loop
  108. End Function
  109. '函数checksize
  110. Function CheckSize(SZ)
  111. On Error Resume Next
  112. If SZ => 1073741824 Then
  113.    SZ = FormatNumber(SZ/1073741824) & " GB"
  114.    ElseIf SZ => 1048576 Then
  115.    SZ = FormatNumber(SZ/1048576) & " MB"
  116.    ElseIf SZ => 1024 Then
  117.    SZ = FormatNumber(SZ/1024) & " KB"
  118. Else
  119.    SZ = SZ & " B"
  120. End If
  121. CheckSize=Right("      " & SZ,10)
  122. End Function
复制代码
最新刚学习vbs脚本。在论坛找了几个实例,修理了一下,让脚本更符合自己的需求使用。
基本大体是完成了(有幸得到论坛高手指导),不知道有什么不合理的地方。希望各位大侠帮忙指正一下。

不过该脚本在windows 7 64位的系统下面运行会出错,出错提示是:
脚本:        E:\1.vbs
行:                79
字符:        6
错误:        未找到提供程序。该程序可能未正确安装。
代码:        800A0E7A
源:           ADODB.Connection

在论坛提过一次问题,但是@yu2n 大佬说他的测试环境没有问题。也看了不少类似问题的帖子。不过大部分都是针对于ASP IIS上面的,少有vbs提及。

在此想问各位高手、英雄好汉们几个疑问:
1、win7 64无法ADODB.Connection的这个问题;
2、vbs如何用批处理的结果(例如批处理中的%username%等比较方便的获取系统信息的命令);
3、上面的脚本是不规范或者不合理的地方?
小弟在此谢过各位了!

1、win7 64无法ADODB.Connection的这个问题;
  1. Win7 x64 操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接。
  2. 解决:1. 在MSHTA中使用VBS编程;2. 使用VBA编程
复制代码
2、vbs如何用批处理的结果(例如批处理中的%username%等比较方便的获取系统信息的命令);
  1. 'WhoAmI
  2. Msgbox CreateObject("WScript.Shell").ExpandenVironmentStrings("%COMPUTERNAME%\%USERNAME%")
复制代码
3、上面的脚本是不规范或者不合理的地方?
  1. 1. 程序语法结构不整洁
  2. 2. 变量 NetName 与 Name
  3. 3. SQL插入、更新操作尽量使用Insert Into、Update语句。这里可以不用ADODB.RecordSet,使用ADODB.Connection的objConn.Execute(strSql)即可。
  4. 4. 猜测楼主是想要这个程序实现,将多台电脑的网卡流量状态实时写入这个Windows共享的Access数据库,这实在不是什么好主意……
复制代码
参考:
win7 64位环境运行程序出现提示microsoft.jet.oledb4.0未注册
http://answers.microsoft.com/zh- ... d-9bbc-d91759839fe1
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 2# yu2n


    4. 猜测楼主是想要这个程序实现,将多台电脑的网卡流量状态实时写入这个Windows共享的Access数据库,这实在不是什么好主意……

确实不是好注意,今天测试了一下发现仅有26台pc可以正常使用,其他的再想想入就会提示数据库被xxx占用了。。。
小弟才疏学,没接触过编程,所以没什么好办法啊。

TOP

回复 3# 437153
方法1:可以考虑在服务器主机安装SQL Server。客户机使用ADO直接写数据到SQL Server。
方法2:可以考虑在服务器主机安装HTTP Server + SQL Server。客户机直接POST数据到HTTP Server。(适用于对安全性、大流量、内外网访问有要求的场景)
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 4# yu2n


    多谢指导。感激不尽

TOP

返回列表