2012-12-18 72 views
2

我有一個顯示包含用戶信息的用戶表的頁面。我希望能夠通過點擊每行末尾的按鈕來更新表中的一行。我對編碼完全陌生,所以如果有人能夠幫助我,並且「愚蠢」地回答他們的問題,我會非常感激。如何使用ADO更新SQL表中的行

謝謝!

這是我試過的代碼,但似乎無法使其工作。

<html> 
<body> 

<% 
Dim conn, oRs, ID, sql 
Set Conn=Server.CreateObject("ADODB.Connection") 
ID = Request.Form("ID") 

If Request.Form("ID")="" then 
    Set oRs=Server.CreateObject("ADODB.Recordset") 
    oRs.open "SELECT * FROM tICTStaff WHERE ID ='" & ID & "'",Conn 
    %> 
    <form method="post" action="employeeUpdate.asp"> 
    <table> 
    <%for each x in oRs.Fields%> 
    <tr> 
    <td><%=x.name%></td> 
    <td><input name="<%=x.name%>" value="<%=x.value%>"></td> 
    <%next%> 
    </tr> 
    </table> 
    <br /><br /> 
    </form> 
<% 
Else 
    sql="UPDATE table_name SET " 
    sql=sql & "Forename ='" & Request.Form("Forename") & "'," 
    sql=sql & "Surname ='" & Request.Form("Surname") & "'," 
    sql=sql & "Active ='" & Request.Form("Active") & "'," 
    sql=sql & "Address ='" & Request.Form("Address") & "'," 
    sql=sql & "DOB ='" & Request.Form("DOB") & "'," 
    sql=sql & " WHERE ID ='" & ID & "'" 
    on error resume next 
    Conn.Execute sql 
    If err<>0 then 
     Response.Write("Error updating Record!") 
    Else 
     Response.Write("Record " & ID & " was updated!") 
    End If 
End if 
Conn.close 
%> 
<meta HTTP-EQUIV="REFRESH" content="0; url=Page.index.asp?msg=The record has been updated!"> 
</body> 
</html> 
+0

你提到了ADO,但用「asp-classic」標記了你的問題。你確定你是在經典的asp做這個嗎? – ulluoink

+0

@ulluoink - 我不想讓你爲我寫代碼,那會很棒,但我不會通過這樣做來學習任何東西。我會將我嘗試過的代碼複製到原始文章中,但在提出最初問題時,我忘了這麼做。我正在用ASP編寫它,不確定它爲什麼會出現在ASP Classic中,我一定做錯了什麼。 – CodingNewbie

+0

好吧你正在使用asp-classic。 – ulluoink

回答

0

您的腳本中有幾個問題。

  1. SQL注入!通知你自己關於SQL注入並重寫你的整個腳本以避免這種情況!在做其他事情之前先做。
  2. 您正在測試如果Request.Form("ID")""。但是在你的選擇中你使用它,雖然它是一個空字符串。
  3. 在傳統asp中使用on error resume next時,必須使用on error goto 0「關閉」錯誤處理。否則,on error resume next將用於腳本的其餘部分。
  4. 你想通過refresh meta標籤實現什麼?

我給你的建議是:

  1. 閱讀有關有關SQL注入
  2. 試着製作一個剛剛列出來自tICTStaff的記錄的頁面。
  3. 然後製作第二頁來編輯這些記錄。當您點擊第一頁上的編輯按鈕時,導航至編輯頁面並從tICTStaff加載該特定記錄。
  4. 在您的編輯頁面上,製作一個舒適的窗體並實現該特定記錄的更新例程。

在您的網站的概述使鏈接,像這樣:

<% 
Set oRs = Server.CreateObject("ADODB.Recordset") 
oRs.open "SELECT * FROM tICTStaff", Conn 
do while not oRS.eof %> 
    <tr> 
    <td></td> 
    <td></td> 
    <td></td> 
    <td><a href="update.asp?id=<%=oRS.fields("ID").value%>">link to detail/update page</a></td> 
    </tr> 
    <% oRS.movenext 
loop %> 

您update.asp頁面上加載的記錄與查詢字符串的ID和顯示,像這樣的形式:

<% 
dim myID : myID = request.querystring("ID") 
if myID = "" then myID = request.form("ID") 

' update record 
if request.form("submit01") = "update" then 
    sql = "update tICTStaff set fieldName1 = ? WHERE ID = ?" 
    set cmd = server.createobject("adodb.command") 
    cmd.activeconnection = Conn 
    cmd.CommandType = adCmdText 
    cmd.commandtext = sql 

    cmd.parameters.append cmd.createparameter("fieldName1", adVarchar, , 512, request.form("fieldName1")) 
    cmd.parameters.append cmd.createparameter("id", adInteger, , , myID) 
    set oRS = cmd.execute 
end if 


' load record 
sql = "select * from tICTStaff where id = ?" 

set cmd = server.createobject("adodb.command") 
cmd.activeconnection = Conn 
cmd.CommandType = adCmdText 
cmd.commandtext = sql 
cmd.parameters.append cmd.createparameter("id", adInteger, , , myID) 
set oRS = cmd.execute 

' now you have a recordset with the record from tICTStaff with the ID 
%> 
<!-- display the form --> 
<form name="" method="post"> 
<input type="hidden" name="id" value="<%=myID%>"> 

<!-- more fields to be edited --> 
<input type="text" name="fieldName1" value="<%=oRS.fields("fieldName1").value%>"> 

<input type="submit" name="submit01" value="update"> 
</form> 

完全不同的解決方案(基於AJAX):

正如你想要某種o f整個表的「批量更新」功能,請嘗試帶有AJAX調用的jQuery。因此,點擊每行末尾的按鈕,即可向您的ASP站點發送AJAX請求,輸入字段的值爲記錄的ID(tICTStaff表的主鍵)。

在ASP頁面,您處理Ajax請求,並生成一個UPDATE語句來更新tICTStaff表所示:

UPDATE tICTStaff 
SET fldname1 = fldVal1, fldname2 = fldVal2 
WHERE ID = postedID 

要了解jQuery的AJAX,看看here

+0

好吧,我將閱讀SQL注入並重寫我的代碼。我已經有了一切,我有一個顯示信息的頁面,我有一個更新頁面,其中有可用的更新鏈接,但沒有代碼。我一直在努力的是能夠編輯一行數據。 – CodingNewbie

+0

你的意思是sql更新子句或可能用一些記錄「羣發編輯」一個html表嗎? – ulluoink

+0

我目前正在顯示一張充滿數據的表格,並且希望能夠編輯例如用戶名稱或其DOB。所以我希望能夠點擊一個按鈕並在行中編輯一些信息,但我正在努力實現它的功能。我之前使用更新函數來更新特定的內容,但我從來沒有寫過更新函數來接受我想更新的行的唯一標識。 – CodingNewbie