vbscript ADO记录集更新
问题描述:
我试图更新路径访问mdb
数据库使用ADO和vb6没有成功。vbscript ADO记录集更新
脚本如下。行Rs1(columnName) = Replace(Rs1(columnName),oldPath,newPath)
导致vbscript runtime err invalid use of Null
。
简而言之,我想更新所有包含字符串\\server2
至\\DBSE-46\
的表格。我 正在运行Win7上64位的脚本
c:\windows\syswow64\cscript.exe C:\SQLTest\HarishScripts\DatabaseAccessProg6.vbs >> C:\SQLTest\HarishScripts\DatabaseAccessProg6.txt
Option Explicit
WScript.Echo "START of ADO access program...."
Dim DBpath
Dim tableName
Dim columnName
Dim oldPath
Dim newPath
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
' Set all external variables here...
DBpath = "C:\DBTest;"
tableName = "Test"
columnName = "Path"
oldPath = "\\SERVER2\"
newPath = "\\DBSE-46\"
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Dim Rs1
Set Rs1 = CreateObject("ADODB.Recordset")
Dim i
Dim AccessConnect
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=MedDataSource.mdb;" & _
"DefaultDir=" & DBpath & _
"Uid=Admin;Pwd=;"
'--------------------------
' Recordset Object Method
'--------------------------
' Recordset Open Method #4: Open w/o Connection & w/Connect String
Dim sqlStmt
sqlStmt = "SELECT * FROM " & tableName
' use LockTypeEnum.adLockOptimistic = 3. This allows update of the recordset.
Rs1.LockType = 3
Rs1.Open sqlStmt, AccessConnect
Do Until Rs1.EOF
'WScript.Echo Rs1("Path")
if (Rs1(columnName) = NULL) Then
End If
Rs1(columnName) = Replace(Rs1(columnName),oldPath,newPath)
Rs1.MoveNext
Loop
' Close the recordset...
Rs1.Close
Set Rs1 = Nothing
WScript.Echo "..."
WScript.Echo "..."
WScript.Echo "DONE!"
答
使用IsNull函数来检查空值。在我较旧的本地.chm中,甚至有一段
使用IsNull函数确定表达式是否包含空值 。在某些情况下,如果Var = Null且If Var <> Null, 始终为False,则表达式可能会估计为True 。这是因为任何包含Null的表达式都是 本身是空的,因此是False。
工作你对If条款的理解。在
if (Rs1(columnName) = NULL) Then
End If
Rs1(columnName) = Replace(Rs1(columnName),oldPath,newPath)
无论Rs1(columnName)的内容如何,最后的语句都会被执行。所以,做
if Not IsNull(Rs1(columnName)) Then
Rs1(columnName) = Replace(Rs1(columnName),oldPath,newPath)
End If
感谢Ekkehard.Horner 您的解决方案和预期一样的Windows XP系统上,但自带的错误“未指定的错误,行44.1码80004005,来源(空)。即” Rs1.Open sqlStmt,AccessConnect “ 显然这表明权限错误,但是以管理员身份运行,并且文件夹权限设置为admin,完全控制。请问您可以咨询吗? 再次感谢 – addcom 2014-10-19 14:44:40
上面的错误代码是因为我没有在64位Windows上安装IIS 7,启用ISS中的大部分选项后,我可以使用批处理文件或调用批处理文件来运行vb脚本。要安装ISS以控制面板,程序和功能打开/关闭功能,请从列表中选择IIS – addcom 2014-10-21 15:11:47