
你的方法有很大问题
按下KEY,显示对话框
那么主线程就执行到子对话框中的代码
你的所谓"KEY回调函数"被阻塞
等子对话框终止后
"KEY回调函数"才恢复执行
那个时候对话框都没有了
做什么也没有效果了
在"KEY回调函数"内子对话框窗口类中的个变量还是有效的
但是子对话框中的子控件"List"已经销毁了
解决办法:
在子对话框的OnInitDialog函数中初始化你的List
而非在"KEY回调函数"中
2.如果是非模态对话框
那么"KEY回调函数"不会阻塞
你可以设置List内容
但是必须经过动态创建对话框类的实例并且调用Create创建对话框
如果这些没有做
那么仍旧是访问异常
3.DoDataExchange用于控件和某数据成员间建立一种隐射关系
不应该将它作为初始化函数使用
初始化一般数据可以使用构造函数
初始化子窗口可以使用OnInitDialog
4.关于ListCtrl
Dlg1.m_List.InsertItem(0,"行")//插入行
Dlg1.m_List.SetItemText(0,1,"列")//插入列
在SetItemText之前
请务必使用InsertColumn函数插入一列
不然你想插入的那一列根本不存在
或许也是一个访问异常的原因(我不确定会否异常,但这样做是不对的)
用odbc向数据库写入二进制数据的问题2009年02月05日 星期四 15:34odbc/mfc 向mysql 写入二进制数据的问题发表于:2008-10-21 18:01:33 楼主
问题描述:
向mysql添加其它类型的数据都没问题,当添加二进制数据,例如一个图片,程序执行正常但实际上并没有添加进去。
奇怪的是:我用mysql 的C API 向数据库中添加该图片后,使用 odbc/mfc 却可以很好的把它读出来。
添加二进制文件的示例代码如下:
其中rs 为结果集;m_data 的类型为CLongBinary
CFileStatus fileStatus
CFile fp("viewpp.jpg",CFile::modeRead)
fp.GetStatus(fileStatus)
Cnctable *rs=new Cnctable(mbase)
rs->Open(CRecordset::snapshot)
rs->AddNew()
rs->m_data.m_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatus.m_size)
size_t temps= fp.Read(rs->m_data.m_hData,fileStatus.m_size)
rs->m_data.m_dwDataLength = fileStatus.m_size
rs->SetFieldNull(&rs->m_data,FALSE)
rs->Update()
注:使用的odbc驱动为3.51
如有解答不胜感激。
发表于:2008-10-23 15:43:024楼 得分:0
问题已经解决,感谢各位的回答,
下面是翻阅MSDN 使用CByteArray解决上述问题,
具体原因不明,可能是兼容性问题。
代码如下:
m_data 的类型由CLongBinary 改为CByteArray;同时修改DoFieldExchange中对应的内容
CFileStatus fileStatus
CFile fp("viewpp.jpg",CFile::modeRead)
fp.GetStatus(fileStatus)
Cnctable *rs=new Cnctable(mbase)
rs->Open(CRecordset::snapshot)
rs->AddNew()
rs->m_data.m_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatus.m_size)
rs->m_data.m_dwDataLength = fileStatus.m_size
------------------------------下面是改动的地方----------
nct->m_data.SetSize(fileStatus.m_size)
fp.Read(nct->m_data.GetData(),fileStatus.m_size)
nct->Update()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)