NT系统下ADO操作Access数据库出现的怪现象?

neooranderson 2006-04-25 07:55:09
用ADO操作数据库,放在动态链接库中的线程里执行:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
InitHisData(pColPara);//数据库操作函数,在DLL中
}
//起线程
void InitHisData(void* addr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxBeginThread((AFX_THREADPROC)HisDataSave,(IOSOCKET *)addr,THREAD_PRIORITY_NORMAL);
}
//线程函数
UINT HisDataSave(LPVOID pParam)
{
SYSTEMTIME tm;
GetLocalTime(&tm);
static WORD lastHour=tm.wHour;
ConnectData();
for ( ; ; )
{
if (bStopFlag)
{
DataDisconnect();
return 0;
}
GetLocalTime(&tm);
if(lastHour!=tm.wHour)
{
SaveHisData();//SaveHisData包含打开表、插入记录、关闭表的操作
lastHour=tm.wHour;
}
Sleep(1000);
}
}
现象:我在SaveHisData函数中添加记录时使用了m_pRecordSet->Filter属性,结果程序一运行起来,NT系统右下角的系统时钟无法修改(在系统日期/时间面板修改时钟后,点击确定或应用,日期/时钟面板没响应,鼠标移到此面板上变成沙漏形),数据库程序工作仍然正常,系统内存、CPU占用率都正常。
如果我不使用m_pRecordSet->Filter属性,则没有此现象,另外,我测试如果不使用for循环,只让数据存储一次(仍然使用Filter属性),同样正常。
此外,在Win2000系统中上述代码工作完全正常(使用Filter属性,且用For循环)

各位大侠,指点指点,不胜感激。
...全文
197 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
neooranderson 2006-05-12
  • 打赏
  • 举报
回复
未解决,结贴,给分
neooranderson 2006-05-08
  • 打赏
  • 举报
回复
多谢,我先试一下
roscoe 2006-05-08
  • 打赏
  • 举报
回复
先加了再试试,线程中使用了COM却没有CoInitialize 会出很多怪现象,不知你这个是不是
neooranderson 2006-05-08
  • 打赏
  • 举报
回复
roscoe,NT是4.0的,太感谢了,我原来是在连接数据源时进行了COM环境初始化,确实未进行OLE初始化的,这样会有什么问题?
roscoe 2006-04-30
  • 打赏
  • 举报
回复
NT是4.0? 别的不清楚,至少这个线程函数有个低级错误,没有对OLE在线程中初始化.
neooranderson 2006-04-26
  • 打赏
  • 举报
回复
斑竹帮个忙,万分感激,快急晕过去了
neooranderson 2006-04-25
  • 打赏
  • 举报
回复
??没人理我??救命救命

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧