社区
数据库
帖子详情
怎样知道一个_RecordsetPtr对象是否已经打开了?(ADO问题)
wj_xiazi
2003-10-20 05:57:35
以前我使用ODBC连接数据库,用的是CRecordset类。
它的对象有一个函数IsOpen()。用来判断这个记录集是否已经打开了。
现在我改用ADO来访问数据库,对于一个_RecordsetPtr指针m_pRecordset。我用完后还是要关闭的,那么怎么样检测它是否已经关闭了呢,因为我发现如果使用Close函数来关闭一个已经关闭的_RecordsetPtr对象,会造成异常的。
...全文
132
4
打赏
收藏
怎样知道一个_RecordsetPtr对象是否已经打开了?(ADO问题)
以前我使用ODBC连接数据库,用的是CRecordset类。 它的对象有一个函数IsOpen()。用来判断这个记录集是否已经打开了。 现在我改用ADO来访问数据库,对于一个_RecordsetPtr指针m_pRecordset。我用完后还是要关闭的,那么怎么样检测它是否已经关闭了呢,因为我发现如果使用Close函数来关闭一个已经关闭的_RecordsetPtr对象,会造成异常的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wj_xiazi
2003-10-21
打赏
举报
回复
再问一个问题:
一个记录集不是自己用Open来打开的。而是用
m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdText);
语句来得到的。
那么这个记录集也要手动来关闭吗?
如果是后面还有一个同样的语句:
m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdText);
那是否要在这一句执行之前关闭m_pRecordset ?
sunyuan_01
2003-10-21
打赏
举报
回复
这样的语句是执行SQL查询得到记录集,(就是隐式打开)在查询后记录一定是打开的,使用后当然要关闭,在中间对记录执行的SQL语句,只会影响当时的记录集,如果不是同一记录集,在使用前后,应该自己打开关闭
jkljf
2003-10-21
打赏
举报
回复
楼上说的对,
if (pRecordset->State == adStateOpen)
{
pRecordset->Close();
}
一般这样的, 你用select语句打开一个记录集之后, 需要自己手动关闭;但是如果你用_RecordsetPtr对象执行insert或者delete语句之后, 它被自动关闭了。
sunyuan_01
2003-10-20
打赏
举报
回复
if(pRecordset->State)
pRecordset->Close();
pRecordset.Release();
pRecordset = NULL;
VC++6.0 通过
ADO
连接Access
首先新建
一个
工程名称为
ADO
的基本对话框工程。然后: 1.在头文件stdafx.h 中加入 #import "C:\Program Files\Common Files\System\
ado
\ms
ado
15.dll" no_namespace rename("EOF","rsEOF") 2.在
ADO
DLG.cpp中加入 void C
ADO
Dlg::OnBtnQuery() { CoInitialize(NULL); // 初始化COM环境 _Connection
Ptr
conn(__uuidof(Connection)); // 创建连接
对象
_
Recordset
Ptr
rst(__uuidof(
Recordset
)); // 创建记录集 try { conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;Persist Security Info=False;Jet OLEDB:Database Password=691126" ,"", "", adModeUnknown); //
打开
数据库并建立连接(有密码) //conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;" ,"", "", adModeUnknown); //
打开
数据库并建立连接(没有密码) rst->Open(_variant_t("select * from sheet1"), _variant_t((IDispatch*) conn),
adO
penDynamic, adLockOptimistic, -1); // 读取数据表 while(!rst->rsEOF) { ((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)rst->GetCollect("姓名")); // 查询"姓名"字段 rst->MoveNext(); } } catch(_com_error e) { CString errormessage; // 保存错误信息 errormessage.Format("Error: %s", e.ErrorMessage()); // 设置错误信息的格式 //AfxMessageBox(errormessage); // 以对话框的形式输出错误信息 MessageBox(errormessage,"错误提示"); } //MessageBox("查询结束!","提示",0); rst->Close(); conn->Close(); rst.Release(); // 释放相应COM接口上的引用计数 conn.Release(); CoUninitialize(); // 卸载COM环境库 }
ADO
接口之_
Recordset
Ptr
转自:http://hi.baidu.com/%CE%D2%B6%CF%C1%CB%CB%BC%C4%EE/blog/item/e057c526c6af6c29c995596e.html _
Recordset
Ptr
智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。 要搞清楚:数据库和
ADO
的记录集是两个不同的概念,是存在于不同
VC++中通过
ADO
中的_
Recordset
Ptr
操作数据库:增删改查
VC++中通过
ADO
中的_
Recordset
Ptr
操作数据库:增删改查 https://blog.csdn.net/zhangyulin54321/article/details/8056580 _
Recordset
Ptr
智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。 要搞清楚:数据库和
ADO
的记录集是两个不同的概念,是存在于不...
ADO
接口之 _
Recordset
Ptr
指针
移动记录指针可以通过MoveFirst()方法移动到第一条记录,MoveLast()方法移动到最后一条记录,MovePrevious()方法移动到当前记录的前一条记录,MoveNext()方法移动到当前记录的下一条记录。正值向后移动,负值向前移动。先移动记录指针到要插入的位置,用AddNew()插入一条记录,然后用PutCollect(字段名,值)写入值,最后用Update()更新到数据库;先将记录指针移动到要删除的记录的位置,直接用Delete()方法删除它,并用Update()来更新数据库即可。
_
Recordset
Ptr
使用方法
_
Recordset
Ptr
智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。 要搞清楚:数据库和
ADO
的记录集是两个不同的概念, 是存在于不同物理位置的两个存储空间。 记录集相当于是实际数据的一份拷贝。 正因为记录集是相对脱离数据库而存在的, 所以才存在后面将要介绍的Open方法中涉及的光标类型和锁定类型这两个
问题
。
数据库
4,011
社区成员
39,820
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章