我自己写了一小段程序,就是删除数据库中相同的邮件地址,只留下一个邮址。但…………

feeling 2001-02-18 04:18:00
但是可以运作,只是好像很占用内存,当然也删了一些数据,我原来在中间设置显示所删除的数据,和所删的个数。现在因为简单代码就没有了。

但是运行一会后,就出现下面的错误。
Microsoft OLE DB Provider for ODBC Drivers 错误 '8007000e'

[Microsoft][ODBC Microsoft Access 驱动程序] 不能再打开其它表了。

/mail/mailch.asp, 行20

才开始我设置了一显示所删的数据的时候好像它的提示是 存贮位置不够。

请大侠们帮我把程序改一下,以便占用更小的内存。




<% dim conn
dim connstr
connstr="DBQ="+server.mappath("mail.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
set rs=server.createobject("adodb.recordset")
sql="select * from mail"
rs.open sql,conn,1
j=1
do while not rs.eof
rs.close
set rs=nothing
set rs=server.createobject("adodb.recordset")
sql="select * from mail"
rs.open sql,conn,3,3
rs.move j
a=rs("mail")
set rs2=server.createobject("adodb.recordset")
sql2="select * from mail where mail='"&a&"'"
rs2.open sql2,conn,3,3
if rs2.recordcount>1 then
rs2.movenext
do while not rs2.eof
rs2.delete
rs2.movenext
rs2.close
set rs2=nothing
loop
end if
j=j+1
loop
%>
...全文
744 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
zero1977 2001-02-21
  • 打赏
  • 举报
回复
写个StoreProcedure就行了
....
select unique * from table1 into #tmpTable;
delete tabl1;
insert into table1 select * from #tmptable;
....

supersonics 2001-02-21
  • 打赏
  • 举报
回复
阁下早生就可以了。我是不敢的。
30年的八路,呵呵。
feeling 2001-02-21
  • 打赏
  • 举报
回复
没办法,本不想学英文,但中国的考试偏要考,
本来,来CSND是起中国名字的,奈何我的名被别人先一步抢走,我想起名叫 狂风落叶, 不知道哪个小子,比我快呀,先一步注册,没办法撒,你叫落叶狂风,呵~ 那一定不是你了。我不生你的气呀。 :)

要是你我都早生 30 年,我不知道《小兵张嘎》里面的那个 “老子吃你两上烂西瓜还要我给钱?” 是不是你同事?呵呵~~~
俺嘛,就做一回八路了,也用不着在这里做小鸟,受你的欺负撒。

各位好运,我的问题圆满解决,此帖晚上来加分,看还有什么精典的东西没出来。哈哈~~

对了,怎么把给的分加高一点撒。
feeling 2001-02-21
  • 打赏
  • 举报
回复
没办法,本不想学英文,但中国的考试偏要考,
本来,来CSND是起中国名字的,奈何我的名被别人先一步抢走,我想起名叫 狂风落叶, 不知道哪个小子,比我快呀,先一步注册,没办法撒,你叫落叶狂风,呵~ 那一定不是你了。我不生你的气呀。 :)

好运,我的问题圆满解决,此帖晚上来加分,看还有什么精典的东西没出来。哈哈~~

对了,怎么把给的分加高一点撒。
supersonics 2001-02-21
  • 打赏
  • 举报
回复
那么,feeling为何要学英文呢?
你说的那一切为何不适用于英文的学习呢?
阁下居然把学外语等同于崇洋媚外...
阁下早生30年倒是一把好手.
feeling 2001-02-21
  • 打赏
  • 举报
回复
按mail 索引
循环
比较下一条记录和当前记录是不是相同,是的话呢,删!
j=j+1

不是的话,重新赋值,其实也是基于你们的思想呀。

我弄了好长时间,很烦的,倒不如是你们的原来的设计思想,呵呵~~ 很实用的话。好的不用,想复杂的吗?

你要是打算用MOVENEXT的话,可能不妙,还是用 J=J+1 ,然后移动指针,呵呵~~ 你去想吧,我是不愿想的了。
flyants0 2001-02-21
  • 打赏
  • 举报
回复



我只是问一下像那样执行到末底还会跑到第一条记录上再循环查找的吗????????????????我觉得不可能.那样不可能执行.记录如果只用rs.movenext是不可能循环的.记录不是循环条件.即使条件在循环,但记录是不可能循环的.do.....loop只能去循环每一条记录的条件.但记录是一直向下走的.在上面的那个实验中它是不可能向上跑的.不是吗???????快.我快想不通要自杀了.看仔细上面的实验.然后回答我的问题.唉.我给分算了.....嘻嘻




flyants0 2001-02-21
  • 打赏
  • 举报
回复
老天.我不是这个意思.我的实验你也看了吧.我是问这样可以执行出结果吗??那个记录是不是像我说的那样.会跑到开头再往下执行的吗??看清楚我问的问题..........^_^
feeling 2001-02-21
  • 打赏
  • 举报
回复
TO flyants0(地瓜哥) 

你的实验我已做过了,最好的嘛,应当是你们原先的思路,我现在就是这么用的啦,
运行起来很快呀。呵~~

happyno9 2001-02-21
  • 打赏
  • 举报
回复
其实,每一个数据库连接都很占资源,必须在最后关闭
conn.close
set conn=nothing
不然,在访问量大的时候,很容易就死掉了
flyants0 2001-02-21
  • 打赏
  • 举报
回复
rs.open ..
sID = rs("id")
sMail = rs("mail")
rs.movenext
do while not rs.eof
while rs("mail") = sMail and not rs.eof
rs.movenext
wend
// delete from table where mail=sMail and id <> sID
// 这句sql通过connection执行。
sMail = rs("mail")
sID = rs("id")
loop
好.我们现在做一个实验:
ID MAIL
1 cc@cc.net
2 gg@gg.net
3 cc@cc.net
4 ff@ff.net
5 ee@ee.net
6 cc@cc.net
7 gg@gg.net
开始.
sID = rs("id")
sMail = rs("mail")
// mail=cc@cc.net id=1--------赋值对吧.
rs.movenext // 记录到第二条记录上对吧.
do while not rs.eof

while rs("mail") = sMail and not rs.eof //删除相同mail的记录并且记录向
下移对吧.那么3和6记录都将被删除对吧
delete from table where mail=sMail and id <> sID
rs.movenext
wend //循环完成了吧.记录应该到第七条记录了吧.

sMail = rs("mail") //现在把第七记录的值赋给smail和sid对吧.再循环
sID = rs("id") 吗?看看现在记录到哪去了.已经是最后一条了呀
loop 它会自动从第一条记录再循环的吗/?记录可以这样.
移动的吗还有4和5这两条记录怎么让它们的值也赋给smail和
sid去检验呢.你所有的rs对象都在向下移.全是
rs.movenext最终会跑到最后一条记录上去.难道记录
会自动跑到第一条记录上去再往下循环的吗/??
我搞不明白了.请你再给我指导一下吧.谢谢.或者请留下你的qq或email我向你请教..........^_^

flyants0 2001-02-21
  • 打赏
  • 举报
回复
rs.open ..
sID = rs("id")
sMail = rs("mail")
rs.movenext
do while not rs.eof
while rs("mail") = sMail and not rs.eof
rs.movenext
wend
// delete from table where mail=sMail and id <> sID
// 这句sql通过connection执行。
sMail = rs("mail")
sID = rs("id")
loop
好.我们现在做一个实验:
ID MAIL
1 cc@cc.net
2 gg@gg.net
3 cc@cc.net
4 ff@ff.net
5 ee@ee.net
6 cc@cc.net
7 gg@gg.net
开始.
sID = rs("id")
sMail = rs("mail")
// mail=cc@cc.net id=1--------赋值对吧.
rs.movenext // 记录到第二条记录上对吧.
do while not rs.eof

while rs("mail") = sMail and not rs.eof //删除相同mail的记录并且记录向
下移对吧.那么3和6记录都将被删除对吧
delete from table where mail=sMail and id <> sID
rs.movenext
wend //循环完成了吧.记录应该到第七条记录了吧.

sMail = rs("mail") //现在把第七记录的值赋给smail和sid对吧.再循环
sID = rs("id") 吗?看看现在记录到哪去了.已经是最后一条了呀
loop 它会自动从第一条记录再循环的吗/?记录可以这样.
移动的吗还有4和5这两条记录怎么让它们的值也赋给smail和
sid去检验呢.你所有的rs对象都在向下移.全是
rs.movenext最终会跑到最后一条记录上去.难道记录
会自动跑到第一条记录上去再往下循环的吗/??
我搞不明白了.请你再给我指导一下吧.谢谢.或者请留下你的qq或email我向你请教..........^_^

supersonics 2001-02-21
  • 打赏
  • 举报
回复
今天我学日语是为了让日本人明天学中文。
不然,何必大家都要学英语呢?
此外,循环本身并不占用多少资源,倒是你一次一次的delete,不断和数据库打交道恐怕占用的资源更多。
feeling 2001-02-20
  • 打赏
  • 举报
回复
唉~! 我是脸皮厚一点,至少我是爱国的,至少我有那种狭隘的爱国思想,看到放东赢屁的人我就来气。想当年,就是汝等一般说着 しました 话的人在我大好中华之地,烧杀抢虏,极尽欺负妇孺之能事。

没想到呀,居然现在也有人喜欢 しました ,还是在这里个 “中国”软件里面。晕倒!!!唉……谁叫我等是小鸟哩。落后就要受欺呀!!
feeling 2001-02-20
  • 打赏
  • 举报
回复
flyants0(地瓜哥) to supersonics

本来就是呀,我本是觉得那样的方法好,就自己动手,哈… ,一下手才知道,supersonics的改进方法和我原来最笨的方法是一个样的。都要做两个循环呐。还是占用很大的资源。仔细一想,就如你所说的了。

我说的加一个字段嘛,现在想一想其实也是一样的,也是很烦的

但是这样一种新思路大家想一想啊 。
按 MAIL 排序,读取下一个记录,然后比较,如果不等,即重新赋值。如果相等,rs.delete
再rs.movenext 再循环
supersonics 2001-02-20
  • 打赏
  • 举报
回复
看来feeling的头之所以大原因在于脸皮厚。
了解しました。
supersonics 2001-02-20
  • 打赏
  • 举报
回复
to flyants0:
--------------------------------
rs.open ..
sID = rs("id")
sMail = rs("mail")
rs.movenext
do while not rs.eof
while rs("mail") = sMail and not rs.eof
rs.movenext
wend
// delete from table where mail=sMail and id <> sID
// 这句sql通过connection执行。
sMail = rs("mail")
sID = rs("id")
loop
-----------------------------
it's ok?
feeling 2001-02-20
  • 打赏
  • 举报
回复
难道这样讨论不可以让大家多学不少?

没有这个问题,你们怎么可以想出这么些经典的解决之道,你们应当给分给我才是,呵呵~~~

而且我提出的问题很实用啊,想来你们也可能就要用到了,花去一天多的时间,有什么不值得哩,

哈哈~~ 祝大家开心!

flyants0 2001-02-20
  • 打赏
  • 举报
回复



to supersonics

如果像你那样说把第一条记录的值赋给变量.然后循环删除mail相同id不同的记录.但删除完后记录指针回到哪儿了.这之后如何把完全不相同的记录的值再赋给变量呢.如果仅用循环地话那不是又跑回到第一条记录了嘛.

而像不哭不笑的那样相同记录排在一起就会不用考虑这种现像.而你这种记录是杂乱无章的呀.
唉.今天想了想又搞糊涂了.

还有像feeling说的那样加一个字段地话,相同mail的flag为1然后删除.删除后呢.记录跑哪儿去了.我们现在可是只有一个rs对象呀.


flyants0 2001-02-20
  • 打赏
  • 举报
回复



to supersonics

如果像你那样说把第一条记录的值赋给变量.然后循环删除mail相同id不同的记录.但删除完后记录指针回到哪儿了.这之后如何把完全不相同的记录的值再赋给变量呢.如果仅用循环地话那不是又跑回到第一条记录了嘛.

而像不哭不笑的那样相同记录排在一起就会不用考虑这种现像.而你这种记录是杂乱无章的呀.
唉.今天想了想又搞糊涂了.

还有像feeling说的那样加一个字段地话,相同mail的flag为1然后删除.删除后呢.记录跑哪儿去了.我们现在可是只有一个rs对象呀.


加载更多回复(20)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧