ADO访问Access数据库错误解决心得随笔
最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下。
- 环境
win7 x86系统;
VS2012编译器;
Office2010;
Access2000~Access2003连接串建立数据库连接。
- 关键数据库操作代码
BOOL CAccessDatabase::Query(const CString strSQLString, UINT nFieldNumber, vector<vector<_variant_t> >& vecvecVariant)
{
_variant_t Variant;
vector<_variant_t> vecVariant; EnterCriticalSection(&m_cs); _RecordsetPtr pRecordset = NULL;
HRESULT hr = S_FALSE;
try
{
hr = pRecordset.CreateInstance(_T("ADODB.Recordset"));
if (SUCCEEDED(hr))
{
hr = pRecordset->Open(strSQLString.AllocSysString(), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
if (SUCCEEDED(hr))
{
if (!pRecordset->adoEOF)
{
hr = pRecordset->MoveFirst();
if (SUCCEEDED(hr))
{
while (!(pRecordset->adoEOF))
{
vecVariant.clear();
for (UINT i = ; i < nFieldNumber; ++i)
{
ZeroMemory(&Variant, sizeof(Variant));
Variant = pRecordset->GetCollect(_variant_t((long)i));
vecVariant.push_back(Variant);
}
vecvecVariant.push_back(vecVariant); hr = pRecordset->MoveNext();
}
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("移动记录集指针到首部发生错误")); if (pRecordset->GetState() != adStateClosed)
{
hr = pRecordset->Close();
if (FAILED(hr))
{
m_pLogFile->WriteLog(GetLastError(), _T("关闭记录集失败"));
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("记录集已关闭"));
}
} if (pRecordset != NULL)
{
pRecordset.Release();
pRecordset = NULL;
}
LeaveCriticalSection(&m_cs);
return FALSE;
}
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("查询的记录集为空"));
}
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("打开记录集失败")); if (pRecordset != NULL)
{
pRecordset.Release();
pRecordset = NULL;
}
LeaveCriticalSection(&m_cs);
return FALSE;
}
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("初始化记录集失败")); pRecordset = NULL;
LeaveCriticalSection(&m_cs);
return FALSE;
}
}
catch (_com_error e)
{
m_pLogFile->WriteLog(e.ErrorMessage());
AfxMessageBox(e.ErrorMessage());
LeaveCriticalSection(&m_cs);
return FALSE;
} if (pRecordset->GetState() != adStateClosed)
{
try
{
hr = pRecordset->Close();
if (FAILED(hr))
{
m_pLogFile->WriteLog(GetLastError(), _T("关闭记录集失败"));
}
else
{
m_pLogFile->WriteLog(GetLastError(), _T("记录集已关闭"));
}
}
catch (_com_error err)
{
m_pLogFile->WriteLog(err.ErrorMessage());
AfxMessageBox(err.ErrorMessage());
}
} if (pRecordset != NULL)
{
pRecordset.Release();
pRecordset = NULL;
} LeaveCriticalSection(&m_cs); return TRUE;
}
- 数据库调用代码
if (!Database.Query(_T("select ZoneName from Zone"), , vecvecZone))
{
LogFile.WriteLog(GetLastError(), _T("从数据库中获取客户端名称失败"));
AfxMessageBox(_T("从数据库中获取客户端名称失败"));
return;
}
- 错误问题
- 程序在Query里面产生了异常。在调用pRecordset->Open(...)的时候产生了异常,异常错误信息是“未指定的错误”;
- 将调用的Sql语句放到Access数据库中可以正确执行。
- 解决办法
- 将数据库的表名"Zone"修改为"MyZone"等其它名称即可。
- 总结
- 在编程访问Access数据库时表名不能为"Zone"。
- 代码上传
- 下载连接:http://pan.baidu.com/s/1mgFlOqk
ADO访问Access数据库错误解决心得随笔的更多相关文章
- x64 win64编译环境下ADO链接Access数据库的问题解决
原文链接地址:https://blog.csdn.net/HW140701/article/details/71077579 Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错, ...
- ADO访问Oracle数据库,连接异常(Unknown error 0x800a0e7a)
ADO访问Oracle数据库,连接异常(Unknown error 0x800a0e7a) 代码如下:执行Open过程中出现异常,信息为Unknown error 0x800a0e7a C++ Co ...
- C#.NET ORM 如何访问 Access 数据库 [FreeSql]
最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没.依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群: ...
- [转载]Unity3D 访问Access数据库
在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...
- Excel中使用VBA访问Access数据库
VBA访问Access数据库 1. 通用自动化语言VBA VBA(Visual Basic For Application)是一种通用自动化语言,它可以使Excel中的常用操作自动化,还可以创建自定义 ...
- Unity访问Access数据库
首先,准备工作: 创建一个Access 数据库,命名AccessTest.accdb,添加一些数据用于测试 准备System.Data.dll与System.EnterpriseServices.dl ...
- 如何使用.net访问Access数据库 (转)
前言:今天整理程序,看到之前写的一个Demo,也不知道是从哪里参考的了,写到这里,留作备用吧. 使用.net访问Access数据库:1.BL层:新增一个DataAccess类. Code].Defau ...
- php连接Access数据库错误及解决方法
<?php $connstr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data.m ...
- MFC通过ADO操作Access数据库
我在<VC知识库在线杂志>第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读.写Excel表格文件”和“直接通过DAO读.写Access文件”,先后给大家介绍了ODBC和DAO两 ...
随机推荐
- RocketMQ术语[转]
RocketMQ RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点:能够保证严格的消息顺序 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 ...
- jQuery-ajax: 取消关注|关注
ylbtech-jQuery-ajax: 取消关注|关注 1.A,jQuery-效果图返回顶部 1.B,jQuery-Source Code(源代码)返回顶部 <script src=&qu ...
- Mac下配置JAVA_HOME
http://blog.csdn.net/shallowgrave/article/details/39367119 闲来无事,装个Hbase玩玩,突然发现Mac下默认安装的JDK7,没有配置JAVA ...
- Java多线程之线程中断
该例子说明,Sleep可以被中断,但是I/O和synchronized不能被中断. package Thread.Interrupting; import java.io.IOException; i ...
- XtraReport 实例化 打印
// Create a report instance, assigned to a Print Tool. ReportPrintTool pt = new ReportPrintTool( ...
- dedecms v5.7 sp1 给栏目添加缩略图功能
一.给数据库添加字段typeimg 如图: 二 . 修改 dede/catalog_add.php 找到 $in_query = "INSERT INTO `#@__arctype`(r ...
- [Flex] IFrame系列 —— IFrame嵌入html后Alert弹出窗口被IFrame遮挡问题
<?xml version="1.0" encoding="utf-8"?> <!--- - - - - - - - - - - - - - ...
- [Flex] ButtonBar系列——arrowKeysWrapFocus属性如果为 true,则使用箭头键在组件内导航时,如果击中某一端则将折回。
<?xml version="1.0" encoding="utf-8"?> <!--arrowKeysWrapFocus 如果为 true, ...
- Java SE 第十一讲----面向对象特征之封装2
1.如果一个类包含了属性跟方法,那么该类的每一个对象都具有自己的属性,但无乱一个类有多少个对象,这些对象共享同一个方法. 2.关于方法参数传递的总结: 对于Java中的方法参数传递,无论传递的是原生数 ...
- Flexigrid例子二: 原位编辑器
有时候,我们想要编辑flexigrid里的数据.一个原位编辑器是需要的,现在不需要再弹出一个对话框了.这里我会展示如何做到这点. 我使用了jquery-in-place-editor库.请参考官方站点 ...