程序继承CRecordView,访问数据库
1、是不是一个CRecordView自能绑定一个表,如果多个表如何操作
2、自己新建了一个CRecordSet,但是执行里面的数据库操作,如MoveFirst()都会出现错误:
First-chance exception in ODBC.exe (ODBC32.DLL): 0xC0000005: Access Violation.
请问新建一个CRecordSet,在vc中绑定odbc数据源和表后,还需要什么操作,用Open也出现错误

解决方案 »

  1.   

    1.通过sql语句,而不要绑定表
    2.CRecordSet等是否初始化,创建是否成功..
      

  2.   

    1、采用创建SDI继承CRecordView,VC自动设置ODBC数据源和表
    2、我自己新建一个类继承CRecordSet,按照VC的设置绑定了数据源和表,
    然后和CRecordView默认创建的CRecordSet一样设置,先是定义CMyRecordSet* m_pRecordSet;
    在构造函数中m_pRecordSet=NULL;然后在初始化中m_pRecordSet=&GetDocument()->m_oDBRecordSet;
      

  3.   

    1.一个CRecordView对象是在控件中显示数据库记录的视。它是一种直接连接到一个CRecordset记录集对象上的格式视。此视是从一个对话框模板资源创建的,并将CRecordSet对象的字段显示在对话框模板的控件中.
    而一个CRecordset记录集可以处理不止一个表,能够处理多个表。所以CRecordView类能
    处理多个表,主要是借助于CRecordset类2.绑定odbc数据源和表后,其他的操作就是查询,删除等这些也不会出现那个错误啊,还不清楚怎么回事
      

  4.   

    m_pRecordSet=&GetDocument()->m_oDBRecordSet;
    确定下此时的m_pRecordSet是否为空
    ASSERT(m_pRecordSet != NULL);
      

  5.   

    m_pRecordSet是有值的0x00385184
    但是调用m_pRecordSet->MoveFirst()就出错了has exited with code 0 (0x0).
      

  6.   

    一般使用MoveFirst()函数,先检查下当前的状态使用CRecordsetStatus
    GetStatus()如果当前记录索引号为0就不再使用MoveFirst()函数了虽然这里的m_pRecordSet指针不为空,但是使用指针的时候要特别注意,
    这里的m_pRecordSet=&GetDocument()->m_oDBRecordSet; 
    获取的m_pRecordSet就是指向当前记录集的指针
    既然m_pRecordSet->Open()函数也出错的话,改用对象是,不用指针试试。
      

  7.   

    不用指针,改用对象已经没问题了,不知道什么原因
    还有第二个问题,用CRecordSet创建的时候必须选择ODBC数据源和表
    在程序使用的时候需要访问多个表的时候如何处理?
      

  8.   

    如果选择多个表
    CMyRecordSet test;
    test.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from IDstudent");
    出现错误:Open() 无效的描述器索引
    CMyRecordSet test;
    test.Open(CRecordset::forwardOnly,"select * from IDstudent");
    出现错误:无效的字符值或规格 在列名3
      

  9.   

    这里的m_pRecordSet=&GetDocument()->m_oDBRecordSet; 
    获取的m_pRecordSet很可能不是指向当前记录集的指针 ,导致出错
    但他也不为空。
    使用CRecordset类访问多个表和访问一个表类似,在创建自己的
    类继承于CRecordset类,添加表的时候选择多个表就可以了
    可以看到的在自己的类中的
    CString CXXXRecordset::GetDefaultSQL()
    {
    return _T("[XXX1],[XXX2]");//表1表2
    }这两个表的所有字段都会写在
    DoFieldExchange(CFieldExchange* pFX)下其实处理多个表和处理单个表类似,通过引用相应的字段操作某个表
    在操作过程中可能需要一些判断
      

  10.   

    多谢mmilmf
    问题解决了,
    有没有好的数据方面的书推荐一下
      

  11.   

    数据的书,我也没看过多少,主要是PB中用的多基础的看下
    Visual C++数据库开发基础与应用  
    周启涛, 高英  人民邮电出版社  Visual C++数据库系统开发完全手册 
    这个比较核心,也是人民邮电的