ADO 更新记录

🌙
手机阅读
本文目录结构

ADO 更新记录

我们可使用 SQL 的 UPDATE 来更新数据库表中的某条记录。

更新数据库表中的记录

我们希望更新 Northwind 数据中 Customers 表的某条记录。首先我们需要创建一个表格,来列出 Customers 中的所有记录。

<html>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=Server.CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM customers",conn
%>

<h2>List Database</h2>
<table border="1" width="100%">
<tr>
<%
for each x in rs.Fields
  response.write("<th>" & ucase(x.name) & "</th>")
next
%>
</tr>
<% do until rs.EOF %>
<tr>
<form method="post" action="demo_update.asp">
<%
for each x in rs.Fields
  if lcase(x.name)="customerid" then%>
    <td>
    <input type="submit" name="customerID" value="<%=x.value%>">
    </td>
  <%else%>
    <td><%Response.Write(x.value)%></td>
  <%end if
next
%>
</form>
<%rs.MoveNext%>
</tr>
<%
loop
conn.close
%>
</table>

</body>
</html>

如果用户点击 “customerID” 列中的按钮,会打开一个新文件 “demo_update.asp”。此文件包含了创建输入域的源代码,这些输入域基于数据库中记录的字段,同时也含有一个保存修改的"更新按钮":

<html>
<body>

<h2>Update Record</h2>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"

cid=Request.Form("customerID")

if Request.form("companyname")="" then
  set rs=Server.CreateObject("ADODB.Recordset")
  rs.open "SELECT * FROM customers WHERE customerID='" & cid & "'",conn
  %>
  <form method="post" action="demo_update.asp">
  <table>
  <%for each x in rs.Fields%>
  <tr>
  <td><%=x.name%></td>
  <td><input name="<%=x.name%>" value="<%=x.value%>"></td>
  <%next%>
  </tr>
  </table>
  <br /><br />
  <input type="submit" value="Update record">
  </form>
<%
else
  sql="UPDATE customers SET "
  sql=sql & "companyname='" & Request.Form("companyname") & "',"
  sql=sql & "contactname='" & Request.Form("contactname") & "',"
  sql=sql & "address='" & Request.Form("address") & "',"
  sql=sql & "city='" & Request.Form("city") & "',"
  sql=sql & "postalcode='" & Request.Form("postalcode") & "',"
  sql=sql & "country='" & Request.Form("country") & "'"
  sql=sql & " WHERE customerID='" & cid & "'"
  on error resume next
  conn.Execute sql
  if err<>0 then
    response.write("No update permissions!")
  else
    response.write("Record " & cid & " was updated!")
  end if
end if
conn.close
%>

</body>
</html>

处理“修改”的单击事件,根据编辑框中的数据修改数据库中的数据

代码如下

void CUseAdoDlg::OnButmod()
{
    UpdateData(TRUE);
    if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty()) //数据不能为空
    {
        MessageBox("基础信息不能为空!");     //为空时弹出提示信息
        return;
    }
    int pos   = m_Grid.GetSelectionMark();      //获得当前选中列表项索引
    ADO m_Ado;           //声明ADO类对象
    m_Ado.OnInitADOConn();         //连接数据库
    CString sql = "select * from employees";      //设置查询字符串
    m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);   //打开记录集

    try
    {
        m_Ado.m_pRecordset->Move((long)pos,vtMissing);   //将记录集指针移动到选中的记录
        //设置选中记录的文本
        m_Ado.m_pRecordset->PutCollect("编号",(_bstr_t)m_ID);
        m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name);
        m_Ado.m_pRecordset->PutCollect("学历",(_bstr_t)m_Culture);
        m_Ado.m_pRecordset->Update();      //更新记录集
        m_Ado.CloseRecordset();        //关闭记录集
        m_Ado.CloseConn();          //断开数据库连接
    }
    catch(...)             //捕捉可能出现的错误
    {
        MessageBox("操作失败");        //弹出错误提示
        return;
    }
    MessageBox("添加成功");         //提示操作成功
    m_Grid.DeleteAllItems();          //删除列表控件
    AddToGrid();            //向列表中插入数据
}

提示:在 catch 语句部分我们使用了“…”表示捕捉所有错误,也就是说在 try 语句部分产生任何错误,都会进入 catch 语句块部分进行处理。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了