access数据库,如何在字段中一个指定的字符串后面加上序号

比如某字段包括“警察”这个字符串,每出现一次就在后面加1,如果出现三次警察就改成警察1,警察2,警察3
表名是content,字段名是zsbc

我在vba模块执行下列语句,总是报用户定义类型未定义

sub test()

dim I as integer, myStr as string, rs as dao.recordset

set rs = currentdb.openrecordset("select ID, wztp from content")

with rs
.movefirst

do until .eof

mystr = .fields("wztp").value

if instr(1,mystr,"min1")>0 then

I = I+1

myStr = replace(mystr,"min1","min1" & I)

docmd.runsql "UPDATE content SET wztp = '" & mystr & "' WHERE ID = " & .fields("ID").value

end if

.movenext

loop

end with

set rs = nothing

end sub

最后没搞定
最新回答
无戏配角

2025-03-01 02:28:50

1)定义整形变量I做计数器。定义文本型变量
2)取记录集(ID、字段名)。从头开始do……loop循环。
3)将字段值赋值给文本型变量
4)判断,如字段值包含“警察”,则:
5)计数器加1(I=I+1),
6)再用replace函数将文本变量中的“警察”替换为"警察"&I
7)docmd.runsql "UPDATE 表名 SET 字段名 = '" & 文本变量 & "' WHERE ID = " & ID字段值
8)移动到下一条记录
追问
表名 con,字段名zsbc,麻烦帮我写下,我的水平不够。
追答
dim I as integer, myStr as string, rs as dao.recordset
set rs = currentdb.openrecordset("select ID, zsbc from con")
with rs
.movefirst
do until .eof
mystr = .fields("zsbc").value
if instr(1,mystr,"警察")>0 then
I = I+1
myStr = replace(mystr,"警察","警察" & I)
docmd.runsql "UPDATE con SET zsbc = '" & mystr & "' WHERE ID = " & .fields("ID").value
.movenext
loop
end with
set rs = nothing
追问
这是个vba函数么,执行语句也帮我写下好么,最好有个全的,谢谢
追答

插入模块,在模块中输入下面的代码,然后点三角按钮直接运行就可以了:

sub test()

dim I as integer, myStr as string, rs as dao.recordset

set rs = currentdb.openrecordset("select ID, zsbc from con")

with rs
.movefirst

do until .eof

mystr = .fields("zsbc").value

if instr(1,mystr,"警察")>0 then

I = I+1

myStr = replace(mystr,"警察","警察" & I)

docmd.runsql "UPDATE con SET zsbc = '" & mystr & "' WHERE ID = " & .fields("ID").value

end if

.movenext

loop

end with

set rs = nothing

end sub

追问
提示,用户定义类型未定义(, rs As dao.Recordset),是不是要把zsbc字段类型有特定要求?
追答

测试过,没问题。DAO是默认引用的。

追问
不好意思,我实际操作的字符串不是警察,而是abstract-min1,是不是这个字符串有问题?
追答
对,改下吧
追问
怎么改啊,麻烦了,我vba不太好
追答
把代码中的"警察"改成"abstract-min1"
追问
这个我改了,但是报用户定义类型未定义啊,我用的是access2003
追答
2003需要引用dao,方法可参考如下链接:
http://www.accessoft.com/article-show.asp?id=316