我正在尝试使用ADO和vb6更新访问mdb
数据库中的路径,但没有成功。
脚本如下。第Rs1(columnName) = Replace( Rs1(columnName),oldPath,newPath)
行会导致vbscript runtime err invalid use of Null
。
简单地说,我想将所有包含\\server2
字符串的表更新为\\DBSE-46\
。一世
我在win7 64bit上运行脚本
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!"
答案 0 :(得分:1)
使用IsNull函数检查Null值。在我年长的本地.chm甚至还有一段
使用IsNull函数确定表达式是否包含 空值。您可能希望评估为True的表达式 在某些情况下,例如如果Var = Null并且If Var<>空值, 永远都是假的。这是因为任何包含Null的表达式都是 本身是空的,因此是假的。
了解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