Board logo

标题: [问题求助] 【已解决】VBS如何判断mdb数据库某字段下是否存在指定数据? [打印本页]

作者: 437153    时间: 2014-8-29 18:25     标题: 【已解决】VBS如何判断mdb数据库某字段下是否存在指定数据?

本帖最后由 pcl_test 于 2016-7-27 22:15 编辑
  1. set cn=WScript.CreateObject("ADODB.Connection")
  2. set rs=WScript.CreateObject("adodb.recordset")
  3. cn.open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=\\win-pc\meno\vbs\ceshi.mdb"
  4. sql="select MacAddress From speed where macaddress = '7'"
  5. rs.CursorLocation = 3
  6. rs.open sql,Cn,1,3
  7. if rs("Macaddress")= "7" Then
  8.     msgbox "有相同数据"
  9. else
  10.     msgbox "无此数据"
  11. end if
复制代码
此代码仅可以判断有数据的情况,如果字段下面没有 7 则会运行出错
出错内容为:
脚本:D:\1.vbs
行:8
字符:1
错误:发送意外
代码:80020009
null)

请问还有什么方法可以判断某字段下是否有我要找的值?


首先很感谢@neorobin @yu2n两位大大的热心帮助。
小弟又遇到麻烦了,搞了半天没做出来,只能不耻再来求助各位。
这一句:sql="select MacAddress From speed where macaddress = '7'"
现在这个7是一个变量,如:
mac=14:CF:92:1B:1D:52

我是这样写的:sql = chr(34)&"select MacAddress From speed where macaddress = '"&mac&"'"&Chr(34)
但是运行之后提示无效的sql语句。然后我就没办法了。我搜索关键字 双引号 变量 论坛也提示找不到资料。

那么这一句应该怎么写才对呢?
作者: neorobin    时间: 2014-8-29 19:36

本帖最后由 neorobin 于 2014-8-29 19:55 编辑

回复 1# 437153

sql 查询式中已经包含了条件, 后面的代码只需判断 not rs.eof 即可
当存在相关数据时, rs 可以得到一个记录集, rs("Macaddress") 也存在;
而不存在相关数据时, rs 得不到结果,  rs("Macaddress")  同样不存在, 是无意义的, 故而出错.
  1. if not rs.eof Then
  2.     msgbox "有相同数据"
  3. else
  4.     msgbox "无此数据"
  5. end if
复制代码

作者: yu2n    时间: 2014-8-29 20:11

使用 rs.RecordCount
  1. set cn=WScript.CreateObject("ADODB.Connection")
  2. set rs=WScript.CreateObject("adodb.recordset")
  3. cn.open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=\\win-pc\meno\vbs\ceshi.mdb"
  4. sql="select MacAddress From speed where macaddress = '7'"
  5. rs.CursorLocation = 3
  6. rs.open sql,Cn,1,3
  7. if rs.RecordCount > 0 Then
  8.     msgbox "有相同数据"
  9. else
  10.     msgbox "无此数据"
  11. end if
复制代码

作者: 437153    时间: 2014-8-29 21:48

回复 2# neorobin


    英雄,感谢你的回复。但是我家的电脑是win864位的,不能《catObj.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _》,没办法做测试。不过很感激你的热心回答。感激不尽。
作者: 437153    时间: 2014-8-29 21:49

回复 3# yu2n


        好汉,感谢你的回答。但是我家的电脑是win864位的,没办法做测试。不过很感激你的热心回答。感激不尽,真的很感谢。
作者: CrLf    时间: 2014-8-29 22:10

回复 5# 437153


    这位大侠请留步,他们代码的关键部分不是来自你顶楼提供的代码吗?
作者: 437153    时间: 2014-8-29 22:55

回复 6# CrLf


    那是我在公司的环境下面提问的。家里的系统和公司不一样,所以没办法验证。我是昨天开始捣鼓vbs的,上面的代码全部都随东拼西凑弄出来的。。。。不属于我的。
另外:前辈,win7以上的系统,不能加载《catObj.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _》这个。有办法解决吗?
作者: yu2n    时间: 2014-8-29 23:53

回复 7# 437153


我这里没有这个问题。
(测试环境:win8.1 x64 + office2007)

参考:Win7 上不能用 microsoft.jet.oledb.4.0
http://www.vbgood.com/thread-102510-1-1.html
作者: 437153    时间: 2014-9-1 08:49

回复 8# yu2n


    哦,原来是因为我使用的不是 ms office的原因啊。多谢测试。
作者: 437153    时间: 2014-9-1 10:14

回复 8# yu2n


    我还能再问你一个问题吗?
我这里的macaddr是一个变量来的。
我如何才能把它加到带双引号的表达式里面呢
Dim MacAddr
MacAddr = 9
sql = "select MacAddress Form speed where MacAddress = MacAddr"
MsgBox sql

我试了半天,结果弄出来了。但是放到程序里面,会提示无效的SQL语句
sql = chr(34)&"select MacAddress Form speed where MacAddress ="&Chr(34)&MacAddr&chr(34)&Chr(34)
作者: yu2n    时间: 2014-9-1 11:17

回复 10# 437153
  1. sql = "select MacAddress Form speed where MacAddress = '" & MacAddr &  "'"
复制代码
附:
VB/VBS语句中,字符串需要用一对英文"双"引号包含起来,例如:
  1. Msgbox " Hello World ! "
复制代码
SQL查询语句中,字符串需要用一对英文'单'引号包含起来,例如:
  1. select ' hello world! '
复制代码

作者: 437153    时间: 2014-9-1 11:31

回复 11# yu2n

如果我还需要在语句加一对双引号呢?
比如,我想要的最终结果是:
  1. “select MacAddress From speed where macaddress = 'mac=14:CF:92:1B:1D:52'"
复制代码

作者: yu2n    时间: 2014-9-1 11:45

回复 12# 437153
如果你想要Msgbox弹出如下内容的提示框:
  1. " select MacAddress From speed where macaddress = 'mac=14:CF:92:1B:1D:52' "
复制代码
你可以这么写Msgbox语句(注意英文双引号的写法有3种):
  1. str01 = """ select MacAddress From speed where macaddress = 'mac=14:CF:92:1B:1D:52' """
  2. str02 = """" & " select MacAddress From speed where macaddress = 'mac=14:CF:92:1B:1D:52' " & """"
  3. str03 = Chr(34) & " select MacAddress From speed where macaddress = 'mac=14:CF:92:1B:1D:52' " & Chr(34)
  4. Msgbox str01
  5. Msgbox str02
  6. Msgbox str03
复制代码
结果都是同样的。
作者: 437153    时间: 2014-9-1 11:54

回复 13# yu2n


    感谢您。真的要称呼您才能表达我心中的感动了。。。不仅解决我的疑问,同事还为我拓展的知识。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2