幾年前寫的腳本,可以自動進行整庫的資料替換。
當初只是為了玩玩寫的,沒想到寫了之後不斷有人詢問,所以改寫了一下代碼,完善了一下,支持了正則替換,避開了會導致出錯的二進制(ole對象),並且做了一個EXE的程序。感謝虛擬幫忙。
附asp程式碼:
複製程式碼代碼如下:<%
'####################################
'批次取代資料庫內容2008 -3-17
'替換是不可逆的,所以操作前做好能備份
'################################# ####
Dim Db,conn,Rs1,Rs2,Str1,Str2,I,Re
str1=admi[0-z] '要替換的字串,支援正規
str2=1234 '替換為的字串
Db=db.mdb '資料庫位址
'以下無需改變
'建立正規物件
Set Re=new RegExp
Re.IgnoreCase =True
Re.Global=True
Set Conn=Server.CreateObject(ADODB.Connection)
Conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&server.mappath(Db)
Set Rs1 = Conn.OpenSchema(20)
Do While Not Rs1.Eof
If UCase(Rs1(TABLE_TYPE))=TABLE Rs1.Eof If UCase(Rs1(TABLE_TYPE))=TABLE Then '如果是用戶表,則進行操作
Set Rs2=Server.Createobject(adodb.recordset)
Rs2.Open select * from [&Rs1(TABLE_NAME)],conn,1,3
Do While Not Rs2.Eof
For I=0 to Rs2.fields.count-1 '遍歷所有欄位
If Rs2(i).Properties(ISAUTOINCREMENT) = False And Rs2(i).Type<>128 And Rs2(i).Type<>204 And Rs2(i).Type<>205 Then '如果非自動編號且非ole物件
Rs2(Rs2(i).name)=Myreplace(Rs2(i).value&)
End If
Next
Rs2.Movenext
Loop
Rs2.Close
Set Rs2 =nothing
End If
Rs1.MoveNext
Loop
Rs1.Close
Set Rs1=Nothing
Conn.close
Set Conn=Nothing
Set Re=Nothing
Response.Write 替換完成
'自訂的替換函數
Function myreplace(byval Tstr)
If Tstr= Or isnull(Tstr) Then
Exit Function
Else
Re.Pattern=Str1
myReplace =Re.Replace(Tstr,Str2)
End If
End Function
%>