使用ADO对象添加、修改、删除数据
使用ADO对象对数据库中的数据进行添加、修改和删除等操作。首先创建一个ADO类,通过ADO类连接数据库,并打开记录集。
例如,使用ADO对象添加、修改、删除数据,程序设计步骤如下:
(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改“使用ADO对象添加、修改、删除数据”。
(2)向对话框中添加一个列表视图控件、3个静态文本控件、3个编辑框控件和4个按钮控件,并为控件关联变量。
(3)创建一个ADO类,请参照封装ADO对象的内容。
(4)在StdAfx.h导入ADO动态链接库,代码如下。
#import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace
rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库
(5)在对话框的OnInitDialog函数设置列表视图控件的扩展风格以及列标题,代码如下。
m_Grid.SetExtendedStyle(LVS_EX_FLATSB //扁平风格显示滚动条
|LVS_EX_FULLROWSELECT //允许整行选中
|LVS_EX_HEADERDRAGDROP //允许整列拖动
|LVS_EX_ONECLICKACTIVATE //单击选中项
|LVS_EX_GRIDLINES); //画出网格线
//设置列标题及列宽度
m_Grid.InsertColumn(0,"编号",LVCFMT_LEFT,110,0);
m_Grid.InsertColumn(1,"姓名",LVCFMT_LEFT,110,1);
m_Grid.InsertColumn(2,"学历",LVCFMT_LEFT,110,2);
AddToGrid(); //向列表中插入数据
(6)添加AddToGrid函数,用来向列表视图控件中插入数据,代码如下。
void CUseAdoDlg::AddToGrid()
{
ADO m_Ado; //声明ADO类对象
m_Ado.OnInitADOConn(); //连接数据库
CString SQL = "select * from employees order by 编号 desc"; //设置查询字符串
m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL); //打开记录集
while(!m_Ado.m_pRecordset->adoEOF) //记录集不为空时循环
{
m_Grid.InsertItem(0,""); //向列表视图控件中插入行
//向列表视图控件中插入列
m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("编号"));
m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名"));
m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("学历"));
m_Ado.m_pRecordset->MoveNext(); //将记录集指针移动到下一条记录
}
m_Ado.CloseRecordset(); //关闭记录集
m_Ado.CloseConn(); //断开数据库连接
}
(7)处理“添加”按钮的单击事件,将编辑框中的文本添加到数据库中,代码如下。
void CUseAdoDlg::OnButadd()
{
UpdateData(TRUE);
if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty()) //数据不能为空
{
MessageBox("基础信息不能为空!"); //为空时弹出提示信息
return;
}
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->AddNew(); //添加新行
//向数据库中插入数据
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(); //向列表中插入数据
}
(8)处理列表视图控件的单击事件,在列表项被选中时,将列表项中的数据显示到编辑框中,代码如下。
void CUseAdoDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
int pos = m_Grid.GetSelectionMark(); //获得当前选中列表项索引
//获得列表项数据
m_ID = m_Grid.GetItemText(pos,0);
m_Name = m_Grid.GetItemText(pos,1);
m_Culture = m_Grid.GetItemText(pos,2);
UpdateData(FALSE); //更新控件显示
*pResult = 0;
}
(9)处理“修改”的单击事件,根据编辑框中的数据修改数据库中的数据,代码如下。
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语句块部分进行处理。
(10)处理“删除”按钮的单击事件,删除列表框中被选中的列表项,代码如下。
void CUseAdoDlg::OnButdel()
{
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(pos,vtMissing); //将记录集指针移动到选中的记录
m_Ado.m_pRecordset->Delete(adAffectCurrent); //删除选中的记录
m_Ado.m_pRecordset->Update(); //更新记录集
m_Ado.CloseRecordset(); //关闭记录集
m_Ado.CloseConn(); //断开数据库连接
}
catch(...) //捕捉可能出现的错误
{
MessageBox("操作失败"); //弹出错误提示
return;
}
MessageBox("删除成功"); //提示操作成功
OnButclear(); //清空编辑框中数据
m_Grid.DeleteAllItems(); //删除列表控件
AddToGrid(); //向列表中插入数据
}
使用ADO对象添加、修改、删除数据的更多相关文章
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- Web 1三级联动 下拉框 2添加修改删除 弹框
Web 三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 关于给javascript对象添加、删除、修改对象的属性
以下是自己总结的几种方法 利用动态特性 function Person(){}; var person = new Person(); person.name = 'yy'; person.gende ...
- ORM简介 单表添加修改删除表记录
---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...
- python对MySQL进行添加修改删除以及字符串的操作
# coding=UTF-8 import MySQLdb def dbDperate(sql,param): "定义数据库的添加,修改和删除操作" #获取数据库的连接对象 con ...
随机推荐
- ios 中Category类别(扩展类)小结
类别 类别是一种为现有的类添加新方法的方式.利用Objective-C的动态运行时(runtime)分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为 ...
- FbinstTool(U盘启动盘制作工具) v1.606 免费绿色版
软件名称: FbinstTool(U盘启动盘制作工具) v1.606 免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP / W ...
- python--zeros函数和ones函数
使用numpy.zeros,numpy.ones,numpy.eye等方法可以构造特定的矩阵 例如: 代码如下: >>>from numpy import * >>> ...
- 10.按要求编写Java应用程序。 (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
package com.hanqi.test; public class People { private String name,sex; private int age; private doub ...
- 华中农业大学新生赛C题
http://acm.hzau.edu.cn/problem.php?id=1099 题意: 输入两个整数 l 和 n,代表半径和output的保留小数点位数. 输出圆的面积,保留n位小数. 一开始觉 ...
- apicloud教程
http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=15939
- log4j2配置MDC分线程写日志
1.MDC是一个高级一些的工具,可以配置分用户(userid)写日志,也可以分线程 2.方法和道理都是相似的,在写入日志之前配置线程名或者用户id 3.如果将线程名配置为目录,可以将不同线程的日志输送 ...
- python多线程,多进程
线程是公用内存,进程内存相互独立 python多线程只能是一个cpu,java可以将多个线程平均分配到其他cpu上 以核为单位,所以GIL(全局锁,保证线程安全,数据被安全读取)最小只能控制一个核,很 ...
- ADPCM编码和解码
原文:http://www.znmcu.cn/znx_51_alltest_shell_fj_adpcm1.html ADPCM音频解码,其实放在这里有些不太合适. 在编写ZN-X开发板整板测试程序的 ...
- Servlet基础知识
基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...