当初只是为了玩玩写的,没想到写了之后不断有人询问,所以改写了一下代码,完善了一下,支持了正则替换,避开了会导致出错的二进制(ole对象),并且做了一个EXE的程序。感谢虚拟帮忙。
附asp代码:
复制代码 代码如下:
<%
'####################################
'批量替换数据库内容2008-3-17
'替换是不可逆的,所以操作前做好能备份
'####################################
DimDb,conn,Rs1,Rs2,Str1,Str2,I,Re
str1="admi[0-z]"'要替换的字符串,支持正则
str2="1234"'替换为的字符串
Db="db.mdb"'数据库地址
'以下无需改动
'创建正则对象
SetRe=newRegExp
Re.IgnoreCase=True
Re.Global=True
SetConn=Server.CreateObject("ADODB.Connection")
Conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&server.mappath(Db)
SetRs1=Conn.OpenSchema(20)
DoWhileNotRs1.Eof
IfUCase(Rs1("TABLE_TYPE"))="TABLE"Then'如果是用户表,则进行操作
SetRs2=Server.Createobject("adodb.recordset")
Rs2.Open"select*from["&Rs1("TABLE_NAME")"]",conn,1,3
DoWhileNotRs2.Eof
ForI=0toRs2.fields.count-1'遍历所有字段
IfRs2(i).Properties("ISAUTOINCREMENT")=FalseAndRs2(i).Type<>128AndRs2(i).Type<>204AndRs2(i).Type<>205Then'如果非自动编号并且非ole对象
Rs2(Rs2(i).name)=Myreplace(Rs2(i).value&"")
EndIf
Next
Rs2.Movenext
Loop
Rs2.Close
SetRs2=nothing
EndIf
Rs1.MoveNext
Loop
Rs1.Close
SetRs1=Nothing
Conn.close
SetConn=Nothing
SetRe=Nothing
Response.Write"替换完成"
'自定义的替换函数
Functionmyreplace(byvalTstr)
IfTstr=""Orisnull(Tstr)Then
ExitFunction
Else
Re.Pattern=Str1
myReplace=Re.Replace(Tstr,Str2)
EndIf
EndFunction
%>