简体   繁体   English

带有MS Access DELETE的经典ASP循环失败

[英]Classic ASP with MS Access DELETE fails in loop

I have a simple loop where I extract two values from a csv string multiple times. 我有一个简单的循环,其中多次从csv字符串中提取两个值。

I then send the values to a DELETE routine. 然后,将值发送到DELETE例程。 Like so: 像这样:

cvsString = "aaa_bbb, ccc_ddd"
arrCvs = split( cvsString, ",")
for each pair in arrCvs
    valArray  = split(pair, "_")
    Call DeleteRow (valArray(0), valArray(1))
next

sub DeleteRow(col1Val, col2Val)
    sql = "DELETE * FROM tblName WHERE col1 = 'col1Val' AND col2 = 'col2Val'"
    dbh.Execute sql, rowsAffected
end sub

Apologies, I can't copy my code so you get psuedo-code and a few shortcuts. 抱歉,我无法复制我的代码,因此您会得到伪代码和一些快捷方式。 The code works .... except 该代码有效..除了

The first request to DELETE succeeds but all others fail. 第一个删除请求成功,但所有其他请求失败。 rowAffected returns: 1, 0, 0, 0, 0, etc rowAffected返回:1、0、0、0、0等

Any ideas. 有任何想法吗。 I searched where I can with no results 我搜索了我无能为力的地方

Have the loop create one SQL, and execute it: 让循环创建一个SQL,然后执行它:

cvsString = "aaa_bbb, ccc_ddd"
arrCvs = split( cvsString, ",")
SQL = "DELETE * FROM tblName WHERE"
for each pair in arrCvs    
    valArray  = split(pair, "_")
    Vals = Vals & " or (col1 = '" & valArray(0) & "' AND col2 = '" & valArray(1) & "')"
next
dbh.Execute sql & Right(Vals, Len(Vals)-len(" or")) , rowsAffected

This happens because you put static value instead of adding the actual, dynamic, value of the variables you pass to the sub routine. 发生这种情况是因为您放置了静态值,而不是添加传递给子例程的变量的实际,动态值。

Proper way would be using parameters: 正确的方法是使用参数:

Set cmd = Server.Createobject("ADODB.Command")
Set cmd.ActiveConnection = dbh
cmd.CommandText = "DELETE * FROM tblName WHERE col1=? AND col2=?"
cmd.CommandType = adCmdText
cmd.Parameters.Append(cmd.CreateParameter("col1Val", 202, 1, 255, col1Val))//adVarWChar
cmd.Parameters.Append(cmd.CreateParameter("col2Val", 202, 1, 255, col2Val))//adVarWChar
cmd.Execute rowsAffected

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM