我正在做这个项目(经典的asp和SQL),其中我有一个输入框,点击“更新”按钮后从该输入框中取出图像名称。单击更新按钮后,可用/预先存在的图像将显示或显示在表格中。在存储此图像名称之前,我必须检查此图像是否已存在于数据库中。如果已有图像,我应该给出一条错误消息“此图像已存在于数据库中”。我遇到的问题是,我不明白如何检查不同形式的两个对象。换句话说,我的输入框采用的形式是执行一个SQL表,而表单元格中显示的记录集来自另一个数据库表。
<%
Response.Write "<form name=updateinfo action=images.asp?id="& Request.QueryString("ID") &" method='post'>"
Response.Write "<input type=hidden name=update value=actionaddimage>"
Response.Write "<input type=hidden name=id value="& Request.QueryString("id")&">"
%>
<tr>
<td align="center" bgcolor=#E0EAFD colspan=2>
<input type="text" name="image" value="<%=objRS("image")%>">
<input type="submit" name="submit" value="UPDATE"><br /><br />
</td>
</tr>
</form>
<!--div for displaying images-->
<div>
<table cellpadding=3 cellspacing=0 border=0 width="100%">
<tr>
<td>
<div style="text-align:left">
<%
DIM Sql1, Rs1,Cnt1
Cnt1=1
Sql1 ="SELECT TOP (10) np.imgId, p.name, p.productID, p.pack1, p.brand, p.image, np.imgName,np.imgThumbName, np.imageTitle, p.discontinue_YN, pf.flavor FROM product p "&_
"INNER JOIN NewProductImage np "&_
"ON np.productId = p.productID "&_
"LEFT OUTER JOIN product_flavors pf "&_
"ON p.flavor = pf.id "&_
"WHERE np.productID='"&request.QueryString("id")&"' "&_
"ORDER BY productID"
SET Rs1 = objConn.Execute(Sql1)
IF NOT Rs1.EOF=true THEN
%>
<%
IF objRS("image") = Rs1("imgName") THEN
Response.Write "<div id= 'errormsg'>**This image is already in database.</div>"
Response.Write "<br />"
END IF
%>
<span>More Views:</span>
<% END IF %>
</div>
</td>
</tr>
<tr>
<td>
<div>
<%
IF NOT Rs1.EOF=true THEN
%>
<center>
<%
Response.Write "<table><tr><td>Image Big</td><td>Image Small</td></tr>"
WHILE NOT Rs1.EOF
%>
<%
'Response.Write "<td class='tdcell'>"& Rs1("productID") &"</td>"
Response.Write "<tr><td><a href='abc.asp?id=" & Rs1("productID") & "'><img src='http://www.example.com/images/products/1400/"& Rs1("imgName") &"'></a></td>"
Response.Write "<td><a href='abc.asp?id=" & Rs1("productID") & "'><img src='http://www.example.com/images/products/250/"& Rs1("imgName") &"'></a></td>"
Response.Write "</tr>"
%>
<%
Rs1.moveNext
WEND
Response.Write "</table><br />"
%>
</center>
<%
END IF
Rs1.close
SET Rs1= nothing
%>
</div>
</div>
因此,输入框的值,即value =“&lt;%= objRS(”image“)%&gt;”,它来自产品表,它位于表单内。另一个表是newProductImage,用于显示表中的图像。我尝试做“加入”并按上图所示进行检查:
IF objRS("image") = Rs1("imgName") THEN
Response.Write "<div id= 'errormsg'>**This image is already in database.</div>"
Response.Write "<br />"
END IF
但逻辑不起作用。我也尝试过做
IF Rs1("p.image") = Rs1("np.imgName") THEN
Response.Write "<div id= 'errormsg'>**This image is already in CDN.</div>"
Response.Write "<br />"
END IF
它给我一个错误“在对应于所请求的名称或序号的集合中找不到项目”。能帮我解决一下如何检查?
答案 0 :(得分:0)
我会发表评论但硬币不够。
尝试使用NOT EXISTS或EXISTS而不是JOIN来编写它。 前几天我不得不重写一些与你正在做的相似的代码。我最终选择了WHERE NOT EXISTS,但也选择了WHERE EXISTS
这是我的资源链接MSDN Exists (Transact-SQL)
这将为您提供另一个代码选项。
更新于1-13-2016 3:30 PM CST
此处的计划是发现PRODUCT P.IMAGE是否与NEWPRODUCTIMAGE NP.IMGNAME匹配。
如果我们有比赛..
IF RS.EOF=False Then
或你是如何写的
IF NOT RS.EOF=True THEN
如果我记得的话,我们可以跳过额外的匹配,这是不能正常工作的。 WHERE EXISTS会为您检查。
If objRS("image") = RS("ImgName")
如果您需要调用图像,您知道它在那里,因为它不是虚假的返回。
str = RS(“image”)
Sql ="SELECT product.name, product.productID, product.brand, product.image "&_
" FROM product "&_
" WHERE EXISTS "&_
"("&_
" SELECT 1 "&_
" FROM NewProductImage "&_
" WHERE LOWER(NewProductImage.imgName) = LOWER(product.image) "&_
" AND LOWER(NewProductImage.imgName) = "&LCase(str)&" "&_
")"&_
" AND product.name Is Not NULL "
SET RS = objConn.Execute(Sql)
If RS.EOF=False THEN
Response.Write "<div>This image is already in db.</div>"
End If
Set RS = Nothing
WHERE LOWER(imgName)= LOWER(图像)收集匹配的图像。 AND LOWER(imgName)=“&amp; LCase(str)&amp;”告诉我们您正在测试或查看两个表中的图像。
在使用“&amp; str&amp;”的示例中你应该只在一个地方需要它。
我添加了一个AND语句,因此您可以看到更多的格式。 更新以匹配小写。