使用ODynaset类

该类相当于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()中显示的内容都成乱码了,该咋办?

后来,找到了问题的症结所在,当然不是我找到的,我也想过,但是并没有在意。
我用了char*,但没有赋初值,导致后面的输出和显示都是乱码,在9月份我给江西几家医院写博思接口打印发票的时候,就使用了CHAR指针,也遇到了同样的问题,当时很快解决了,是同事跟我讲的。看来过了2个月,我并没有吸取教训呀。

 

然后是这个问题搞定了,但是CListCtrl中InsertItem方法调用只能显示一行数据,的确可以MoveNext,但是只要调用InsertItem它就只显示一行(ListCtrl显示多列时会出现这种情况,如果只显示一列就很正常)。ODynaset和CListCtrl完全是两个类库中的东西,难道这两者有冲突?此时的ODynaset,我将它设置成了全局变量。后来我把ODynaset设置为局部变量,CListCtrl对象就可以显示正常了,这真是有点搞不懂了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值