2 qq 28254507 qq_28254507 于 2016.03.03 15:39 提问

MFC ADO OnSelchangeListaccess()报错问题

之前没用过ADO,学习过程中使用OnSelchangeListaccess()报错了,代码如下:

 BOOL CDataBaseMFCTestDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);         // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    ////////////////////////////////////////////////////////////////////////////////////////////

    // 使用ADO创建数据库记录集  
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,  
    // 因为它有时会经常出现一些想不到的错误。jingzhou xu  
    try
    {
        m_pRecordset->Open("SELECT * FROM DemoTable",                // 查询DemoTable表中所有字段  
            theApp.m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针  
            adOpenDynamic,
            adLockOptimistic,
            adCmdText);
    }
    catch (_com_error& e)
    {
        dump_com_error(e);
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    _variant_t var;
    CString strName, strAge;
    // 清空列表框  
    m_AccessList.ResetContent();
    strName = strAge = "";
    // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,  
    // 因为它有时会经常出现一些想不到的错误。jingzhou xu  
    try
    {
        if (!m_pRecordset->BOF)
            m_pRecordset->MoveFirst();
        else
        {
            AfxMessageBox("表内数据为空");
            return false;
        }
        // 读入库中各字段并加入列表框中  
        while (!m_pRecordset->adoEOF)
        {
            var = m_pRecordset->GetCollect("Name");
            if (var.vt != VT_NULL)
                strName = (LPCSTR)_bstr_t(var);
            var = m_pRecordset->GetCollect("Age");
            if (var.vt != VT_NULL)
                strAge = (LPCSTR)_bstr_t(var);
            m_AccessList.AddString(strName + " --> " + strAge);
            m_pRecordset->MoveNext();
        }
        // 默认列表指向第一项,同时移动记录指针并显示  
        m_AccessList.SetCurSel(0);
        OnSelchangeListaccess();
    }
    catch (_com_error& e)
    {
        dump_com_error(e);
    }


    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

说OnSelchangeListaccess()未定义标识符,原因在哪

2个回答

caozhy
caozhy   Ds   Rxr 2016.03.03 15:43
已采纳

OnSelchangeListaccess()方法是否存在,大小写是否正确,是否缺少头文件。

qq_28254507
qq_28254507 问题已经解决了。函数是自己写的
2 年多之前 回复
qq_28254507
qq_28254507 回复caozhy: http://blog.csdn.net/zyq5945/article/details/5541280麻烦看一下文章。可是他后面几处都用到了啊。。
2 年多之前 回复
caozhy
caozhy 回复ProgJ: 看了下代码,这个函数没用,可以直接删掉OnSelchangeListaccess();这行
2 年多之前 回复
qq_28254507
qq_28254507 这个方法我倒是没有自己添加。。请问如何添加这个方法?它的作用是// 移动记录指针到新的位置
2 年多之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.05 16:03

我觉得ADO完全可以不用了,大量更好用的数据库可以选择

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
vs2010 MFC +win7下的程序 在win7上正常运行,XP就出错(ADO数据库连接出错)
写的一个软件,以数据库文件mdb作为打开文件。 使用ADO连接数据库, 引入了msado15.dll。以前一直很正常。 最近的版本总是在xp上测试打开、新建文件都失败。出现的错误是unknow software exception... 找了几天错误,终于发现不是自己的代码问题。而可能是编译环境问题。于是重装了两次vs2010。问题依旧。 好不容易找到下面这篇文章。发现是a
vs2010 MFC +win7下的程序 在win7上正常运行,Server2008就出错(ADO数据库连接出错)
ADO 应用程序不在运行级别较低的操作系统运行的解决方案 我的机子是WIN7系统,在WIN7下开发的MFC ADO应用程序到XP上就不能运行了。 解决方案如下: 1、先下载下面的文件 32位WIN7系统:Msado60_Backcompat_i386.tlb 64位WIN7系统(INTEL平台):Msado60_Backcompat_i386.tlb 和Msado60_Backcom
x64 win64编译环境下ADO链接Access数据库的问题解决
Win32编译环境下,用ADO数据库连接Access数据库一般都不会报错,但是最近由于项目上的需要,程序需要编译成64位以便申请到更多的使用内存空间,当把编译方式从Win32改为x64的时候,突然出现了数据库连接出现未知错误,这时候就猜到了应该是编译环境的改变导致了数据库连接出错,在参考了其他大神的解决方案之后,终于解决了这个问题,我的环境为Win7 64+MFC(VS2010)+ADO+Ac
VC++ 通过ADO连接数据库查询时返回空值报错的解决方案
当数据库的字段值允许为空时, 而且此时内容也为空时,则执行查询会出错,例如 CString str = pRecordset->GetFields()->GetItem((long)0)->GetValue(); 或者 str= pRecordset->GetCollect("posInfo");    会弹出如下窗口提示出错!       更加奇怪的是  catch(.
MFC ADO连MySQL,使用数据源.
MFC ADO连MySQL 1、装好MySQL ODBC驱动后
在VS2010下MFC采用ADO方式连接ACCESS数据库(详细过程)
第一步:首先建立基于对话框的MFC应用程序Library,然后添加一个用户登录界面如图: 并建立此对话框的类LoginDlg ,在类中新建两个变量CString m_strName;  CString m_strPassword;并完善相应的构造函数和DoDataExchange 部分代码如下: LoginDlg::LoginDlg(CWnd* pParent /*=NUL
VS2010下MFC通过ADO连接Access数据库
VS2010下MFC通过ADO连接Access数据库
ADO中正常使用GetRecordCount解决方法
有时候使用GetRecordCount函数,总是返回-1,这是跟客户端游标有关,如果ado组件在客户端使用的前向只读游标,就无法返回结果集的条数,只能返回-1,改成静态游标或键集游标就行了。  修改方法:_ConnectionPtr   m_pConnection;     hr=m_pConnection.CreateInstance(__uuidof(Connection)   );  
mfc采用ado连mysql数据库
因为这个问题经常忘记,总是不记得流程,故把具体流程写在这里供以后参考。 首先建立mfc应用程序,把你想要拿上去的空间贴上去 之后在stdafx.h里添加这样一句话:#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
MFC中ADO方式操作数据库实例
连接ACCESS为例:  C++代码   //头文件   #pragma once           #include "math.h"           #import "MSADO15.DLL"   rename_namespace("ADOWE") rename("EOF","EndOfFile")      using namespace ADOWE