2014-10-18 90 views
0

我試圖更新路徑訪問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!" 

回答

1

使用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 
+0

感謝Ekkehard.Horner 您的解決方案和預期一樣的Windows XP系統上,但自帶的錯誤「未指定的錯誤,行44.1碼80004005,來源(空)。即」 Rs1.Open sqlStmt,AccessConnect 「 顯然這表明權限錯誤,但是以管理員身份運行,並且文件夾權限設置爲admin,完全控制。請問您可以諮詢嗎? 再次感謝 – addcom 2014-10-19 14:44:40

+0

上面的錯誤代碼是因爲我沒有在64位Windows上安裝IIS 7,啓用ISS中的大部分選項後,我可以使用批處理文件或調用批處理文件來運行vb腳本。要安裝ISS以控制面板,程序和功能打開/關閉功能,請從列表中選擇IIS – addcom 2014-10-21 15:11:47