标题: [问题求助] WIN7 64位系统VBS无法正常ADODB.Connection的问题以及其他一些疑问 [打印本页]
作者: 437153 时间: 2014-9-2 13:57 标题: WIN7 64位系统VBS无法正常ADODB.Connection的问题以及其他一些疑问
- MdbAddr = "\\win-pc\vbs\1.mdb"
- Miaoshu = 1 '定义秒数等于1
- Shijian = Miaoshu*1000 '间隔时间等1乘1000毫秒
-
-
- Dim WMI'定义变量
-
- Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
- '建立wmi服务连接。
- '完整格式是:"winmgmts:[{SecuritySettings}!][\\ComputerName][\Namespace][:ClassName][.KeyProperty='Value']" winmgmts:"是前缀, 表示为WMI服务;第二部分用来验证权限和假冒级别的;
-
- '获取计算机名
- Set colComputers = WMI.ExecQuery("Select * from Win32_ComputerSystem")
- For Each objComputer in colComputers
- PcName = objComputer.Name
- Exit For
- Next
-
- '查找活动连接
- Set colItems = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled='TRUE'")
- For Each objItem In colItems
- NetName = Replace(objItem.Description,"/","_") '获取网卡名
- MacAddr = objItem.MacAddress '获取mac地址
- For Each objAddress in objItem.IPAddress
- If objAddress <> "" then
- IpAddr = objAddress '获取ip地址
- Exit For
- End If
- Next
- Next
- Set colItems = Nothing '释放对象colItems
- UserName= CreateObject("wscript.network").username
-
-
- '将控制权传递给函数Network
- Call Network(Name)
-
- Function Network(Names)
- '判断数据库文件是否存在
- If CreateObject("Scripting.FileSystemObject").FileExists(MdbAddr) Then
- 'MsgBox "数据库文件已经存在"
- Else
- 'MsgBox "数据库文件不存在,创建数据库"
- '创建数据库
- CreateObject("ADOX.Catalog").Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & MDBaddr
- '创建表以及字段
- Set connObj = CreateObject("ADODB.Connection")
- connObj.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & MdbAddr
- connObj.Execute "CREATE TABLE Speed(计算机名 varchar(255),用户名 varchar(255),IP地址 varchar(255),下载速度 varchar(255),上传速度 varchar(255),时间 varchar(255),MAC地址 varchar(255),网卡名称 varchar(255))"
- connObj.Close
- Set connObj = Nothing
- End If
- '循环开始
- Do
- Dim A
- Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& NetName &"'")
- For Each B In A
- R1 = B.BytesReceivedPersec '接收包
- S1 = B.BytesSentPersec '发送包
- T1 = B.BytesTotalPersec '总流量
- If T0 ="" Then :T0 = B.BytesTotalPersec :End If
- Next
- Set A = Nothing '释放A的对象
- WScript.Sleep(Shijian) '延迟时间获取数据
- Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& NetName &"'")
- For Each B In A
- R2 = B.BytesReceivedPersec
- S2 = B.BytesSentPersec
- T2 = B.BytesTotalPersec
- Next
- Set A = Nothing
- Down=CheckSize((R2-R1)/Miaoshu) &"/s" '计算下载速率
- Up=CheckSize((S2-S1)/Miaoshu) &"/s" '计算上传速率
-
- '数据库更新
- Dim rsObj
- Set connObj = CreateObject("ADODB.Connection") '前面虽然已经定义,但是后来释放了
- connObj.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & MdbAddr
- connObj.Open
- Set rsObj = CreateObject("ADODB.RecordSet") '数据的操作,主要靠的是ADODB.RecordSet对象
- rsObj.Open "select * FROM Speed where MAC地址 = '"& MacAddr & "'", connObj, 1, 3
- If Not rsObj.Eof Then
- 'MsgBox rsObj("MAC地址")&"已有数据,更新信息"
- rsObj("计算机名") = pcname
- rsObj("用户名") = username
- rsObj("IP地址") = ipaddr
- rsObj("下载速度") = down
- rsObj("上传速度") = up
- rsObj("时间") = Now()
- rsObj.Update
- rsObj.Close
- connObj.Close
- Else
- 'MsgBox "没有数据,添加新数据"
- rsObj.Close
- connObj.Close
- connObj.open
- rsObj.Open "select * FROM Speed", connObj, 1, 3
- rsObj.AddNew
- If Not rsObj.Eof Then
- rsObj("计算机名") = PcName
- rsObj("用户名") = UserName
- rsObj("IP地址") = IpAddr
- rsObj("下载速度") = Down
- rsObj("上传速度") = Up
- rsObj("时间") = Now()
- rsObj("MAC地址") = MacAddr
- rsObj("网卡名称") = NetName
- rsObj.Update
- rsObj.Close
- connObj.Close
- End If
- End If
- Set rsObj = Nothing
- Set connObj = Nothing
- Loop
- End Function
-
- '函数checksize
- Function CheckSize(SZ)
- On Error Resume Next
- If SZ => 1073741824 Then
- SZ = FormatNumber(SZ/1073741824) & " GB"
- ElseIf SZ => 1048576 Then
- SZ = FormatNumber(SZ/1048576) & " MB"
- ElseIf SZ => 1024 Then
- SZ = FormatNumber(SZ/1024) & " KB"
- Else
- SZ = SZ & " B"
- End If
- CheckSize=Right(" " & SZ,10)
- 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、上面的脚本是不规范或者不合理的地方?
小弟在此谢过各位了!
作者: yu2n 时间: 2014-9-3 00:51
1、win7 64无法ADODB.Connection的这个问题;- Win7 x64 操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接。
- 解决:1. 在MSHTA中使用VBS编程;2. 使用VBA编程
复制代码
2、vbs如何用批处理的结果(例如批处理中的%username%等比较方便的获取系统信息的命令);- 'WhoAmI
- Msgbox CreateObject("WScript.Shell").ExpandenVironmentStrings("%COMPUTERNAME%\%USERNAME%")
复制代码
3、上面的脚本是不规范或者不合理的地方?- 1. 程序语法结构不整洁
- 2. 变量 NetName 与 Name
- 3. SQL插入、更新操作尽量使用Insert Into、Update语句。这里可以不用ADODB.RecordSet,使用ADODB.Connection的objConn.Execute(strSql)即可。
- 4. 猜测楼主是想要这个程序实现,将多台电脑的网卡流量状态实时写入这个Windows共享的Access数据库,这实在不是什么好主意……
复制代码
参考:
win7 64位环境运行程序出现提示microsoft.jet.oledb4.0未注册
http://answers.microsoft.com/zh- ... d-9bbc-d91759839fe1
作者: 437153 时间: 2014-9-3 09:20
回复 2# yu2n
4. 猜测楼主是想要这个程序实现,将多台电脑的网卡流量状态实时写入这个Windows共享的Access数据库,这实在不是什么好主意……
确实不是好注意,今天测试了一下发现仅有26台pc可以正常使用,其他的再想想入就会提示数据库被xxx占用了。。。
小弟才疏学,没接触过编程,所以没什么好办法啊。
作者: yu2n 时间: 2014-9-3 14:26
回复 3# 437153
方法1:可以考虑在服务器主机安装SQL Server。客户机使用ADO直接写数据到SQL Server。
方法2:可以考虑在服务器主机安装HTTP Server + SQL Server。客户机直接POST数据到HTTP Server。(适用于对安全性、大流量、内外网访问有要求的场景)
作者: 437153 时间: 2014-9-3 21:16
回复 4# yu2n
多谢指导。感激不尽
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |