0

少し簡単にするために、質問を言い換えることにしました。私は3つのフィールドを持つフォームを持っています

<form class="contact_form" action="divProgramProcess.asp" method="post" name="contact_form">
Couch: <input type="text"  name="Couch_Current" id="Couch_Current" />
<br/>
Available:  
<input type="text"  name="Available_Current" id="Available_Current"  />
<br/>
Shipment:
<input type="text" name="Shipment_Current" id="Shipment_Current" />   
<input type="submit" value="submit" ></form>    

フォームは、次のコード divProgramProcess.asp (以下を参照) を呼び出します。

<%  
divrec = request.QueryString("div")
Set rstest = Server.CreateObject("ADODB.Recordset")
rstest.locktype = adLockOptimistic sql = "SELECT top 1 * FROM CensusFacility_Records WHERE  division_program = 'Division 1' and jmsday ='Sun' order by JMSUpdateDateTime desc "
rstest.Open sql, db
%>

<%
Shipment_Current = request.form("Shipment_Current")
Couch_Current = request.form("Couch_Current")
Available_Current = request.form("Available_Current")

rstest.fields("Shipment") = Shipment_Current
rstest.fields("Couch") = Couch_Current
rstest.fields("Available") = Available_Current
rstest.update
Response.Redirect("chooseScreen.asp")
%>

ここで、列「JMSUpdateDateTime」は日付フィールドであり、division_program 列名の下に「Division 1」のレコードが複数あることに注意してください。SQL テーブルの最後の行を更新しようとしていますが、このスクリプトを実行するたびに、最後のレコードではなく、最初のレコードのみを「部門 1」で更新します。簡単に言うと、部門 1 を含む 10 のレコードがあります。それらのすべてに日付タイムスタンプ列があります。最後のレコードを更新するにはどうすればよいですか?

4

2 に答える 2

2

レコードセットを介して更新する代わりに、実際の UPDATE ステートメントを実行します。基本的に、次の 2 つの手順が必要です。

  1. SELECT TOP 1 ...クエリを実行しますが、テーブルから主キー/ID フィールドのみを取得し (" * " ではありません)、一時変数に保存します。
  2. 実際の SQL を実行する"UPDATE CensusFacility_Records SET Shipment = ... WHERE TABLE_ID = " & yourTempVariable

(パラメーターをクエリ文字列にインラインで追加するのではなく、パラメーター化されたクエリを作成することをお勧めします)。このようにして、特定のレコードを実際に更新することが保証されます。

于 2013-08-26T03:36:57.210 に答える