【问题标题】:Update SQL Server: with html-input within a While Loop - asp classic更新 SQL Server:在 While 循环中使用 html 输入 - asp 经典
【发布时间】:2019-04-24 13:18:06
【问题描述】:

关于语言的道歉,我正在维护一个遗留系统,它全部在 ASP Classic 中。

我有一个 html 页面,其中包含通过 ASP 从我的 SQL Server 生成的内容

<form method="POST"> 
<div class="container">
 <table id="table" class="table">
  <thead class="thead-dark">
  <tr>
  <th scope="col" data-field="article">Article</th>
  <th scope="col" data-field="item">QTY/th>

然后我使用我的 dB 中的 while 循环生成内容,该循环正确显示内容:

<%
 While not grs.eof
%>
<tr>
<!--SQL query from ASP-classic-->
<th><%=grs.fields("Article")%></th>
<input type="number" class="form-control" id="Quant" placeholder="<%=grs.fields("QTY")%>" name="qty"></th>

<%
 grs.movenext
wend   
%>
</tr>
</table>
</form>

现在,我的桌子上方有一个按钮

<button type="submit" value="Submit" class="btn btn-primary mb-2" name="B1">Confirm</button>

当我的最终用户单击提交时,我希望将所有值更新到我的 SQL 服务器中,现在因为这是在 for 循环中,我不确定更新查询会去哪里.. 到目前为止我有这个

<%
If request.form("B1")="Submit" Then
If QTY = "" Then
QTY = 0
Else
QTY = request.form("QTY")
'Update SQL'
gsSQL2 = "UPDATE dB SET quant ='" & QTY & "' WHERE ID = '" & request.querystring("ID") & "' And Article = '" & grs.fields("Article") &"'"
gobjConn.Execute(gsSQL2)

(请注意我的代码在我的 IDE 中正确缩进)

现在,当我在 While 循环中单击提交时,我得到了用逗号分隔的 ID 号,所以我知道它正在更新,但我真的不确定我做错了什么......?

任何帮助将不胜感激。

如果需要任何进一步的信息,请告诉我。

预期的输出是在网站上显示一些文章代码代码并从用户那里获取响应,然后将该输出写入我的 SQL dB,其中文章 = 文章和 ID = ID。

对生成内容的主要查询(这与我的示例数据不匹配,但我会发布以防错误出在查询本身)

gsSQL = "SELECT ID, Article, [Item Name] as name, [Stock Quantity] as qty, Built, Boxed, Actual from dB where Store ='" & request.querystring("store") & "' order by [Category], name "
Set grs = gobjConn.Execute(gsSQL)

【问题讨论】:

  • 您的问题是您有很多qty 表单字段。您打开记录集的查询是什么?我将帮助您生成唯一的字段名称,以及在您发布表单时如何更新。
  • 我会把它添加到主帖!谢谢丹
  • @DanB 你有机会参与吗?过去几个小时一直在尝试我的手,但不是很成功。
  • 我正在写我的答案,然后 Sourcery 发布了他的答案。这是一个很好的。这不是比赛!

标签: asp-classic


【解决方案1】:

希望我能正确理解您,您的 id、quant 和 article 已经在数据库中,并且想要更新与 ID 相关的 quant。在这种情况下:

在创建表单的循环中,为每个数字输入一个名称,名称中包含 ID(或者如果您只有一个字段,则将 ID 作为名称)。在你的情况下:

<input type="number" name="qty<%=rs("ID")%>">

然后在操作页面上循环所有字段并进行相应更新,或者对名称进行替换以获取 ID,或者如果您只使用 ID 作为字段名,则无需替换即可:

For Each Item In Request.Form
            fieldName = Item 'This is the ID (with above field name: qtyID where ID is the ID from the DB.
            fieldValue = Request.Form(Item) 'This is the Quantity of that Article ID
            articleid=replace(fieldName,"qty","")

            sql="update table set qty=" + fieldValue + " where id=" + articleid
Next

这样您将浏览表单中的所有字段。我也不确定您是否在 where 子句中同时需要 ID 和文章?一个 ID 可以有多篇文章,反之亦然?

【讨论】:

  • 我很快就会测试,我想我需要 article = article 和 ID = ID,因为我有 450 个唯一用户更新项目,我只想更新相应的项目。所以如果用户 X 有 5 件商品,我想要每件商品的单独数量。
  • 对我的用例给出了一些奇怪的回应(尽管这可能是我缺乏解释)将尝试使用我当前的代码
  • 我几乎可以正常工作-我找不到使用上述方法制作 ID = ID 的方法,充其量我可以遍历输入并将其写入 SQL,但因为它是一个更新语句,它只会用最后一个填充的语句更新所有记录。
  • 这段代码没有回答我的问题,但给了我很好的方向来获得答案。我感谢你不确定谁对你投了反对票!
  • 好的,很高兴你解决了它! :) 对不起,如果我没有完全理解你的问题,但只要它现在有效! 赞一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多