关于CONNECTION.DELETE的问题--高手请明鉴!

geegle2002 2002-07-19 07:03:00
各位朋友:
最近碰到这样一个问题,当我在ASP中调用DELETE语句删除SQLSERVER中某个表中的记录时(符合条件的记录>=2),每次只能删除一条记录!!!
而后去掉WHERE 条件,做无条件删除,还是同样的情况。
不知道这是不是IIS中的一个BUG。
*注:
ASP+SQLSERVER
语句 SET Con= SERVER.CreatObject("adodb.connection")
.............
strDelSql= "DELETE FROM 表名"
Con.execute strDelSql
...............
请明鉴!
...全文
15 点赞 收藏 23
写回复
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmsoft 2002-07-28
能不能把你的程序打包给我,我帮你看看?
cmsoft@sina.com
回复
geegle2002 2002-07-28
谢谢cmsoft:
我自己的想法以及以上各位朋友帮我想出来的点子,都已经落实成SQL文--结果一样(如上),在客户端执行是一样的结果(要么1条记录也不可以删除,要么只可以删除一次全部符合条件的记录,而后每次只可以删除一条),但是,当我把SQL文在网页打出来并粘贴到SQL里执行的时候,结果一样--都可以顺利的删除符合条件的全部记录!!
匪夷所思。
再一次谢谢CMSOFT :)
回复
cmsoft 2002-07-25
又看到你的帖子上移就知道没有解决,能不能在sql server写个delete在查询里执行,看看是不是你的MSSQL出毛病了,是不是系统出问题了?帮你关注
回复
geegle2002 2002-07-25
向所有关注这个问题的朋友
致敬
GEEGLE 2002
回复
geegle2002 2002-07-25
等待
... ...
"释然"的一刻
"灵光"的闪现
"正确”的答案

... ...
让我们
拥一颗炽热的心
遥望
真理的彼岸!
回复
cmsoft 2002-07-24
你所先的checkbox传下来的是有值的,比如我以前写过的用JS来实现的
function Add(Num) //此中Num参数据代表checkbox的个数
{
var i;
var Num;
var j=0;
var id="";
if (Num==0)
{
alert("没有选择对象!");
return false;
}
if (Num==1)
{
if (document.frmSelect.ID.checked==true)
{
id+=document.frmSelect.ID.value+",";
}
else
{
alert("请选择对象!");
return false;
}
}
if(Num>1)
{
for (i=0;i<Num;i++)
{
if (document.frmSelect.ID[i].checked==true)
{
j=j+1;
id+=document.frmSelect.ID[i].value+",";
}
}
if (j==0)
{
alert("请选择对象!");
return false;
}
}

window.location.href="Get_Index.ASP?Arr_ID="+id;
//window.close();
return false;
}

这里的Arr_ID就是你要得到的一串字符串如1,2,3,4,7,8,10,12它们用,隔开的你可以将之传到下页用request("Arr_ID")得到,然后可以用我上面的SQL方式来实型删除
这里我的思路已经很明确了,你看了后也应该明白了吧^-^
回复
geegle2002 2002-07-24
谢谢cmsoft的再次关注:
您写的非常详细,也非常清楚,谢谢您!
我实现的方式和您略有不同:没有在当前画面侦测有哪些CHECKBOX被选择,并且“拼成”字符串。我是在当前画面提交后的第2个画面(FORM中的ACTION后面的画面)中对前画面选择/没有选择的CHECKBOX组进行侦测的,并且利用数组保留结果(第i个checkbox被选择则ARRAY[i]置值),而后根据数组元素的值对表进行删除/更新。
殊途同归 :)
您提出的DELETE IN()的方式很“新颖”-于我而言,虽然早知道这种方法,但在考虑这个问题的时候确实没有想到这种方式 :(
我现在就尝试一下。(希望我的调试环境有所配合,不再出现莫名的状况)
真理保佑我们!
再一次的感谢,CMSOFT朋友 !


回复
geegle2002 2002-07-24
谢谢thinkover
:)
回复
JavaCoffee 2002-07-24
真奇怪,我怎么没有遇到过呢?
这种情况实在是诡异。
要不,咨询一下微软相关方面的工程师吧。
回复
geegle2002 2002-07-24
cmsoft您好:
测试的结果给我们希望,也给我们同样的感伤!
“不幸”的事情再一次发生:有效的删除(删除全部符合条件的记录)只进行了一次,而后的每次测试,只可以删除符合条件的记录集(IN(,,,) 中的)中的一条。。。。
CMSOFT,曾经“御览”过这份帖子的各位朋友,让我们继续关注这个问题,继续。。。。
好么
谢谢!
回复
geegle2002 2002-07-22
谢谢CMSOFT的关注:
很抱歉,我的删除条件是动态生成的-也就是根据前页面中的选择进行的。
是一个关于每月日期的选择,每个月的日期(30/31/28/29天),浏览者可以选择其中若干天登录为休息日-(在每个日子旁边有个CHECKBOX),在登录前需要将数据库中当月既有的休息日全部“删除”,问题就出在这个删除上!
例如浏览者选择登陆7月的若干天为休息日,我就需要先将表中7月的全部休息日删除掉,而后根据他的选择从新登录。
不知CMSOFT朋友能否明白。
再次谢谢您的关注 :)
回复
geegle2002 2002-07-22
谢谢枫夜的关注:
首先请原谅我在提出该问题时所忽视的一点---这个删除的功能我已经实现了,只不过用的是另外一种方法:逐条删除(符合条件的记录),当时是这样考虑的:“既然一次删除无法删除全部符合条件的记录(每次只可以删除一条),那我缘何不对每条符合条件的记录执行一次删除操作呢,事实证明我的想法是可行的,具体的做法和枫夜朋友提出的类似,暂不祥述。”
之所以在这里贴出这个帖子,缘于这样一种考虑:“逐条删除意味着数据库中存在多少条符合条件的记录,就要往复执行多少次删除操作,同一次性删除相比,效率打了不少折扣!”,所以才斗胆在这里帖出这份“英雄贴”,和各路同仁共商“大事” :)
再次感谢风夜朋友的关注,谢谢!
回复
cmsoft 2002-07-22
有一个sql删除的方式
delete from tblname where id in(1,2,3,4,7,8,10,12)
就是个sql可以删除id分别为1,2,3,4,7,8,10,12的记录这样比那种方式快些
不知道你是不是这个意思
回复
peter_zy 2002-07-22
语句中的rs为数据集名称,set rs = Server.CreateObject("ADODB.Recordset")
回复
peter_zy 2002-07-22
建议,你试一下这样(使用数据集):
sql = "select * from 表名 where 条件"
数据集名称.open sql,事务名称,3,3

do until rs.EOF
数据集名称.delete
rs.movenext
loop
回复
geegle2002 2002-07-21
谢谢CMSOFT:
明白您的意思,表间数据的约束应当是这样的(我这样认为):A表同B表关联(存在KEY 与 FOREIGN KEY ):A 表中存在这样的记录,它(它们)的KEY值同B表中若干条记录的FOREIGN KEY值相同,删除A表中记录时,要求先删除B表中相关联的记录。。
但是在我的调试环境下不存在这种情况:A表/B表中的记录(我要删除的对象)不存在外表中与之关联的记录。
谢谢!
回复
cmsoft 2002-07-20
你只有先删除与之相关的记录后才能删除它,如果直接删除是不行的,因为其它表的记录引用了该表的ID或者其它的关联字段
回复
JavaCoffee 2002-07-20
不会出现这种情况吧?
是不是受以前那个加上条件判断语句的影响?
你再仔细检查一下。
回复
geegle2002 2002-07-20
谢谢CMSOFT:
您提供的线索非常重要(应当考虑表间互连关系),我确实没有设置触发器;但是情况奇怪在偶而可以删除符合条件的全部记录(抑或全部记录-在无条件删除时),其余状况都是只可以删除一条记录(符合条件的记录);而且在我调试该程序的时候,该表(操作对象)中记录的增加,删除机能全都由我调试的程序实现,并且该表中的记录同其他表中记录的关联并不是很紧密。
再次谢谢CMSOFT!
回复
cmsoft 2002-07-20
你并没有用触发器吧,所以谈不上删除触发器吧,因为你表与表之间有关系所以删除记录会问题你上述所说的情况
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告