当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 今天我在BBS的VC版上转悠,看到由个哥们出了这样的问题:说他在编写MFC的数据库程序(ODBC)的时候出现了错误,再插入新记录后调用Update的时候出现了Assert,由于再BBS上,我和他通过信息交流了一下,发现他在AddNew和Update之间调用了Format。
 

 

    摘要: 如果想得到windows中我的电脑或者网络邻居等系统图标可以有如下解决办法。方案一 用图标提取软件从c:\winnt\system32\shell32.dll或者c:\winnt\explorer.exe中提取出来然后加入到自己的程序中(路径随操作系统和安装目录不同而变化)这种方法的缺点是不同的操作系统的系统图标有一些变化,比如说2003和2000的系统图标就有很大变化,如果你提取的是2000的......
 ·构造函数初始化表的使用规则    »显示摘要«
    摘要: class a{ a(int x);//a的构造函数};class b{ b(int x, int y);//b的构造函数};b::b(int x, int y) :a(x) //在初始化表里调用a的构造函数{}上述为:(1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。(2)类的const常量只能在初始化表里被初始化,因为它不能在函数体内用赋值的方式来初始化。 class a......


VC6自带的MFC4.2中CString.Format与CRecordSet的兼容性问题

今天我在bbs的vc版上转悠,看到由个哥们出了这样的问题:

于是分析了一下.这个是我在bbs上发的帖子. 【程序编程相关:编程必备:VC常用知识重温

说他在编写mfc的数据库程序(odbc)的时候出现了错误,再插入新记录后调用update的时候出现了assert,由于再bbs上,我与他通过信息交流了一下,发现他在addnew与update之间调用了format.直觉告诉我问题出在这里. 【推荐阅读:MAPX在VC和C++builder的O

我们在使用odbc进行数据库的插入操作时,都是这么一个流程: 【扩展信息:(转载)浅析”流光种植者”的编程实现

这个问题我仔细看了一下,问题出在mfc内部:下面所述仅适用于vc6带的mfc4.2

addnew()

//给成员赋值

update()

而在mfc的源文件dbcore.cpp 1040行,有这样一行注释:

// buffer address must not change - odbcs sqlbindcol depends upon this

由于mfc在进行默认的数据源绑定时,使用cstring绑定字符串型的成员,而cstring使用的是动态的内存管理方式,因此这个缓冲区地址其实是可以改变的,因此,在dbcore.cpp的1041行开始便是这样几句:

void* pvbind;

pvbind = value.getbuffer(0);

value.releasebuffer();

if (pvbind != pinfo->m_pvbindaddress)

{

   trace1("error: cstring buffer (column %u) address has changed!\n",

   nfield);

   assert(false);

}

因此,如果你在调用addnew与update之间把cstring的缓冲区移动了,对不起,你必须收到一个assert.(nickshen好像就是这里的问题吧)

这样问题就很清楚了,就是在你调用addnew与update之间不能移动缓冲区.
...   下一页

    摘要: vc中没有现成的函数来选择一个文件夹,但这是经常会用到的,怎么办?自动动手,丰衣足食!使用shbrowseforfolder,代码如下:#include <shlobj.h> int selfolder(hwnd hparent, cstring &strfolder){ strfolder.empty(); lpmalloc lpmalloc; if (::shgetmal......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE