我继承了CRecordSet类,生成MyRecord类
我在调用MyRecord类对象打开数据源的时候总是会弹出登陆对话框,要求输入密码。
可是我不希望那样,在网上搜索下,看到可以去掉登陆对话框。
就是设置CDataBase *pDb;
pDb->OpenEx("DSN=mydata;UID=winnix;PWD=winnix",CDatabase::noOdbcDialog);
然后我在MyRecord类的构造函数中设置如下:
myrecord::myrecord(CDatabase* pdb)
: CRecordset(pdb)
{

m_nDefaultType = dynaset;
pdb->OpenEx("DSN=mydata;UID=winnix;PWD=winnix",CDatabase::noOdbcDialog);

}
这样编译链接都没有问题,可是在运行的时候就挂掉了
访问了不能读的内存区域。
忘高手指点。
我CRecordSet对象的CDataBase对象在哪里,要怎么去设置然后消除掉登陆对话框
谢谢

解决方案 »

  1.   

    这个问题我以前也碰到过,看你用什么数据库了,sql-server好像把sa用户改为以Windows用户登录就没有对话框了
      

  2.   

    你的CDatabase传递进来的是一个指针, 这个指针在传递进来之前申请了内存空间没有??
      

  3.   

    而且生成MyRecord类中也没有CDatabase对象数据成员啊
      

  4.   

    找一下CDatabase类型变量定义的地方..
      

  5.   

    断点跟踪以后确实发现pdb指针是野指针,没有初始化
    pdb 0x00000000 {CDatabase}
    现在关键是怎么样来初始化它。
    为什么我不加pdb->OpenEx("DSN=mydata;UID=winnix;PWD=winnix",CDatabase::noOdbcDialog); 这句,弹出登陆对话框,可以正确连上数据库。
    谢谢大家的关注
      

  6.   

    确实找不到有CDatabase类型变量定义哦
    应该是我在用CLASSWIZARD建立MyRecord类的时候生成了的
    可是在MyRecord类定义里面没有。郁闷
      

  7.   

    我给你发送了CSDN消息,方便的话,把代码发给我看看..