因为网站要改用程序,这几天把程序写好后发现,迁移过来的数据中有许多的上传路径和图片路径都出错,看来要整理哈数据库。
1。以前的方法就是直接在数据库里替换,ACCESS库直接用查找替换,可这次百试不灵,因为要替换中的文本有保留字,和一些特殊的符号。
2。于是我想到复制到ECXEL中进行替换,这些字条是可以替换了,可是因为这个字段是备注字段,复制到ECXEL中只有这个字段的一小部分。
3。如果在SQL里,可以用updata 表set 字段=repalce(字段,要替换的字符,替换为的字符)来直接,可是ACCESS里好像是不行的。
4。看来要用小段代码来循环替换,于是写了一小段。/
<%
dim conn,db,connstr
dim iRep,sqlRep, strRep,rsRep,str1,str2,tableName
str1="[InstallDir_ChannelDir]{$UploadDir}" "要替换的字符串
str2="/wsrs/UploadFiles" "替换为的字符串
db="/datd/data.mdb" "数据库文件的位置
tableName="article" "数据库用表的名称
Set conn = Server.CreateObject("ADODB.Connection")
c & Server.MapPath(db)
conn.Open connstr
set rsRep = Server.CreateObject("ADODB.Recordset")
sqlRep="select content from "&tableName
rsRep.open sqlRep,conn,1,3
iRep=1
do while not rsRep.eof
strRep=replace(rsRep("Content"),str1,str2)
rsRep("Content")=strRep
rsRep.update
response.Write "√第"&iRep&"条记录已替换成功!<br>"
rsRep.movenext
iRep=iRep+1
loop
rsRep.close
set rsRep=nothing
%>
写成一个ASP程序,放到网站目录下执行,运行的结果:
再来看,网站上的图片和要原来上传到网站上提供下载的资源路径都对了。
后来又在网站找一下此类的资料,发现有一个更好的,可以对整个数据库进行替换,代码如下:
<%
Dim Db,Connstr,conn,rs,rs2,str1,str2,I
str1="abcd" "要替换的字符串
str2="1234" "替换为的字符串
Db="lamking.mdb"
Set c.CreateObject("ADODB.Connection")
C&server.mappath(Db)
Conn.Open ConnStr
Set rs = conn.OpenSchema(20)
Do While Not rs.eof
If rs("TABLE_TYPE")="TABLE" Then
Set Rs2=Server.Createobject("adodb.recordset")
Rs2.Open "select * from ["&rs("TABLE_NAME")&"]",conn,1,3
Do While Not Rs2.Eof
For I=0 to Rs2.fields.count-1
If Rs2(i).Properties("ISAUTOINCREMENT") = False Then
Rs2(Rs2(i).name)=Myreplace(Rs2(i).value)
End If
Next
Rs2.Movenext
Loop
Rs2.Close
Set Rs2=nothing
End If
Rs.Movenext
Loop
Rs.close
Set Rs=nothing
Conn.close
Set C
Response.Write"替换完成"
Function myreplace(byval Tstr)
If Tstr="" Or isnull(Tstr) Then
Exit Function
Else
myReplace=replace(Tstr,str1,str2)
End If
End Function
%>
1。以前的方法就是直接在数据库里替换,ACCESS库直接用查找替换,可这次百试不灵,因为要替换中的文本有保留字,和一些特殊的符号。
2。于是我想到复制到ECXEL中进行替换,这些字条是可以替换了,可是因为这个字段是备注字段,复制到ECXEL中只有这个字段的一小部分。
3。如果在SQL里,可以用updata 表set 字段=repalce(字段,要替换的字符,替换为的字符)来直接,可是ACCESS里好像是不行的。
4。看来要用小段代码来循环替换,于是写了一小段。/
<%
dim conn,db,connstr
dim iRep,sqlRep, strRep,rsRep,str1,str2,tableName
str1="[InstallDir_ChannelDir]{$UploadDir}" "要替换的字符串
str2="/wsrs/UploadFiles" "替换为的字符串
db="/datd/data.mdb" "数据库文件的位置
tableName="article" "数据库用表的名称
Set conn = Server.CreateObject("ADODB.Connection")
c & Server.MapPath(db)
conn.Open connstr
set rsRep = Server.CreateObject("ADODB.Recordset")
sqlRep="select content from "&tableName
rsRep.open sqlRep,conn,1,3
iRep=1
do while not rsRep.eof
strRep=replace(rsRep("Content"),str1,str2)
rsRep("Content")=strRep
rsRep.update
response.Write "√第"&iRep&"条记录已替换成功!<br>"
rsRep.movenext
iRep=iRep+1
loop
rsRep.close
set rsRep=nothing
%>
写成一个ASP程序,放到网站目录下执行,运行的结果:
再来看,网站上的图片和要原来上传到网站上提供下载的资源路径都对了。
后来又在网站找一下此类的资料,发现有一个更好的,可以对整个数据库进行替换,代码如下:
<%
Dim Db,Connstr,conn,rs,rs2,str1,str2,I
str1="abcd" "要替换的字符串
str2="1234" "替换为的字符串
Db="lamking.mdb"
Set c.CreateObject("ADODB.Connection")
C&server.mappath(Db)
Conn.Open ConnStr
Set rs = conn.OpenSchema(20)
Do While Not rs.eof
If rs("TABLE_TYPE")="TABLE" Then
Set Rs2=Server.Createobject("adodb.recordset")
Rs2.Open "select * from ["&rs("TABLE_NAME")&"]",conn,1,3
Do While Not Rs2.Eof
For I=0 to Rs2.fields.count-1
If Rs2(i).Properties("ISAUTOINCREMENT") = False Then
Rs2(Rs2(i).name)=Myreplace(Rs2(i).value)
End If
Next
Rs2.Movenext
Loop
Rs2.Close
Set Rs2=nothing
End If
Rs.Movenext
Loop
Rs.close
Set Rs=nothing
Conn.close
Set C
Response.Write"替换完成"
Function myreplace(byval Tstr)
If Tstr="" Or isnull(Tstr) Then
Exit Function
Else
myReplace=replace(Tstr,str1,str2)
End If
End Function
%>