该类相当于mfc中的CRecordset,标记记录集,打开数据库之后,可以调用它查询和修改数据库,参数是SQL语句。但是之前在一个机器上,只要在类的头文件中设置ODynaset m_dynaset;也就是将它设置为全局变量,编译时就会报错:Debug Assertion failure,内存地址错误,但是将它设置为局部变量就一切正常了。
换了一台机器,操作系统全都重新安装,ORACLE也都配置好之后,可以设置它为全局变量了,这样省事不少的,但是问题又出现了,查询语句时,读出来记录是0条,如果仅仅将语句写为select * from tablename时,可以得到正确的记录条数,但是,显示到控件中时,只显示了一条,而且都是乱码,烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫。这个应该是字符集的问题吧,不知道该如何设置。
CListCtrl显示中文乱码的问题解决
在Project->Setting->C/C++->Preprocessor definenation中加上_UNICODE
还有在Project->Setting->Link->Entry-point symbol中加上wWinMainCRTStartup
那个Entry-point symbol 在Category的Output选项中
就是使用Unicode版本。这样会彻底解决上述乱码问题。
将代码中需要类型转换的都转换后,编译又出现这样的问题:fatal error LNK1104: cannot open file "mfc42u.lib"
问题是默认的VC缺少对Unicode的支持,而这个代码恰恰就是按照Unicode发布,要使用Unicode编译。解决方案很简单,从VC的安装盘中拷贝文件“MFC42U.LIB”、“MFC42UD.LIB”、“MFCS42U.LIB”、“MFCS42UD.LIB”、"MFCO42UD.LIB"几个对Unicode支持的代码“VC的安装目录/VC98/MFC/Lib”下即可,不必要重装:)。
这时,编译通过了。
点击运行,弹出消息框,提示找不到 MFC42UD.DLL,MFCO42UD.DLL,于是把他们都找出来放到windows/system32下。
运行通过,也能连接数据库成功了,但是依然是乱码,唯一不同的是,乱码变成了另外一个字了
这下好了,全变乱码了,连之前AfxMessageBox()中显示的内容都成乱码了,该咋办?
然后是这个问题搞定了,但是CListCtrl中InsertItem方法调用只能显示一行数据,的确可以MoveNext,但是只要调用InsertItem它就只显示一行(ListCtrl显示多列时会出现这种情况,如果只显示一列就很正常)。ODynaset和CListCtrl完全是两个类库中的东西,难道这两者有冲突?此时的ODynaset,我将它设置成了全局变量。后来我把ODynaset设置为局部变量,CListCtrl对象就可以显示正常了,这真是有点搞不懂了。